《数据结构》—— 线性表(下)

本文内容,参考自《大话数据结构》(程杰著) ,一部分自己修改,如:把C语言换成了Java语言。写作目的,意在加强记忆。

本文写作工具,使用 Typora。

循环链表

对于单链表,由于每个结点只存储了向后的指针,这样,当中的结点就无法找到它的前驱结点了。比如,我们要在最后一个结点时,能找到第一个结点,怎么办?

将单链表中最后结点的指针由空改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表。

循环链表解决了一个很麻烦的问题。如何从当中一个结点出发,访问到链表的全部结点。

双向链表

我们的单链表,总是从头到尾找结点,难道就不可以正反遍历都可以吗?当然可以,只不过需要加点东西。

我们在单链表中,有了 next 指针,这就使得我们要查找下一结点的时间复杂度为0(1)。可是如果我们要查找的是上一结点的话,那最坏的时间复杂度就是0(n)了,因为我们每次都要从头开始遍历查找。

为了克服单向性这个缺点,我们的老科学家们,设计出了双向链表。双向链表是在单链表的每个结点中,再设置一个指向其前驱结点的指针域。所以在双向链表中的结点都有两个指针域,一个指向直接后继,另一个指向直接前驱。

即然单链表也可以有循环链表,那么双向链表当然也可以是循环链表。

线性表总结

定义:线性表是零个或多个具有相同类型的数据元素的有限序列。

顺序存储结构:用一段地址连续的存储单元依次存储线性表的数据元素。通常都是使用数组来实现这一结构。

链式存储结构:由于顺序存储结构的插入和删除操作不方便,引出了链式存储结构。没有固定的存储空间限制,可以比较快捷的插入和删除操作的特点。链式存储结构的不同形式,如单链表、循环链表和双向链表。

顺序存储结构 链式存储结构
单链表、循环链表、双向链表

你可能感兴趣的:(《数据结构》—— 线性表(下))