8、栈:如何实现数据的后进先出

你好,我是王健伟。 从“链表”毕业之后,我们就要进入“栈”的学习了。作为一种耳熟能详的数据结构,“栈”到底是个什么东西呢? 还记得我们之前提到过的线性表吗?没错,栈仍旧是一种线性表。不过它只能在一端进行插入和删除操作,先入栈的数据只能后出来,而后入栈...

快速上手C++数据结构与算法

7、静态链表:用一维数组表达的链表

你好,我是王健伟。 前面已经聊了很多种链表,今天我们再来聊一聊最后一种链表——“静态链表”。 有些早期的高级语言,并没有指针这种概念,之前我们探讨的链表实现方法在这些高级语言中并不适用。于是,用一维数组代替指针来描述单链表的想法应运而生,这种用一维数...

快速上手C++数据结构与算法

6、循环链表:如何更方便地寻找数据

你好,我是王健伟。 今天我要和你分享的主题是“循环链表”。循环链表可以分为单(单向)循环链表和双(双向)循环链表,只需要在原有单链表或者双链表基础之上做一些比较小的改动即可。 那么,为什么一定要在单链表或者双链表基础上引入循环链表呢?接下来,我们就从...

快速上手C++数据结构与算法

5、双链表:搜索链表中节点的速度还可以更快吗

你好,我是王健伟。 上节课,我们学习了单链表的相关操作,我们会用它来对数据进行顺序存储,如果需要频繁增加和删除数据,同样也可以用到单链表。而它也可以衍生出好多种链表结构,双链表(也称双向链表)就是其中一种。 在单链表中,有一个指针域用于指向后继节点。...

快速上手C++数据结构与算法

4、单链表:如何通过指针提升插入、删除数据的速度

你好,我是王健伟。 今天我继续说一说“单链表”。 上节课我们提到过,顺序表(线性表的顺序存储)的最大缺点是,在插入和删除操作可能会移动大量元素,去保证元素之间的内存不能有空隙,而这,会导致程序的执行效率变低。 那我们要如何弥补这个缺点呢?这就涉及到了...

快速上手C++数据结构与算法

3、顺序表(下):常用操作合集与复杂度分析

你好,我是王健伟。 上节课,我们实现了向顺序表中插入元素的操作。 这节课,我们继续探讨顺序表的不同操作,和上节课一样,先从抽象模型开始理解,分析元素在不同操作下可能会发生的情况以及我们需要注意到的细节,再去理解操作的实现的代码。通过时间复杂度的分析,...

快速上手C++数据结构与算法