0、开篇词:学习数据结构与算法,也可以是件小事

你好,我是王健伟。欢迎和我一起学习数据结构与算法。 提到数据结构与算法,就一定会伴随着诸多所谓的坚持和抱怨。同时,还有两个词总是出现,一个是内功,是对知识的定位,一个是吃透,是对自己的期待。可是,我们是不是被这两个词束缚太久了,以至于出现了很多的问题...

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

1、编程环境:工欲善其事,必先利其器

你好,我是王健伟。 俗话说,“工欲善其事,必先利其器”,今天我们就来说说编程环境的搭建。 搭建一个良好的编程环境对于后续的学习非常重要,所谓好的编程环境,是指这个编程环境易学,易用,让使用者很少出错,即便出现错误也能根据一些信息快速定位出错的位置。 ...

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

2、顺序表(上):如何实现快速地随机访问

你好,我是王健伟。 今天来聊一聊最基础的数据结构——“顺序表”。 在聊顺序表之前,首先我们要引入“线性结构”和“线性表”的概念。 线性结构与线性表线性结构是一种数据结构,其中保存的数据像一条线一样按顺序排列,数据之间是一对一的关系,也就是每个数据只有...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9、队列:如何实现数据的先进先出

你好,我是王健伟。 上节课我们提到的“栈”,用的是“桶”和“抽屉”做类比,实现的是先进后出。这节课我们来聊“队列”,根据名字想象一下,它实现的是不是先进先出了呢? 是的。队列也是一种受限的线性表,它的特点是在一端进行插入操作,在另一端进行删除操作(与...

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