C语言如何实现顺序表的插入删除
发表于:2024-10-08 作者:千家信息网编辑
千家信息网最后更新 2024年10月08日,本文小编为大家详细介绍"C语言如何实现顺序表的插入删除",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现顺序表的插入删除"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
千家信息网最后更新 2024年10月08日C语言如何实现顺序表的插入删除
本文小编为大家详细介绍"C语言如何实现顺序表的插入删除",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现顺序表的插入删除"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
首先声明一个顺序表的结构 (数组的第一个元素是0,但是顺序表的第一个一般 从1(人为设定)开始)
#include#include #define MAXSIZE 10#define OK 1#define FALSE 0 typedef int Elemtype;typedef bool Status; typedef struct list{ Elemtype *elem; int len; //数据个数 int listsize; //顺序表长度}List;
listsize
代表这个顺序表的最大容量,可以随时扩容len
代表在你创建的这个顺序表中有几个有效的数据,总是小于等于listsize
一、初始化顺序表属性
void list_init(List *L){ L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//开辟空间 if(L->elem==NULL)//判断空间是否开辟成功 { printf("malloc fail\n"); exit(0); } L->len=0; //初始化数据有效数据为0 L->listsize=MAXSIZE; //初始化数组长度为MAXSIZE}
二、顺序表的插入
Status list_insert(List *L,int i,Elemtype data){ Elemtype *base,*insert,*p; if(i<1 || i>L->len+1 || L==NULL) { printf("位置输入错误\n"); return FALSE; } if(L->len > L->listsize) { base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype));//动态扩容 L->elem=base; L->listsize+=MAXSIZE;//更新顺序表大小 } insert=&(L->elem[i-1]);//目标指针指向要插入的目标地址 //指向最后一个元素的地址 for(p=L->elem + L->len-1;p>=insert;p--) { *(p+1)=*p; } *insert=data; L->len++; return OK;}
三、删除
Status delete_list(List *L,int i){ ElemType *q,*delete_i; if(L==NULL||i<0||i>L->len) return FALSE; delete_i=&(L->elem[i-1]);//用指针指向要删除位置的地址 q=L->elem + L->len-1; //q指针指向顺序表最后一个位置的地址 首地址加上数组长度就是最后一个元素地址 for(delete_i=delete_i+1;delete_i<=q;++delete_i)//从删除位置的地址的下一个元素开始,每个往前移动一位 { *(delete_i-1)=*delete_i; //前一个位置等于后一个 } L->len--; return OK;}
全部程序
#include#include #define MAXSIZE 10#define OK 1#define FALSE 0 typedef int Elemtype;typedef bool Status; typedef struct list{ Elemtype *elem; int len; int listsize;}List; void list_init(List *L){ L->elem=(Elemtype *)malloc(MAXSIZE*sizeof(Elemtype));//开辟空间 if(L->elem==NULL)//判断空间是否开辟成功 { printf("malloc fail\n"); exit(0); } L->len=0; //初始化数据有效数据为0 L->listsize=MAXSIZE; //初始化数组长度为MAXSIZE} Status list_insert(List *L,int i,Elemtype data){ Elemtype *base,*insert,*p; if(i<1 || i>L->len+1 || L==NULL) { printf("位置输入错误\n"); return FALSE; } if(L->len > L->listsize) { base=(Elemtype *)realloc(L->elem,(L->listsize+MAXSIZE)*sizeof(Elemtype)); L->elem=base; L->listsize+=MAXSIZE; } insert=&(L->elem[i-1]);//目标指针指向要插入的目标地址 //指向最后一个元素的地址 for(p=L->elem + L->len-1;p>=insert;p--) { *(p+1)=*p; } *insert=data; L->len++; return OK;} Status list_delete(List *L,int i){ Elemtype *aim,*p; if(i<0 || i>L->len) { printf("位置输入错误\n"); return FALSE; } aim=&(L->elem[i-1]);//目标指针指向要删除的目标地址 p=(L->elem+L->len-1); //指向最后一个元素的地址 for(aim=aim+1;aim<=p;++aim) //目标地址滑动删除 { *(aim-1)=*aim; } L->len--; return OK;}void show_list(List *L){ int i; for(i=0;i len;i++) { printf("elem[%d]=%d\n",i+1,L->elem[i]); } printf("\n");}int main(){ int i; List L; list_init(&L); for(i=0;i<10;i++) { list_insert(&L,i+1,i+1); } printf("插入前的顺序表\n"); show_list(&L); printf("插入后的顺序表 在5位置插入99\n"); list_insert(&L,5,99); show_list(&L); printf("删除后的顺序表 把5位置删除\n"); list_delete(&L,5); show_list(&L); return 0;}
运行结果如下
读到这里,这篇"C语言如何实现顺序表的插入删除"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
顺序
地址
指向
位置
数据
目标
元素
指针
数组
空间
长度
语言
有效
文章
错误
输入
成功
代表
内容
妥当
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
DIB数据库更新时间
网络安全技术什么是木马
php连上数据库
网络安全培训学校名称
vs2015 数据库
打ctf网络安全大赛有何意义
疫情期间网络安全环节
为什么光遇会显示服务器繁忙
商务软件开发 政府补贴
ads 应用数据库
手机赌钱软件开发
手机升级后显示无法连接服务器
数据库技术及应用添加数据
怎么查服务器主频
网吧服务器可以放地下室吗
宣城服务器机箱机柜企业
数据库优化优缺点
网络安全密钥怎么获得
奉贤区项目数据库服务成本
第七章-网络安全设计
华为云最大服务器
服务器安全狗类似软件
数据库括号里恢复挂起
教务系统数据库需求分析
福建中职计算机网络技术题库
数据库假如有黑客入侵
互联网网络安全工程收费
如何寻找软件开发设计
方舟生存进化怎么找不到服务器啊
计算机网络技术基础周下载