1.线性表定义
线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n为0时,该线性表是一个空表。除第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外,每个元素有且仅有一个直接后继。
线性表的特点:
1.表中元素的个数有限
2.表中元素具有逻辑上的顺序性,在序列中各元素排序有其先后次序
3.表中元素都是数据元素,每一个元素都是单个元素
4.表中元素的数据类型都相同,这意味着每一个元素都占有相同大小的存储空间
5.表中元素具有抽象性,即仅讨论元素间的逻辑关系,不考虑元素究竟表示什么内容
知识框架:
2.顺序表
线性表的顺序存储成为顺序表,它是用一组地址连续的存储单元,依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。
顺序表的特点:
1.可以随机访问,即通过首地址和元素符号可以在O(1)的时间内找到指定的元素。
2.表中元素的逻辑顺序与其物理顺序相同。
3.存储密度高,每个结点只存储数据元素。
注意:线性表中元素的位序是从1开始,而数组中元素的下标 是从0开始。
线性表的顺序存储类型描述为:
#define MaxSize 50 //定义线性表的最大长度
typedef struct{
int data[MaxSize]; //线性表的元素
int length; //线性表的当前长度
}SqList; //线性表的类型定义
顺序表的基本操作如下:
(1)插入操作
在顺序表L的第i(1<=i<=L.length+1)个位置插入新元素e。如果i的输入不合法,则返回false,表示插入失败;否则将顺序表的第i个元素及其后的所有元素右移一个位置,腾出一个空位置插入新元素e,顺序表长度加1,插入成功,返回true。
bool ListInsert(SqList &L, int i, int e ){
if(i<1 || i>L.length +1) return false; //判断i的范围是否有效
if(L.length >= MaxSize) return false; //当前存储空间已满,不能插入
for(int j = L.length ; j>=i; j--){
L.data[j] = L.data[j-1]; //将第i个元素及之后的元素后移
}
L.data[i-1] = e; //在位置i处加入e
L.length ++; //线性表长度加1
retur true;
}
(2)删