线性表分为顺序存储结构和链式存储结构(单链表,静态链表,循环链表,双向链表)。
- 单链表(**一种动态结构,所占空间的大小和位置不需要预先分配划定)---每一个节点只记录一个节点信息,不能断。
若线性表需要频繁查找,很少进行插入和删除操作时,宜采用顺序存储结构(只读取情况)。若需要频繁插入和删除和插入时,宜采用单链表结构(不需要考虑存储空间的大小)。
- 静态链表:用数组描述的链表-----数组中每一个下标都是一个“节”包含数据和指向。
1;数组第一个元素的cur用来存放备用链表(空闲空间)的第一个结点的下标。
数组最后一个元素的cur用来存放第一个插入元素的下标,相当于头结点。
2;在动态链表中,结点的申请和释放分别借用malloc()和free()两个函数来实现。在静态链表中,操作的是数组,要我们自己实现这两个函数(将所有未被使用过的及已经被删除的分量用游标链成个备用的链表,每当进行插入时,便可以从备用链表上取得第一个结点作为待插入的新节点,通过游标找对应的下标依次读出即可),才能做到插入和删除操作。
3;静态链表不需要移动元素,只需要修改游标,但这样失去了顺序存储结构随机存储的特性,由存储分配带来的表长难以确定
- 循环链表:
将单链表中终端结点的指针端有空指针改为指向头结点,使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表。
- 双向链表:
在单链表的每个结点中,再设置一个指向其前驱结点的指针域。(它的前驱的后继和后继的前驱都是自己)