其他分享
首页 > 其他分享> > 数据结构代码实操02--顺序表的插入与删除

数据结构代码实操02--顺序表的插入与删除

作者:互联网

通过实操确实是可以让自己对于顺序表这个概念的认知更加透彻,我也总结了一些自己的不足以及要注意的细节:

1、在定义InitSize后,有时在定义函数时会又命名一个InitSize,导致代码无法运行。

2、插入与删除这两个基本操作的逻辑就是正好相反的,

插入是:要将数据元素后移,从最后一位开始往后移

删除:是要将数据元素向前移,从删除位置的后一位开始往前移

3、一些小细节方面,比如:括号忘记打、函数名字打错...

4、设计的代码时的思维一定要严谨,让自己的代码具有健壮性,让别人用起来舒服,能处理异常情况,并给人反馈。

希望以下代码对于大家都有所帮助!

#include<stdio.h>
#include<stdlib.h>
#define InitSize 10 //命名时注意不要命名重复了
typedef struct{
int *data;
int length;
int MaxSize;
}SeqList;

void InitList(SeqList &L){
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=10;
L.MaxSize=InitSize;
}

//顺序表的插入
bool InsertList(SeqList &L,int i,int a){//i本身的含义是第几个,而顺序表的里存的数都是从L.data[0]开始的,故i总是大于1
if(i<1||i>L.length+1){ //判断i是否合法
return false;
}
if(L.length>L.MaxSize) //判断顺序表的内存是否满了
return false;
//所有一切判断无误后开始插入数据
for(int j=L.length;j>=i;j--){

L.data[j]=L.data[j-1]; //所有第i个之后的数据向后移动,从最后面的开始往后移
}
L.data[i-1]=a; //在选定的位置将数据赋值
L.length++; //因为增加了一个数据,故其线性表的长度也应加1
printf("插入的值为:%d\n",a);
printf("插入后的顺序表为:\n");
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
return true; //返回true,表示插入成功
}

//顺序表的删除
bool DeleteList(SeqList &L,int i,int &n){//通过引入符号防止删除的数据并不是顺序表里的数值
//在删除开始前,先检查一下i值是否合法。严谨点
if(i<1||i>L.length)
return false;
//所有一切判断无误后开始删除数据
n=L.data[i-1]; //存储被删除的数据
for(int j=i;j<L.length;j++){
L.data[j-1]=L.data[j]; //与插入正好相反,所有第i个之后的数据向前移,从第i个位置的下一位开始往前移
}
L.length--; //删除了一个数据,顺序表的长度减一
printf("\n");
printf("删除的值为:%d\n",n);
printf("删除后的顺序表为:\n");
for(int i=0;i<L.length;i++)
printf("%d ",L.data[i]);
return true; //返回true,表示删除成功

}

int main(){

SeqList L;
InitList(L);
int e=20;
for(int i=0;i<L.length;i++){
scanf("%d",&L.data[i]);
}
InsertList(L,5,20);
DeleteList(L,5,e);
return 0;
}

标签:02,顺序,删除,--,int,length,实操,printf,data
来源: https://www.cnblogs.com/heshuo/p/16515846.html