C语言如何实现顺序表的插入删除
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本文小编为大家详细介绍"C语言如何实现顺序表的插入删除",内容详细,步骤清晰,细节处理妥当,希望这篇"C语言如何实现顺序表的插入删除"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知
千家信息网最后更新 2025年11月07日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安全错误
数据库的锁怎样保障安全
土豆服务器干什么的
软件开发培训学校眼
软件开发业务闭环
msde sql 数据库
软件开发中属于设计阶段的是
互联网科技前沿论文
加强网络安全监测预警
下周开始网络安全整改
软件开发招标文件技术部分
ftp代理服务器软件
郑州思创网络技术有限公司
栅格数据怎样转为矢量数据库
小米门铃无法连接服务器
数据库编写用什么技术
如何防止数据库暴力
用友t1数据库文件夹
r语言 gtex数据库
派币做节点需要服务器么
科达视频管理服务器
华为v3服务器怎么装win10
软件开发中级职称有什么
服务器网络使用率
上海玄清软件开发
美国提出5g网络安全问题
tps软件开发
威海微信小程序软件开发推荐
centos搭建数据库
建行的软件开发岗位是几级
图数据库的物理模型
数据库常用的工具有哪些