逐步刨析,深入了解之数据结构
文章平均质量分 85
本栏将一步步带大家探索数据结构的最深处
hehelm
keep it simple and stupid
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构】逐字分析函数栈帧的创建与销毁全过程
探究函数栈帧的创建与销毁原创 2023-04-03 18:09:55 · 382 阅读 · 2 评论 -
【数据结构】栈&队列OJ
我们使用两个队列,一个存放数据一个为空,当push数据是,我们就在q1处入队列,而当要出栈的时候,我们把q1的数据移到q2中即可,最后再将q1中仅剩的数据返回值并出队列。本题设置了front与rear结构,因此在取头尾的时候直接利用front和rear即可获取元素下标,但是要注意的是,因为是循环队列,在取队尾的时候要取队列长度的模。如何用栈实现队列呢?我们知道,栈和队列的首要区别就在于数据操作方式,栈是FILO,而队列则是FIFO,要想用两个栈实现队列,那就需要不断变换两个栈里的内容。原创 2023-04-01 20:19:12 · 181 阅读 · 2 评论 -
【数据结构】栈&队列
队列与栈不一样的地方在于队列支持的是FIFO操作,因此我们要不断变化队首的元素,如此一来,用数组实现的话,每次操作都会调动整个数组,严重影响效率,但是链表可以支持头插头删,这样一来,FIFO的问题便可迎刃而解。如果用链的话,每次出栈都需要找到尾结点的前一个,会造成许多不必要的麻烦,当然双向链表可以解决这个问题,但是仔细想想,似乎用数组来的更方便一些。由于栈是由数组模拟实现的,入栈和出栈其实也就是对数组进行插入删除,但要特别注意的是,top指向的是栈顶元素的下一个位置。越努力,越幸运,加油!原创 2023-03-30 20:55:57 · 165 阅读 · 1 评论 -
【数据结构】链表OJ
a+(n+1)b+nc=2(a+b)⟹a=c+(n−1)(b+c) 由此可知,从相遇点到入环点的距离加上n−1 圈的环长,恰好等于从链表头部到入环点的距离。因为合并链表需要进行头插,我们可以设置哨兵为的头节点来方便操作,但是原链表是无哨兵位的,因此在返回时要返回lesshead->next;本题我想到的是先遍历计数两个链表的长度,然后双指针让长链表先走长度差,之后两个指针再一起走,找到共同节点。当然,本题还有另一个思路,我们可以在slow和fast指针相遇点断开链表,接着把问题转换成两个相交链表求交点。原创 2023-03-29 18:01:15 · 243 阅读 · 1 评论 -
【数据结构】单链表升级——带头双向循环链表
由于双向循环链表的插入删除操作类似,因此只将头插头删进行简单概要。双向循环链表的功能与单链表无异,并且虽然该链表看起来结构更加复杂,但实现方式却比单链表容易很多。同样,双向循环链表的实现方式与单链表基本无异,只是多了一个指向前一个位置的prev指针。而删除也较为简单,但是要控制好prev指针和next指针,防止出现“野”的现象。循环链表是链表的一种形式,而带头则是指链表中多了一个哨兵位的节点。带头循环双向链表与单链表的联系密不可分,大家可以将两篇内容连起来学习。而销毁也只需从头遍历释放即可。原创 2023-03-26 22:59:39 · 310 阅读 · 2 评论 -
【数据结构】多图警告!单链表的操作实现以及原理
对于给定的pos位置进行增删,原理与头尾的操作相似,但是如果pos在链表中间位置,则需调整pos位置的前一个的next,当然如果pos本身就是头尾,那其实与上面的操作无异。单链表作为一种链式数据存储结构,能实现的操作有查看数据(打印)、增加数据(头插尾插)、删除数据(头删尾删)、插入数据、查找特定数据、删除特定位置的数据等操作。特别注意的是,由于尾删时需要先找到尾节点的位置,如果我们直接将尾节点置为空,则会形成尾指针为野指针的现象,因此我们要找尾节点的上一个next并将其置为空。答案还是看物理结构。原创 2023-03-26 17:14:00 · 618 阅读 · 1 评论
分享