注:以下只记录了静态顺序表的内容!写此博客其目的为记录学习的内容。本人仅为一名计算机小白,如有需改善之处,请大佬指正。
一、什么是顺序表
顺序表,顾名思义就是有许多数据元素按照顺序存储结构在存储在线性表中!其实就是这样:(表中含有i个小表情)
... | ... | i |
对应的下标: 0 1 2 3 4 ... ... i-1
即该顺序表的长度为i,也就是说顺序表的第i个元素对应的数组下标为i-1,因为顺序表通常使用一维数组来实现,以至于顺序表在他出生的那一刻就已经确定了他的长度,即顺序表的长度确定!
二、如何实现顺序表
1.顺序表的结构定义:
#define M 520 //定义一个最多存储520个元素的顺序表
typedef int DataList; //定义int型线性表
typedef struct{ //创建结构体
DataList data[M]; //用于存放数据元素的一维数组
int length; //表长
}SeqList;
2.初始化
void InitList(SeqList *L){
L->length = 0; //将表长初始化为0
}
3.查找
(1)按值查找
int Getnum(SeqList *L,Data num){
for(int i=0;i<L->length;i++){
if(L->data[i] == num)
return i+1; //返回值所在的位置序号
}
return 0;
}
(2)按位查找
int Getlocate(SeqList *L,int i,Data *num){
if(i<1||i>L->length){ //判断非法查找位置
return 0;
}else{
*num = L->data[i-1];
return 1;
}
}
4.插入操作
从最后一个元素开始一直到待插位置i,逐个往后移。
L->data[j] = L->data[j-1];
使第i个位置为空,将元素num填入其中即可。
完整算法实现
//i为插入位置,num为待插元素
int insert(SeqList *L,int i,Data num){
if(L->length >= M||i<1||i>L->length+1){
return 0;
}
int j;
for(j = L->length;j>=i;j--){
L->data[j] = L->data[j-1];
L->data[i-1] = num;
L->length++;
}
return 1;
}