2.2 线性表的顺序表示
-
顺序表基本操作:
-
插入操作:最坏情况O(n),最好情况O(1),平均情况O(n)
-
删除操作:最坏情况O(n),最好情况O(1),平均情况O(n)
-
按值查找:最坏情况O(n),最好情况O(1),平均情况O(n)
-
2.3 线性表的链式表示
-
头结点:在单链表第一个结点之前附加一个结点,称头结点。头结点的数据域可以不设任何信息,也可以记录表长等相关信息。
-
引入头结点优点:
-
链表第一个位置操作和其他位置一致,无须进行特殊处理
-
无论链表是否为空,头指针都指向头结点的非空指针,空表和非空表处理统一
-
-
-
单链表操作:
-
头插法建立:插入时间O(1),设链表长度n,总时间复杂度O(n)
-
尾插法建立:同头插
-
按序号查找结点值:时间复杂度O(n)
-
按值查找表结点:时间复杂度O(n)
-
插入结点操作:查找复杂度O(n),插入复杂度O(1)
-
删除节点操作:查找复杂度O(n),删除复杂度O(1)
-
求表长操作:复杂度O(n)
-
-
双链表:指向前驱节点和后继结点
-
循环链表:最后一个结点的指针指向头结点
-
循环双链表:头结点的前驱指针指向尾结点
-
静态链表:借助数组描述链式结构,指针域存放结点的数组下标,静态链表也要预先分配一块连续的内存空间
-
顺序表和链表的比较:
-
存取方式:顺序表可以顺序和随机存取,链表只能从表头存取
-
逻辑结构和物理结构:顺序表逻辑相邻,物理位置也相邻;链表逻辑相邻,物理位置不一定相邻
-
查找、插入和删除元素:
-
对按值查找:顺序表无序时,两者都O(n),顺序表有序时,折半查找O(log2n)
-
按序号查找:顺序表O(1),链表O(n)。顺序表插入删除平均要移动半个表长元素,链表插入三删除只修改相关结点的指针域即可。链表存储密度小,因为有指针存储。
-
-
空间分配:顺序表需要预先分配足够大的存储空间;链式存储的结点空间在需要时分配,操作灵活
-
-
顺序存储同样适用图和树的存储