一、什么是线性表?
定义:具有相同特性的数据元素的有限序列
-
线性表的特点:
- a1起始结点,an终端结点
- ai-1是ai的直接前趋,ai+1是ai的直接后继
- n表示线性表的长度,当n=0时为空表
- 数据元素间是线性关系
- 根据存储方式不同分为顺序表和链表
二、顺序表
- 顺序表是以顺序存储结构存储,即以一维数组的形式存储
- 1.顺序表的实现
定义一个顺序表
#define elemtype int
#define ok 1
#define error 0
#define maxsize 100
typedef struct{
elemtype data[maxsize];
int length; //顺序表当前的长度
}sqlist;
1)顺序表的初始化
void initlist(sqlist&L){ //初始化操作,建立一个空的顺序表L
L.length=0;
}
2)顺序表的清空
直接将长度赋值为0
elemtype clearlist(sqlist&L){ //清空顺序表
L.length=0;
return ok;
}
3)顺序表的元素个数
elemtype islist(sqlist &L){ //顺序表的长度
return L.length;
}
4)顺序表的元素查找
elemtype locatelist(sqlist&L,elemtype e){
for(int i=0;i<L.length;i++){
if(L.data[i]==e) return i+1;
retrurn error;
}
}
5)顺序表的取值
elemtype getlist(sqlist& L, int i, elemtype e) { //将顺序表中第i个位置元素返回给e
e = L.data[i - 1];
return ok;
}
6)顺序表的插入元素
elemtype insert(sqlist& L, int i,elemtype e) { //在顺序表第i个位置插入元素e(元素后移)
if (i<1 || i>L.length) return error; //判断位置是否合法
if (L.length == maxsize) return error;
for (int j = L.length-1;j >= i - 1;j--) {
L.data[j] = L.data[j - 1];
}
L.data[i - 1] = e;
L.length++;
return ok;
}
7)顺序表的删除元素
elemtype del(sqlist& L, int i) { //删除顺序表第i位置上的元素e(元素前移)
if (i<1 || i>L.length) return error;
for (int j = i-1;j < L.length-1;j++) {
L.data[j] = L.data[j + 1];
}
L.length--;
return ok;
}