1. 顺序存储方式:
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
顺序存储结构封装三个属性:
(1) 存储空间的起始位置。
(2) 线性表的最大存储容量。
(3) 线性表的当前长度。
注意:数组的长度与线性表的当前长度不一样;数组的长度是存放线性表的存储空间的总长度,一般初始化后不变;而线性表的当前长度是线性表中元素的个数,是会变化的。
2. 插入操作 :
(1)如果插入位置不合理,抛出异常;
(2)如果线性表长度大于等于数组长度,则抛出异常或动态增加数组容量;
(3)从最后一个元素开始向前遍历到第i个位置,分别将他们都向后移动一个位置;
(4)将要插入的元素填入位置i处;
(5)线性表长度+1。
3. 删除操作 :
(1)如果删除位置不合理,抛出异常;
(2)取出删除元素;
(3)从删除元素位置开始遍历到最后一个元素位置,分别将它们都向前移动一个位置;
(4)表长-1。
4. 线性表顺序存储结构的优缺点:
优点:无须为表示表中元素之间的逻辑关系而额外增加的存储空间;可以快速的存取表中任意位置的元素。
缺点:插入和删除操作需要移动大量元素;当线性表长度变化较大时,难以确定存储空间的容量;容易造成存储空间的“碎片”。
5. 链式存储结构
把存储数据元素的域称为数据域;把存储直接后继位置的域称为指针域;指针域中存储的信息称为指针或链。这两部分信息组成数据元素称为存储映象,称为结点(Node)。
n个结点链接成一个链表,即为线性表(a1,a2…,an)的链式存储结构。因为此链表的每个结点中只包含一个指针域,所以叫做单链表。
我们把链表中第一个结点的存储位置叫做头指针,最后一个结点指针为空(NULL)。
6. 数据长度与线性表长度区别
数组长度是存放线性表的存储空间的长度,存储分配后这个量一般是不变的。线性表的长度是线性表中数据元素的个数,随着线性表插入和删除操作的进入。在任意时刻,线性表的长度应该小于等于数组长度。
7. 地址计算
用数组存储顺序表意味着要分配固定长度的数组空间,由于线性表中可以进行插入和删除操作,因此分配的数组空间要大于等于当前线性表的长度。
存储器中的每个存储单元都有自己的编号,这个编号称为地址。
8. 循环链表
循环链表是单链表的变形。循环链表最后一个结点的 link 指针不 为NULL,而是指向了表的前端。为简化操作,在循环链表中往往加入表头结点。
循环链表的特点是:只要知道表中某一结点的地址,就可搜寻到所有其他结点的地址。
9. 存储分配的方式
顺序表的存储空间是静态分配的;链表的存储空间是动态分配的。
存储密度 = 结点数据本身所占的存储量/结点结构所占的存储总量。顺序表的存储密度 = 1;链表的存储密度 < 1
10. 后插法建立单链表
每次将新结点加在链表的表尾;设置一个尾指针 r,总是指向表中最后一个结点,新结点插在它的后面;尾指针 r 初始时置为指向表头结点地址