线性表
由同类数据元素构成有序序列的线性结构
- 表中元素个数称之为线性表的长度
- 线性表没有元素时称为空表
- 表起始位置称表头 ,表结束位置称表尾
类型名称 :线性表(List)
数据对象集 :线性表是n(>=0)个元素构成的有序序列
操作集 :
- List MakeEmpty() 初始化一个空表
- ElementType FindKth() 根据位序K,返回相应元素
- int Find(ElementType X, List Ptrl) 在线性表L中查找X的第一次出现位置
- void Insert(ElementType X,int i,List Ptrl) 在位序i前插入一个新元素
- void Delete(int i,List L) 删除指定位序i的元素
- int Length(List L) 返回线性表L的长度
- ......
线性表的顺序存储实现
用数组的连续储存空间顺序存放线性表的个元素
代码
1 | typedef struct LNode *List; //用*List指针代替LNode |
访问下标为 i 的元素,L.Data[i] 或 PtrL->Data[i]
线性表的长度:L.Last + 1 或 PtrL->Last + 1
List MakeEmpty()
初始化一个空表
代码
1 | List MakeEmpty(){ //初始化一个空表 |
Last = -1: 因为表长为Last + 1,所以Last = -1 表示空表。
ElementType FindKth()
根据位序K,返回相应元素
代码
1 | void ElementType_FindKth(int i){ //根据位序K,返回相应元素 |
int Find(ElementType X, List Ptrl)
在线性表L中查找X的第一次出现位置
代码
1 | int Find(ElementType X, List Ptrl){ //在线性表L中查找X的第一次出现位置 |
void Insert(ElementType X,int i,List Ptrl)
在位序i前插入一个新元素
代码
1 | void Insert(ElementType X,int i,List Ptrl){ //在位序i前插入一个新元素(先移动,再插入) |
void Delete(int i,List L)
删除指定位序 i 的元素
代码
1 | void Delete(int i,List L){ //删除指定位序i的元素 |
int Length(List L)
返回线性表L的长度
代码
1 | int Length(List L){ //返回线性表L的长度 |
线性表的链式储存实现
代码
1 | typedef struct LNode *List; |
用链表实现:
Data 用来储存结点的数据
Next 用来放下一节点的指针
int Length(List PtrL)
求表长
代码
1 | int Length(List PtrL){ // 求表长 |
List FindKth(int K, List PtrL)
按序号查找
代码
1 | List FindKth(int K, List PtrL) { //按序号查找 |
while循环条件:
指针不为空,且查找的序号小于要查找的序号
List Find(ElementType X,List PtrL)
按值查找
代码
1 | List Find(ElementType X,List PtrL){ // 按值查找 |
List Insert(ElementType X,int i,List PtrL)
插入结点
代码
1 | List Insert(ElementType X,int i,List PtrL){ // 插入结点 |
List Delete(int i,List PtrL)
删除结点
代码
1 | List Delete(int i,List PtrL){ // 删除结点 |
1 | p->Next = s->Next |
s->Next 为n+1结点的指针
p->Next 为n-1结点的指针
直接将n-1点的指针指向n+1点,也就是删除掉了n结点