![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
薇鹅鹅莉特
这个作者很懒,什么都没留下…
展开
-
包含min函数的栈(JZoffer)
使用vector模拟栈,寻找min的时候遍历一遍即可;使用两个栈,一个正常存储,一个栈用来把最小元素(存在栈中的)维持到栈顶原创 2022-11-08 01:04:56 · 164 阅读 · 0 评论 -
字符串的排列(剑指offerDFS)
思路1:使用DFS遍历字符串,进行字符交换,每次都先和自己交换,然后再和后面的字符依次交换,通过for循环来将已经处理过的字符排除掉(即下标往后移动)原创 2022-11-01 09:44:51 · 112 阅读 · 0 评论 -
倒数最后k个结点
将结点放入vector中,然后翻转,直接返回第k-1个元素即可(注意下标越界)原创 2022-10-23 23:53:24 · 135 阅读 · 0 评论 -
链表中环的入口结点(剑指)
首先用快慢指针判断是否有环,若有环,则快慢指针会相遇,记录相遇结点,让新指针p1从头出发,相遇结点指针p2也出发,再次相遇时即是入口结点原创 2022-10-17 23:35:02 · 61 阅读 · 0 评论 -
二叉树的下一个节点(剑指offer)
根据二叉搜索树的特点,比如3,5,4;4 就是父节点,3是左孩子,5是右孩子,可以总结出以下几点原创 2022-10-05 00:11:29 · 115 阅读 · 0 评论 -
栈的压入,弹出序列(剑指)
使用栈来模拟出栈与入栈;入栈后判断出栈序列与当前栈顶元素是否相同,若相同则出栈并且继续判断,否则继续入栈;最后判断栈是否为空即可原创 2022-09-26 15:39:27 · 90 阅读 · 0 评论 -
从上往下打印二叉树(剑指offer)
剑指offer,题目从上往下打印二叉树原创 2022-09-19 15:30:23 · 69 阅读 · 0 评论 -
二叉树中和为某一值的路径(一)
二叉树中和为某一值的路径原创 2022-08-23 12:10:18 · 143 阅读 · 0 评论 -
数字在升序数组中出现的次数(剑指offer)
数字在升序数组中出现的次数,简单易懂原创 2022-08-16 00:39:54 · 95 阅读 · 0 评论 -
连续子数组的最大和(剑指offer)
连续子数组的最大和,即滑动窗口的求解原创 2022-08-01 16:09:39 · 98 阅读 · 0 评论 -
DFS深度优先遍历
所谓DFS就是指:优先考虑深度,换句话说就是一条路走到黑,直到无路可走的情况下,才会选择回头,然后重新选择一条路。图的节点结构1.点集(包含图里面所有的点)2.边集(邻接矩阵,点与点之间是否可达)3.点的数目4.边的数目初始化图除了初始化图自己,还有分配堆空间,因为节点结构里面有一维数组和二维数组;那就涉及到一位数组和二维数组的动态分配;点的数目由传入的个数决定,边的数目初始化为0创建图创建的过程其实也是遍历的过程,在循环之中将点赋值给图的点集,将邻接矩阵的值赋给边集原创 2021-08-21 22:21:15 · 121 阅读 · 0 评论 -
非递归遍历二叉树
我们利用栈来实现遍历二叉树二叉树的创建依然是通过递归实现的,此外我们需要建立一个链栈来压入或弹出每一个元素先序遍历1.进栈之前先访问该结点,visit();2.再继续找其左孩子,直到为NULL为止,然后出栈该元素3.再判断刚刚出栈元素有没有右孩子,若没有,则继续出栈;若有,则先访问,再进栈4.若没有右孩子,则出栈;若有,则先访问,再进栈5.循环下去...void preOrder(TreeNode* T){ //因为要遍历树,所以设置工作指针 TreeNode* no原创 2021-08-07 17:03:32 · 82 阅读 · 0 评论 -
二叉树的创建与遍历
我们依然通过结构体来定义它的结点结构;分为数据域,指向左孩子的指针(指向左结构体),指向右孩子的指针(指向右结构体)二叉树的结点结构typedef char Type;//Type是自己定义的数据类型//二叉链表存储结构typedef struct TreeNode{ Type data; struct TreeNode* Lchild; struct TreeNode* Rchild;}TreeNode;创建一个二叉树我们需要改变指针所指向的数据,并且递归会跳出函数,所以原创 2021-07-23 16:39:32 · 132 阅读 · 2 评论 -
字符串匹配(浅)
本文介绍两种字符串匹配的方法:BF算法(暴力匹配),KMP算法(进阶)BF算法暴力匹配,顾名思义就是一个一个的进行匹配,若匹配成功,则移动到下一位,否则进行回溯分为主串与子串,从第一位开始校对,若比对失败,则子串回溯,主串移动到下一位字符串的结构typedef struct String{ char* data;//数据域 int len;//串的长度}String;字符串的初始化String是我们自己对结构体设置的别名1.先new一个指针;并把它的data设为NU原创 2021-07-17 22:05:50 · 171 阅读 · 0 评论 -
队列的学习(浅)
循环队列:1、循环队列是队列的顺序存储结构2、循环队列用判断是否为空利用 Q.front=Q.rear3、循环队列头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置4、按照队列的定义,队头删除,队尾插入循环队列的结点结构front与rear为索引指针;front始终指向队列头元素,rear指向队列尾的下一个位置(相当于空)typedef struct queue{ int front; int rear; int data[MAXSIZE];}Queue;初原创 2021-07-10 23:57:11 · 131 阅读 · 0 评论 -
链表的学习(浅)
什么是链表?---链表是一种常见的重要的数据结构。它是动态地进行存储分配的一种结构。链表和数组比较,不用事先确定存储空间,而是根据需要开辟内存单元。单链表的结点结构struct node* next是结构体指针,指向下一个结构体typedef struct node{ int data;//数据域 struct node* next;//指针域}Node,*Link;//Node为struct node的别名,*Link为指向结构体的指针初始化单链表1.创建一个头结点,如果内存原创 2021-06-25 23:07:09 · 238 阅读 · 0 评论 -
栈的学习(浅)
数据结构栈数据结构栈什么是栈?---栈(stack)是限定仅在表尾进行插入或者删除的线性表,分为栈顶,栈低。 不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为先出后出的线性表。PS:代码区内的cout语句仅用来帮助你更好的理解栈的工作进程,实际手写栈的时候不需要加入它1.顺序栈栈和线性表类似,也有两种存储表示方法顺序栈和链栈,链栈的操作是线性表操作的特例。顺序栈即栈的顺序存储结构是利用一组地址连续的存...原创 2021-06-17 22:57:18 · 458 阅读 · 0 评论