
数据结构学习笔记
zenoxxx
这个作者很懒,什么都没留下…
展开
-
遍历二叉树的迭代写法
使用递归遍历二叉树一般比较简单,使用迭代较难。这两种方法是等价的,不同之处在于递归时隐式维护了一个栈,而迭代时则要显示地将这个栈模拟出来。1.前序遍历前序遍历时中左右的遍历顺序,处理时先将根节点压入栈中,然后处理根节点,将右孩子先压入栈中,再将左孩子压入栈中(处理时先左后右,故入栈顺序为先右后左) vector<int> preorderTraversal(TreeNode* root){ stack<TreeNode*> stk; vector<int>原创 2021-02-22 21:51:30 · 402 阅读 · 0 评论 -
快慢指针(Fast and Slow Pointers)
快慢指针为双指针系列下的一个分支双指针是指在遍历对象的过程中,不使用单个的指针去遍历,而是 使用两个相同方向(快慢指针)或相反方向(对撞指针)的指针进行扫描,从而实现一些功能。快慢指针的应用1.判断链表是否有环如果存在环,则快慢指针一定会相遇2.在有序链表中寻找中位数设置快指针移动速度为慢指针的二倍,则当快指针移动到表位时,慢指针到达中点位置,但在实际实现的过程中,应该考虑到链表元素个数的奇偶性,进行合理的调整3.输出链表中倒数第k个节点快指针先走k步,随后快慢一起走,当快指针走到尾部时,满原创 2021-01-07 15:14:00 · 2167 阅读 · 0 评论 -
Pop Sequence
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, …, N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and N is 7, we can obtain原创 2020-12-06 19:41:13 · 279 阅读 · 0 评论 -
c++实现Dijkstra算法寻找有向无权图的最短路径
Dijkstra算法学习笔记Dijkstra算法常用来求图中单个源点到其他各点的最短路径,该算法采用贪心策略,每次都挑选最短路径的顶点。对每个结点使用时可求图中任意两点间的最短路径,不过求图中任意两点间的路径时常使用Floyd算法实现。本次使用的图为有向带权图,存储结构为邻接矩阵,该存储结构更适合稠密图。一、求解过程1.将网(带权的图)中的顶点分为两组,一组为已知最短路径的顶点,一组为未知的。后面将通过此算法不断将未知集中的顶点加入已知集。2.此算法依赖三个容器,在此使用的是数组。分别为dist[原创 2020-11-23 22:42:30 · 933 阅读 · 0 评论 -
用栈实现中缀转后缀(c++)
用栈实现表达式中缀转后缀栈的特点是先进后出,可以用来将中缀表达式转换成后缀表达式,在本程序中对表达式进行了限制,数字0-9,运算符只有±*/(),缩小了问题规模。转换思路:将表达式输入,全部数据以char型存储在vector容器中,输入完后从左到右扫描vector,遇到数字直接输出,遇到操作符时根据操作符的种类分为三种情况进行操作:1.遇到*/和( 时直接入栈,乘除运算级别最高,所以应该直接入栈,左括号也直接入栈,直到遇到右括号才出栈。2.遇到±时,若栈中无元素,则直接入栈,否则开始出栈直到遇到左括原创 2020-10-30 18:48:59 · 1795 阅读 · 0 评论 -
数据结构学习笔记——单链表实现多项式加法
一元n次多项式的加法(单链表实现)下面展示一些 代码。首先是单链表结构体的定义typedef struct LNode{ int Base_number; int Index_number; struct LNode *Next; }LNode,*LinkList;typedef 将 struct LNode 的名字重定义成 LNode,将指向LNode的指针重定义成LinkList。以下是用到的一些函数。 void Creat(LinkList &polynom原创 2020-10-29 22:35:55 · 599 阅读 · 0 评论