C语言如何实现顺序表的插入删除
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,本文小编为大家详细介绍"C语言如何实现顺序表的插入删除",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现顺序表的插入删除"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
千家信息网最后更新 2025年01月16日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安全错误
数据库的锁怎样保障安全
苏州dell服务器行情
昌平区网络技术服务收费
excel结合数据库开发系统
计算机网络技术学的什么
锐思数据库的持有期收益率怎么查
日志管理数据库设计
中国铁塔软件开发工资
服务器地址设置不支持
大学生网络安全能力大赛答案
北京靠谱的软件开发团队
一定还网络技术服务
数据库的数据模型包括哪三个要素
我的世界最危险的服务器怎么生存
软件开发公司里面有哪些部门
超越互联网络科技
隐私号网络安全法
软件开发基础知识的书
青少年网络安全大使
太原东杰软件开发有限公司电话
智慧建筑软件开发公司
up 数据库
insert 重复数据库
网络技术层面
软件开发预算监控
终止数据库spool
天跃互娱网络技术有限公司
服务器启停方式
概率论在软件开发中的应用
sql 删除主从表数据库
深圳访客管理软件开发服务