前提知识回顾和关联
有了数据结构基本知识,数据结构是数据对象的逻辑结构+存储结构+运算(增删改查)。逻辑结构有集合、线性结构、树结构、图或网状结构。
显然线性表是数据逻辑结构的线性结构。它按照循序存储和链式存储(仅仅是分类标准,别混淆之前物理存储的概念)分为顺序表和链式表,链式表主要有单链表、双链表、循环链表、静态链表。
顺序表
地址连续的存储单元存储元素的表。由一个一维数组和一个序列长度构成。
顺序表是一个数据结构,数据结构三元组是逻辑结构、存储结构、运算。它的逻辑结构就是线性结构,它的存储结构是顺序存储且是静态存储,导致不知道设置什么值合适(缺点1),它的运算包括“增删改查”。“增”就是插入,在任何一个位置插入都会导致后面所有数据元素往后移动一个地址(缺点2);“删”和“增”是相对的(缺点3);
基于缺点提出链表概念。
链表
- 单链表
两部分组成,前面是数据域(存储数据元素的位置),后面是指针域(存储指向的位置)。
-从以上五个相连的“单元”可以看出,它的存储空间可以不是连续的,指针域内的指针可以确定位置。(可以理解为顺序表的指针直接指向下一个位置,且这个指针不能发生改变)
链表依然是数据结构,都有三元组。逻辑结构依然是线性(因为都是表);存储结构是链式存储且是动态存储;“增删改查”运算运用改变指针的方式进行,避免了顺序表的弊端。
单链表有关结点的概念:上述的单元就是一个结点;第一个结点中前面那个不是数据元素而是指针H,表示头结点,和我们常识相悖,为什么这里这样处理,原来是为了在链表相关编程下,不用分别空表的情况。第二个单元首元结点,也就是第一个存储数据元素的结点简称,对应存储的数据元素叫首元元素,表头元素和表尾元素也就好理解,分别为第一个被存储的数据元素和最后一个被存储的数据元素。对应着链表结构和图例进行理解 - 双链表
单指针变双指针,原理和单链表一致,对应着理解,不做赘述。
- 循环链表
包含循环双链表和循环单链表,指针头结点和尾结点进行指针相连。原理和单链表一致,也不做赘述。
静态链表
由于高级语言中没有指针类型,使用的一个二维数组模拟链表功能(为什么模拟,因为链表比顺序表优势更大,利用了它的原理,形式变了而已),功能上类似于单链表,但没有单链表的动态分配。
需要注意的是它是存储空间是静态的,也就是我们不能确定形状为一个合适的形状,有顺序表的第一个缺点。
Thank for reading