一、相关知识点
1.单链表:
(1)头插法建立
读入数据的顺序与生成的链表中的元素顺序相反。
每个点插入O(1),n个点总复杂度O(n)
s->data=x;
s->next=head->next;
head->next=s;
(2)尾插法建立
顺序相同
总复杂度O(n)
s->data=x;
r->next=s;
r=s;
(3)按序号查找节点值/按值查找节点
复杂度O(n)
(4)插入
查找复杂度O(n),插入复杂度O(1)
p=list.GetElem(i-1);
s-next=p->next;
p->next=s;
扩展:将前插(s插到p之前)转化为后插(交换数据域)
s->next=p->next;
p->next=s;
temp=p->data; //交换数据域
p->data=s->data;
s->data=temp;
(5)删除
O(n)
p=list.GetElem(i-1);
q=p->next;
p->next=q->next;
delete q;
2.双链表
(1)插入
s->next=p->next;
p->next->prior=s;
s->prior=p;
p->next=s;
(2)删除
p->next=q->next;
q->next->prior=p;
delete q;
3.循环链表
(1)循环单链表
尾指针r,r->next头指针
(2)循环双链表
循环双链表为空表时,其头节点的prior和next都等于head
4.静态链表
指针指的是数组下标(游标)
next==-1结束
二、题目
1.链式存储结构比顺序存储结构能更方便的表示各种逻辑结构
2.给定n个元素的一维数组,建立一个有序单链表的最低时间复杂度为?
答案:
O
(
n
log
2
n
)
O(n\log_2n)
O(nlog2n)
先对数组排序,再建表(O(n))
3.一个链表最常用的操作是在末尾插入和删除,则选用带头结点的双循环链表最节省时间