2、数据结构之线性表的顺序表示
线性表,从字面上来看,就是像线一样把数据元素串联起来的表。
线性表的顺序存储,就是用一段地址连续的存储单元依次存储线性表的数据元素。就比如,考试时候,需要提前安排好教室,考生的座位呢都要按照考号去排列。
一、定义最大长度为50的线性表
#define maxsize 50 //定义表的初始长度
typedef struct{
ElemType data[maxsize]; //元素
int length; //当前长度
}SqList; //顺序表类型
二、插入:在第i(1<=i<=L.length+1)个位置插入新元素e;输入不合法返回false;插入成功返回true
bool in_list (SqList &L,int i,Elemtype e){
if (i<1||i>L.length+1){return false;} //判断i是否有效
if (L.length>=maxsize){return false;} //判断当前存储空间是否已满
for(int j=L.length,j>i-1,j--){ //依次将第i个元素以及之后的元素后移
L.data[j]=L.data[j-1];
}
L.data[i-1]=e; //在第i个元素位置插入e
L.length++; //线性表长度加一
return true; //返回true
}
三、删除:删除L中第i(1<=i<=L.length)个位置的元素,成功则返回true,并将被删除的元素用引用变量e返回,否则返回false
bool drop_list(SqList &L,int i,Elemtype &e){
if(i<1||i>L.length){return false;}
e=L.data[i-1];
for(int j=i-1,j<=L.length-1,j++){
L.data[j]=L.data[j+1];
}
L.length--;
return true;
}
四、查找:在L中查找第一个元素值等于e的元素,并返回其位序
int sele_list(Sqlist &L,Elemtype e){
for(int j=0,j<L.length,j++){
if(L.data[j]==e){
return j+1;}
}
return 0;
}
五、删除具有最小值的元素,并由函数返回被删除元素的值,空出的位置由最后一个元素补填
bool dele_min(Sqlist &L,ElemType &a){
if (L.length==0){return false;}
//查找最小
int i;
a=L.data[0]
for(int j=1,j<L.length,j++){
if(a>L.data[j]){
a=L.data[j];
i=j;
}
}
六、删除最小,用最后一个元素填补
if(i!=L.length-1){
L.data[i]=L.data[L.length-1];
}else{L.data[i]=L.data[L.length-1-1];}
return true;
}