数据结构----线性表
王道考研数据结构线性表知识整理
1. 线性表特点:
(1)表中元素个数有限
(2)表中元素具有逻辑上的顺序性,各元素排序有先后次序
(3)表中元素都是数据元素,每个元素都是单个元素
(4)表中元素的数据类型相同,每个元素的存储空间相同
(5)表中元素具有抽象性
(6)线性表是一种逻辑结构,表示元素之间一对一的相邻关系
2.线性表的存储结构:
(1)顺序存储:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构
(2)链式存储:逻辑上相邻的数据元素在物理上不一定相邻,通过指针来实现
3.顺序表的基本操作
(1)插入操作
for(int j=L.length;j>=i;i++){
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
}
(2)删除操作
for(int j=i;j<L.length;j++){
L.data[j-1]=L.data[j];
L.lenght--;
}
4.线性表的链式存储
一个数据元素称为一个结点,包括两个域:存储数据元素信息的域称为数据域;存储直接后继存储位置的域称为指针域。指针域中存储的信息称作指针或链
(1)单链表
1.插入
s->next=p->next;
p->next=s;
2.删除
q = p->next; //首先保存b的指针,靠它才能找到c;
p->next=q->next; //将a、c两结点相连,淘汰b结点;
free(q) ; //彻底释放b结点空间
(2)双链表
1.插入
s->next = p->next ;
p->next->prior = s ;
s->prior = p ;
p->next = s ;
2.删除
p->next=q->next;
q->next->proir=p;
free(q);
5.循环链表
循环链表的操作和线性链表基本一致,差别仅在于算法中的循环条件不是p或p->next是否为空,而是它们是否等于头指针
6.顺序表和链表的区别
(1)存取方式
顺序表可以实现顺序存取和随机存取;单链表只能实现顺序存取。
(2)逻辑结构和物理结构
顺序表的逻辑结构相邻,物理结构也相邻;单链表的逻辑结构相邻,物理结构不一定相邻
(3)基本操作
1.插入&删除:顺序表为O(n)且需要大量移动元素;
单链表为O(1)(结点指针已知)、O(n)(结点指针未知),操作时要修改指针
2.查找:按值查找中单链表和顺序表(无序)为O(n);
按序查找中单链表为O(n),顺序表为O(1)
(4)内存空间
顺序存储:静态分配时预分配空间太大会浪费,太小会溢出;
动态分配时不会溢出但是需要大量移动元素,效率低
链式存储:在需要时分配节点空间即可,但指针要使用额外空间