写在前面:好读书,要求甚解!
-
线性表:零或多个数据元素的有限序列,每个元素最多只有一个直接前驱元素和一个直接后继元素;
-
线性表的顺序存储结构,指的是用一段连续的存储单元依次存储线性表的数据元素,通常用一维数组实现;
优点:a. 由于逻辑关系和物流关系的一致性,所以无须为表示表中元素之间的逻辑关系而增加额外的存储空间;
b. 可以快速的读取任一位置的元素;
缺点:a. 插入和删除需要移动大量元素;
b. 当线性表长度很大时,很难确定存储空间的容量;
c. 容易形成空间碎片
-
线性表的链式存储结构,由于大概率采用非连续的存储单元存储数据元素,因此需要在保存元素数据的时候顺带保存下一个元素的地址,而元素和下一个元素的地址组成了结点,元素称为结点的数据域,下一个元素的地址称为结点的指针域;
-
结点中只有一个指针域的链表称为单链表;
-
链表中第一个结点的存储位置叫做头指针,注意头指针指向的是链表中第一个结点的位置,所以不管链表是否为空都是存在的;
-
单链表中最后一个结点的指针域为 空,通常用NULL 或者 ^ 表示;
-
通常为了使对第一个元素结点的插入和删除操作跟其他的结点相同,会人为在第一个结点前附设一个头结点,指针域存的是头指针,数据域可以为空,也可以保存链表的长度等信息(头结点并不是必须存在的);
-
将单链表中终端结点的指针域由空改为指向头结点,就使整个单链表形成一个环,这种头尾相连的单链表称为循环链表;
-
在单链表的每个结点中,再设置一个指向其前驱结点的指针域,这样就形成了双向链表,同理将双向链表中终端结点的指针域由空改为指向头结点就形成了双向循环列表