数据结构1:线性表的顺序存储的定义以及基本操作
一 线性表的定义
主要知识框架
线性表(List):是由零个或多个相同数据类型的数据元素组成的有限数列
一般表示形式:L = (a1,a2,... ,ai,... ,an)
首先它是一个序列。元素之间是存在顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他元素,其他元素都有且只有一个前驱和后继。如果将线性表记为L = (a1,a2,... ,ai,... ,an)ai+1是ai的后继元素,ai-1是ai的前驱元素,a1有且只有一个直接后继,an有且只有一个前驱。
二 线性表顺序存储的定义
顺序表:一组连续的内存单元依次存储线性表的各个元素,逻辑上相邻的元素,实际物理空间也是连续的。
从底层上看,顺序表通常借助数组来实现顺序存储结构,因为数组的连续内存为顺序存储提供了帮助。
线性表的顺序存储的结构代码如下
#define MAXSIZE 20/*数组长度*/
typeof struct{int data[MAXSIZE];/*数组,存储数据元素*/int length; /*线性表当前的长度*/
}SqList;
由此知,顺序表结构的两个核心要素:
数据元素本身:数组存储线性表的具体数据。
表长信息:length记录前线性表中元素的实际个数,用于区分数组中已使用的空间和未使用的空间。
三 顺序存储结构的创建操作
void initList(SqlList *L){//由于数组大小在结构体中已经确定,只需初始化顺序表长度为0即可L -> length = 0;
}
四 顺序存储结构的添加元素操作
插入操作的具体实现思路
1 判断插入位置是否合法
2 判断插入后长度是否足够
3 遍历最后一个元素开始到插入元素的位置,依次向后移动一个位置
4 将要插入的元素填入
5 顺序表长度+1
int insert(SqlList *L , int pos , int e){if(i < 1 || i > L -> length + 1){//插入元素的位置不合法return 0;}if(L -> length == MAXSIZE){//顺序表空间已满return 0;}if(pos <= L -> length){//插入元素不在表尾for(int i = L -> length - 1 ; i >= pos - 1 ; i--){//遍历操作L -> data[i+1] = L -> data[i];}L -> data[pos-1] = e;L -> length++;}return 1;
}
四 顺序存储结构的删除操作
删除操作的具体实现操作思路:
1 判断删除位置是否合法
2 取出删除的元素
3 从删除元素的位置开始遍历到最后一个元素的位置,分别将其向前移动一个位置
4 表长-1
int delete(SqlList *L , int pos , int *e){if(L -> length == 0){return 0;}if(i < 1 || i > L -> length){//删除的位置不合法return 0;}*e = L -> data[pos-1];if(pos < L -> length){for(int i = pos ; i <= L -> length - 1 ; i++){//将删除位置后继元素删除L -> data[i-1] = L -> data[i]; }}L -> length--;return 1;
}