ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-07-24 23:31:23  阅读:110  来源: 互联网

标签:02 顺序 删除 -- int length 实操 printf data


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

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有