线性表中顺序表的初始化及各项操作
初始化
- 定义
顺序表特征是连续不断的,其中数组符合设计思想。因此struct
中数据可设计成两种,分别是data数组和当前数据长度(数量)。
初始化可通过使用typedef
减少代码复杂度,代码如下:
typedef struct {
ElemType data[50];
int len;
}List;
- 初始化
初始化前需要在main中声明,声明后可以通过main中调用函数实现初始化,调用的函数可如下设计:
void IniList(List &L){
L.data[0]=1;
L.data[1]=2;
L.data[2]=3;
L.len=3;
}
数据操作
- 添加数据
顺序表中添加数据是在data数组尾部增加,增加后len长度加1,添加前应先判断len长度是否到了data数组最大值。代码如下:
//MaxSize表示data数组的长度
void InList(List &L,int i){
if(L.len+1>MaxSize){
printf("Insert failed");
}
else{
L.data[L.len+1]=i;
L.len++;
printf("Insert succeed");
}
}
其中如果不判断len长度直接添加,若超过了数组长度会造成访问越界。
若在数组中间插入,则将插入位置及后面元素向后移动,再覆盖插入位置的元素以达到插入的效果。代码如下:
//其中pos是插入位置,i是插入的数
for(int k=L.len;k>pos-1;k--){
L.data[k]=L.data[k-1];
}
L.data[pos-1]=i;
L.len++;
- 删除数据
删除前需要判断删除位置是否存在,删除即用删除位置后的所有元素往前覆盖达到删除的效果。代码如下:
void DelList(List &L,int i){
if(i>L.len||i<0){
return false;
}else{
for(int k=i;k<L.len;k++){
L.data[k-1]=L.data[k];
}
L.len--;
return true;
}
}
- 查找数据
可通过遍历对比查找数据,例下:
void SeList(List L,int i){
for(int k=0;k<L.len-1;k++){
if(L.data[k]==i){
printf("The position is %d",k+1);
}
}
}
声明:本站原创文章文字版权归本站所有,转载务必注明作者和出处;本站转载文章仅仅代表原作者观点,不代表本站立场,图文版权归原作者所有。如有侵权,请联系我们删除。
评论