线性表
有n(n>=0)个相同类型的数据元素组成的有限序列,它是最基本、最常用的一种线性结构。顾名思义,线性表就像一条线,不会分叉。线性表有唯一的开始和结束,除了第一个元素外,每个元素都有唯一的直接的前驱,除了最后一个元素外,每个元素都有唯一的直接后继。
前驱和后继
顺序表
顺序表是顺序存储方式,即逻辑上相邻的数据在计算机内的存储位置也是相邻的。顺序存储方式,元素存储是连续的,中间不允许有空,可以快速定位第几个元素,所以插入、删除时需要移动大量元素(缺点)。
链表
链表是线性表的链式存储方式,逻辑上相邻的数据在计算机内存储位置不一定相邻,那么怎么表示逻辑上的相邻关系呢?
单链表
单链表基本操作
下面以带头节点的单链表为例,讲解单链表的基本操作:
- 初始化
Linklist L;
L = new Lnode;
L-> next = NULL;
if(!L)
return 0;
- 创建
头插法
S = new Lnode;
S-> data = 2;
尾插法
r-> next = s;
r = s;
注:
先修改没有标记的指针,再修改有标记的指针;如果两端均有标记,先后修改谁均可。
头插法是逆序建表,尾插法是正序建表。
- 取值
- 查找
注:
链表的头指针不可以随意修改!
p = L-> next;
p = p-> next;
- 插入
注:
单链表只可以向后操作,不可以向前操作;所以先找第i-1节点,先修改没有标记的指针。
- 删除
p->next=q->next;
delete q;
注:
p指针指向需要先找到删除节点的前一个
双向链表
双向链表有三个域:prior域、data域、next域
- 修改
p->prior->next = s;
s->prior = p->prior;
s->next = p;
p->prior = s;
- 删除
p->next->prior = p->prior;
delete p;