数据结构
文章平均质量分 82
讲解基础数据结构和高级数据结构的知识和经典题
c++机械师
计科菜鸡一名
展开
-
二叉树常见题型(1)
做二叉树的题目最常见的做法就是递推和迭代,而一般我们更青睐递推,在我们写递推的时候,我们,我们只需要,你想一步一步的把递推的细节过程想明白?这难道不是很麻烦吗?只要边界条件和单层逻辑没有问题,结果也是没问题的,这也是数学归纳法的逻辑。原创 2024-01-07 13:33:46 · 1087 阅读 · 4 评论 -
数据结构:二叉树
树是计算机数据存储的一种结构,因为存储类型和现实生活中的树类似而被称为树。树的源头称为根,其余分叉点称为节点,而起始的分叉点被称为根节点,树的尽头是叶,我们称之为叶节点。每一个节点的起点被称为父节点,由父节点衍生出去的节点称为子节点,没有父节点的节点为根节点,没有子节点的节点称为叶节点,共用一个父节点的节点为兄弟节点。树的高度从下往上看,深度则是从上往下看,层数等于高度+1。原创 2024-01-06 21:13:06 · 1189 阅读 · 2 评论 -
数据结构:STL:queue stack
queue的定义和vector没什么不同queue变量名;类型可以是int,double等基本数据类型,也可以是自定义的结构体,也可以是STL容器。stack变量名;类型可以是int,double等基本数据类型,也可以是自定义的结构体,也可以是STL容器。原创 2024-01-05 11:12:29 · 994 阅读 · 2 评论 -
数据结构:队列(链表和数组模拟实现)
我们首先创建一个值为data的队列节点vtx,如果队尾非空,则将vtx作为队尾元素的后继,否则将队首元素置为vtx,队尾元素变成vtx,队列的长度加一。我们将队首元素缓存到temp中,将当前的队首变成temp的后继,释放temp的内存,队列长度减一,如果此时队列为空,则将队尾置为空。我们用链表来模拟每个队列元素,可以用链表节点来表示,data是数据域,next是指针域。队列也是一种数据结构,队列和栈不同的是,栈是先进后出,而。,这跟我们平时排队是一样的,先排的先办完事走,后排的后走,队列又被称为。原创 2024-01-01 23:01:40 · 970 阅读 · 1 评论 -
数据结构:单调栈
给定一个温度序列,让你求每个温度离它最近的比它高的温度是之后第几天,显然符合单调递增栈的特征,我们定义一个栈stk来存储每个温度对应的下标和存储结果的vector数组res,从头开始遍历,如果栈为空或者栈顶下标对应的温度大于当前温度值,则当前温度对应的下标入栈;假如我们现在有一个序列10,2,8,5,13,我们要找每个数离它最近的比它大的数,我们要构造一个单调递增的栈,则如果栈为空或者入栈的元素大小小于栈顶值,就入栈,否则入栈会破坏栈的单调性,这时候比入栈元素小的元素全部出栈。单调递减栈的原理和递增类似。原创 2023-12-27 12:50:26 · 852 阅读 · 1 评论 -
数据结构:Trie树(字典树)
此时p=1,指向a这个节点,判断son[1][1]是否存在,发现没有这个子节点,进行插入,即son[1][1]=++idx=2,表示下标为1的节点a有一个子节点,存储字符b,这个子节点的下标为2。接着我们就要找是否存在根节点的子节点,这个子节点存储了字符a,很显然是没有的,所以我们就要插入字符a,就是son[0][0]=++idx,son[0][0]就表示0这个下标为0的根节点有一个子节点,存储字符a,这个子节点的下标为1;然后就令p这个指针指向这个子节点,即p=son[0][0]=1;原创 2023-12-26 09:05:58 · 705 阅读 · 2 评论 -
数据结构:KMP算法
前缀表也就是next数组要求的是最长相等前后缀的长度,例如a的最长相等前后缀为0,aaa得到最长相等前后缀为2,aaba的最长相等前后缀为1。原创 2023-12-25 09:27:06 · 2278 阅读 · 3 评论 -
栈的常见题型
的问题,所以我们想到用栈来解决问题,首先定义一个栈,然后就遇到了一个问题,我们遍历tokens时,怎么判断是不是数字呢,只有数字我们才能入栈,有三种情况:一位数,多位数,负数,对于负数我们可以计算这个字符的长度,如果长度大于1,就是数字;接下来我们定义一个栈stack,和头指针now指向head,把链表各个结点的值存入栈中,接着我们再定义一个ret作为反转后的链表的虚拟头结点,以及返回的结点,接着就是栈中的元素出栈,将链表的值进行更新,ret和head不断向右走,最后返回retHead->next;原创 2023-12-24 18:53:52 · 1041 阅读 · 3 评论 -
数据结构:栈
栈是仅限在表尾进行插入和删除的线性表,栈又被称为后进先出的线性表。原创 2023-12-23 14:10:41 · 556 阅读 · 2 评论 -
链表常见题型(1)
这个题还是比较简单的,首先并不需要虚拟头结点,因为就算头结点的值和下一个结点的值相等,也会保留头结点,我们只需要遍历链表,如果cur的下一个结点的val值和cur的val值相等,我们就删除cur的下一个结点,需要注意的是循环条件是cur->next,当cur遍历到最后一个结点时,cur的下一个结点就不存在是NULL,此时应该退出循环,如果是cur则会继续进入循环造成NULL指针的解引用,会报错。我们要想删除链表的某个结点,需要利用上一个结点的next指针指向删除结点的下一个结点。原创 2023-12-20 12:16:16 · 1881 阅读 · 2 评论 -
数据结构:链表
int data;}ListNode;这就是一个结点的定义,我们把一个结点看成一个结构体,其中data是数据域,可以是任意类型,而struct ListNode* next定义了一个指向ListNode结构体的指针,这个指针的地址是后继结点,将指向下一个结点,这就是指针域,如下图所示下面看看具体怎么创建一个链表的结点。原创 2023-12-19 23:52:19 · 1125 阅读 · 4 评论