顺序表的定义
给各个数据元素分配连续的内存空间,大小为MaxSize*sizeof(ElemType)
#define MaxSize 10 //定义一个最大长度
typedef struct{
ElemType data[MaxSize]; //用'数组'存放数据
int length; //顺序表当前的长度
}SqList; //取别名
sq:sequence 顺序,序列的意思;
一、顺序表的初始化
void InitList(SqList &L){
for(int i=0;i<MaxSize;i++){
L.data[i] = 0;//把所有数据元素都初始化
}
L.length = 0; //顺序表初始长度为0
}
将每个数据元素都置为0;
二、顺序表的插入
bool ListInsert(SqList &L,int i,int e){
if(i<1||i>L.length+1)
return false;
if(L.length>=MaxSize)
return true;
for(int j=L.length;j>=i;j--){
L.data[j] = L.data[j-1];
}
L.data[i-1]=e;
L.length++;
return true;
}
代码详解:在L的位序i处插入元素e
先判断其有没有前驱节点和后继节点,如果没有后继那么他就是最后一位,直接插入即可,如果他没有前驱节点,那么他就是第一个,我们就要把后面的所有的数据元素都要往后移一位
如果他都有,他么就找到第i位,将其后面的移一位,然后做插入即可;
#顺序表的删除
bool ListDelete(SqList &L,int i,int &e){
if(i<1 || i>L.length)
return false;
e = L.data[i-1];
for(int j=i;j<L.length;j++)
L.data[j-1] = L.data[j];
L.lengt--;
return true;
}
与上面插入一样,删除第i个的话,就要将其后面的网上移一位
三、顺序表的查找
1.按位查找
#define InitSize 10 //定义一个最大长度
typedef struct {
ElemType *data; //用'数组'存放数据
int length;
}SqList;
ElemType GetElem(SeqList L,int i){
return L.data[i-1];
}
和访问普通数组是一样的道理
2.按值查找
int LocateElem(SqList L,ElemType e){
for(int i=0;i<L.length;i++){
if(L.data[i] == e)
return i+1;
return 0;
}
}
数组下标为i的元素值等于e,返回其位序i+1