清华大学《数据结构(C++语言版)》第三版 算法详析
文章平均质量分 64
学习 邓俊辉 博士 DSA书籍及慕课,获益良多,记录一些基本的算法,欢迎批评指正。
孤独的咬杀君
记录学习工作笔记,共勉
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
二叉树重构
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目二叉树重构:已有遍历序列,重新构造二叉树,2.数据结构与算法[先序 | 后序] + 中序 可以重构例如:[先序 + 后序] x 真 可以重构若不为真二叉树3.源代码4.时间复杂度5.结论[先序 | 后序] + 中序 可以重构[先序 + 后序] x 真 可以重构如有错误,请您批评指正。参考书籍:清华大学《数据结构(C++语言版)》(第三版) 邓俊辉...原创 2021-01-16 15:20:27 · 338 阅读 · 0 评论 -
二叉树的层次遍历
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目二叉树层次遍历2.数据结构与算法DS:queue算法:使用queue的顺序特征3.源代码模板类定义,参考我的文章:《二叉树BT 模板类实现》这里只给出实现各版本后序遍历的代码。//层次遍历template<typename T> template<typename VST> void BinNode<T>::travlevel(VST &visit){ queue&l原创 2021-01-16 14:57:52 · 162 阅读 · 0 评论 -
二叉树的后序遍历 递归与迭代
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目二叉树后序遍历2.数据结构与算法递归:迭代:引入辅助栈,处理递归嵌套问题。3.源代码template<typename T1> template<typename T> static void BinNode<T1>::gotoHLVF(stack<BinNodePosi(T)> &s){ while(BinNodePosi(T) x = s.top()){原创 2021-01-16 14:24:27 · 178 阅读 · 0 评论 -
二叉树的中序遍历 递归与迭代
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目二叉树中序遍历2.数据结构与算法递归:迭代:引入辅助栈,处理递归嵌套问题。3.源代码模板类定义,参考我的文章:《二叉树BT 模板类实现》这里只给出实现各版本中序遍历的代码。template<typename T1> template<typename T, typename VST> static void BinNode<T1>::goAlongLeftBranch(sta原创 2021-01-16 11:48:34 · 136 阅读 · 0 评论 -
二叉树的先序遍历 递归与迭代
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目二叉树的先序遍历2.数据结构与算法递归:迭代:引入辅助栈,处理递归嵌套问题。3.源代码模板类定义,参考我的文章:《二叉树BT 模板类实现》这里只给出实现各版本先序遍历的代码。//沿左侧链遍历辅助函数template<typename T1> template<typename T, typename VST> static void BinNode<T1>::visitAl原创 2021-01-16 10:26:53 · 159 阅读 · 0 评论 -
二叉树BT 模板类实现
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目BT模板类 维护2.数据结构与算法BinNode:父节点、左孩子、右孩子、数据域、高度BinTree:根节点指针、规模3.源代码#include "stdafx.h"#include <iostream>using namespace std;#define BinNodePosi(T) BinNode<T>*#define stature(p) ((p)? (p)->height原创 2021-01-16 07:47:40 · 404 阅读 · 0 评论 -
逆波兰表达式RPN 求值
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目逆波兰表达式求值2.数据结构与算法DS:stackAlgorithm:扫描RPN1.遇到数字就入栈2.遇到运算符就计算3.源代码#include "stdafx.h"#include <iostream>#include <string>#include <stack>using namespace std;int calculate(int n);int cal原创 2021-01-15 19:14:04 · 308 阅读 · 0 评论 -
中缀表达式转RPN
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目中缀表达式转RPN2.数据结构与算法DS:stackAlgorithm:参考我的上一篇文章:《中缀表达式求值 延迟缓冲》只需对其代码进行扩充,即可得到中缀表达式转RPN的算法。扩充内容(可以使用文本对比工具)扫描中缀表达式:当遇到数字,将数字追加到RPN后。当遇到符号,若执行计算(即>分支),则将栈顶符号追加到RPN后。3.源代码#include "stdafx.h"#include <ios原创 2021-01-15 17:35:19 · 442 阅读 · 0 评论 -
中缀表达式求值 延迟缓冲
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目中缀表达式求值:如:(1+2^3!-4)*(5!-(6-(7-(89-0!))))结果为:20132.数据结构与算法DS:stackAlgorithm:延迟缓冲代码框架:使用两个栈,一个数字栈,一个符号栈。遍历中缀表达式:是数字就入栈是字符就判断优先级1.当前符号>符号栈顶优先级:不计算2.当前符号<符号栈顶优先级:计算细节:符号栈:先push()一个哨兵\0,方便处理边界值连续多个字符原创 2021-01-15 16:46:02 · 199 阅读 · 0 评论 -
栈混洗
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目栈混洗甄别:要求时间复杂度为o(n)2.数据结构与算法DS:stackAlgorithm:嵌套递归模拟3.源代码#include "stdafx.h"#include <iostream>#include <string>#include <stack>using namespace std;//栈混洗甄别:str2是否为str1的一个栈混洗bool shuffling原创 2021-01-15 13:15:24 · 348 阅读 · 0 评论 -
括号匹配
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目括号匹配:给定一个表达式含有(),[],{}3种括号,验证是否匹配。2.数据结构与算法DS:stackAlgorithm:嵌套递归3.源代码#include "stdafx.h"#include <iostream>#include <string>#include <stack>using namespace std;//括号匹配bool isValid(string原创 2021-01-15 12:05:42 · 135 阅读 · 0 评论 -
十进制转二进制
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目输入一个十进制整数,转化为二进制2.数据结构与算法数据结构:stackAlgorithm:使用栈LIFO的特点:逆序输出3.源代码#include "stdafx.h"#include <iostream>#include <stack>using namespace std;//进制转换void convert(int num){ stack<int> s; wh原创 2021-01-15 02:29:42 · 258 阅读 · 0 评论 -
插入排序 逆序对本质
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目插入排序2.数据结构与算法数据结构:Listalgorithm:插入排序,从左至右扫描,将当前元素插入至前缀中合适的位置3.源代码#include "stdafx.h"#include <iostream>#include <time.h>#include <stdlib.h>#include <list>#include <algorithm>u原创 2021-01-15 01:30:19 · 337 阅读 · 0 评论 -
选择排序 稳定亦不稳定
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目选择排序2.数据结构与算法algorithm:每次选择最大的元素放在末尾.3.源代码#include "stdafx.h"#include <iostream>#include <time.h>#include <stdlib.h>#include <list>#include <algorithm>using namespace std;voi原创 2021-01-14 21:33:57 · 176 阅读 · 0 评论 -
list 唯一化
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目list唯一化2.数据结构与算法algorithm:先排序,再使用双指针进行唯一化3.源代码#include "stdafx.h"#include <iostream>#include <time.h>#include <stdlib.h>#include <list>#include <algorithm>using namespace std;原创 2021-01-14 18:22:46 · 515 阅读 · 0 评论 -
归并排序 (二路归并)
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5. 结论1.题目归并排序2.数据结构与算法data structure:vectoralgorithm:分治递归原问题:序列[0, n)的排序问题子问题:两个子序列[0, mid)与[mid, n)的排序问题平凡问题:两个有序子序列[0, mid)与[mid, n)的二路归并问题递归基:子序列区间长度为1.此时只有一个元素,自然成序,直接return即可;3.源代码#include "stdafx.h"#include &原创 2021-01-14 16:07:24 · 249 阅读 · 0 评论 -
起泡排序 最优化
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目起泡排序2.数据结构与算法algorithm:不断交换逆序对,减小逆序数,使无序序列变为有序序列。3.源代码#include "stdafx.h"#include <iostream>#include <vector>#include <time.h>#include <stdlib.h>using namespace std;//最优BubbleSort原创 2021-01-14 04:41:17 · 327 阅读 · 0 评论 -
有序vector 二分查找(A、B、C版本)Fib查找
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目给定一个有序向量A[0, n],在[lo, hi)区间内查找元素e,返回元素e的索引。若有重复元素,或查找失败 “返回不大于e的最大元素” 。2.数据结构与算法algorithm:二分查找(版本C)3.源代码#include "stdafx.h"#include <iostream>#include <algorithm>#include <vector>using name原创 2021-01-14 02:33:20 · 541 阅读 · 0 评论 -
LCS 递归与DP迭代
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目给定两个字符串,两个字符串的公共子串中最长的即为"最长公共子串" LCS2.数据结构与算法给定两个字符A[0, n), B[0, m)递归实现:比较两个字符串的末尾字符,总共有3种情况1.递归基:m=0或 n=0,其中一个字符为空字符,直接返回空串即可。2. 末字符 A[n-1] == B[m-1] == "X"减而治之: lcs(A[0, n-1), B[0,m-1)) + “X”其中子问题:两子串的lc原创 2021-01-11 20:38:39 · 526 阅读 · 0 评论 -
Fibonacci数列 递归与DP迭代
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目求解Fibonacci数列的第n项。0 1 1 2 3 5 8 13 ...2.数据结构与算法1.分治递归2.记忆(memoization)3.动态规划(dynamic programming):由自顶而下的递归,转为自底而上的迭代。3.源代码#include "stdafx.h"#include <iostream>using namespace std;//递归int fib(int n)原创 2021-01-10 21:44:18 · 257 阅读 · 0 评论 -
Max2 递归与分治
文章目录1.题目2.数据结构与算法3.源代码4.时间复杂度5.结论1.题目从数组区间A[lo, hi)中找出最大的两个整数A[x1]和A[x2],元素比较的次数,要求尽可能的少。2.数据结构与算法Algorithm:递归与分治1.原问题:数组A的Max2?2.分治:将数组A二分为数组A1与数组A23.两个子问题:数组A1的Max2与数组2的Max2?4.合并:A1的Max2与A2的Max2这4个元素的Max2就是A的Max25.递归基:考虑子数组长度为2或3两种情况。3.源代码#in原创 2021-01-10 19:48:36 · 504 阅读 · 0 评论
分享