C语言如何建立链表并实现增删查改详解
前言
以下是本人完成的一个C语言建立链表并进行增删查改操作的程序,为方便学习,本人将整个程序分为头文件和主函数两部分:
1.头文件(函数部分)
(1)初始化函数
#include#include typedefstruct{ int*head; intlength; intcapacity; }Toslist;//Toslist类型 //初始化顺序表 ToslistinitSeqlist(){ Toslistlist; list.length=0; list.capacity=5; list.head=(int*)malloc(10*sizeof(int)); if(!list.head) { printf("初始化失败!\n"); exit(0); } returnlist; }
(2)打印函数
//打印顺序表
voiddisplayList(Toslistlist){
for(inti=0;i
(3)插入函数
//插入元素
Toslistadd(Toslistlist,intelem,intpos){
if(list.length==list.capacity){
int*temp=(int*)realloc(list.head,(list.capacity+1)*sizeof(int));//判断空间是否足够,不够就另建链表
//不直接用head而引入temp的作用:防止空间分配失败导致head失去原来的链表
if(!temp){
list.head=temp;
list.capacity+=1;
}
}
//插入位置及以后的元素后移
for(inti=list.length-1;i>=pos;i--){
list.head[i+1]=list.head[i];
}
list.head[pos]=elem;
list.length++;
returnlist;
if(pos>list.length||pos<0)
printf("插入位置错误!\n");
returnlist;
}
(4)删除函数
//删除元素
Toslistdelete(Toslistlist,intpos){
for(inti=pos;ilist.length){
printf("删除位置有误!\n");
returnlist;
}
}
(5)查找函数
//查
intsearch(Toslistlist,intelem){//elem是查找的元素
//顺序查找
for(inti=0;i
(6)替换函数
//改
Toslistmodify(Toslistlist,intelem,intval){//val是要替换它的元素
intpos=search(list,elem);//获取要替换元素的位置
list.head[pos]=val;
returnlist;
}
2.主函数
intmain(){
Toslistlist=initSeqlist();
intAddpos=-1,Addnum,Delpos,Serachnum,Modifynum;
printf("请输入5个整数元素\n");
for(inti=0;i<5;i++){
scanf("%d",&list.head[i]);
list.length++;
}
printf("顺序表中的元素有:\n");
displayList(list);
//插入元素
printf("要在哪个元素后插入元素?\n");
while(Addpos<0||Addpos>list.length){
scanf("%d",&Addpos);
if(Addpos<0||Addpos>list.length)
printf("请输入正确的位置!\n");
};
printf("请输入需要插入的元素:\n");scanf("%d",&Addnum);
printf("在顺序表的第%d个元素后插入元素%d得到\n",Addpos,Addnum);
list=add(list,Addnum,Addpos);
displayList(list);
//删除元素
printf("要删除顺序表下标顺序中哪个元素?\n");scanf("%d",&Delpos);
printf("删除后得到:\n");
list=delete(list,Delpos);
displayList(list);
//查找
printf("请输入需要查找的元素\n");scanf("%d",&Serachnum);
intpos=search(list,Serachnum);
if(pos)
printf("元素%d的位置为第%d个\n",Serachnum,pos+1);
if(!pos){
printf("表中无该元素\n");
}
//修改
printf("请输入需要修改的元素:\n");scanf("%d",&Serachnum);
printf("请输入要替换的数:\n");scanf("%d",&Modifynum);
printf("将%d修改为%d得到:\n",Serachnum,Modifynum);
list=modify(list,Serachnum,Modifynum);
displayList(list);
free(list.head);
list.head=NULL;
return0;
}
以上程序本人已调试完毕,若程序有繁杂之处,欢迎批评指正!
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。