链表、顺序表选择题、简答题引申考点
1.顺序表与链表的比较(两种方式的优点、缺点)
特征 | 顺序表 | 链表 |
存取(对比优缺点) | 随机存储(自有优点) 顺序存储 | 顺序存取(only) |
逻辑结构和物理结构关系 | 逻辑相邻,物理存储位置也相邻 | 逻辑相邻但物理上不相邻, 通过指针链接 |
(基本操作) 查找、删除、插入 (对比优缺点) |
按序号:随机o(1)(优点)
平均移动半个表长(缺点 需要大量移动元素) |
按值/按序号:o(n)
只需要修改指针,快(优点)
|
空间分配 |
|
链式存储结构的存储密度小于1
|
随机存储、查找、存储密度、容易实现(顺序表的优点)
插入删除只修改指针,操作方便(链表优点)
2.静态链表
与顺序表一样需要分配较大空间,与链表相同插入和删除不需要移动元素需要修改指针。指针域与链表不同的是它指向下一个元素在数组中的下标。(用在不支持指针的高级语言)2.静态链表:
3.队列需要在表头删除元素,在表尾插入元素,选用带尾结点的循环单链表方便(从队列自身逻辑结构寻找适合他的存储结构)
4.单链表中头结点的作用(重点简答题及编程题)
-
使链表第一个位置上的操作和其他位置上的操作一致,无需特殊处理。开始结点的位置被放在头结点的指针域中。
-
空表和非空表的处理得到统一。无论链表是否为空,头指针都是指向头结点的非空指针。
方便预算的实现
5.什么情况下适用的不同链表总结:
-
不带头结点且有尾指针的单循环链表: 在最后一个元素之后插入一个元素和删除第一个元素。(在最后一个元素后插入,肯定要有一个指向尾结点的指针;删除第一个元素也需要指向尾结点的指针)
-
带头结点的双向循环链表:在末尾插入节点和删除节点(删除末尾结点需要找到前驱节点,设其指针域为NULL,需要时间0[n],不能用带尾指针的单向链表)
6.线性表可以为空
-
带头结点的双循环链表判空(快访问前相邻结点)
L->prior=L&&L->next=L;
-
头指针为head的带头结点的单链表判空
head->next==NULL;
-
头指针为head的不带头结点的单链表判空
head==NULL;