c语言指针写增删改查程序,C语言如何建立链表并实现增删查改详解

前言

以下是本人完成的一个C语言建立链表并进行增删查改操作的程序,为方便学习,本人将整个程序分为头文件和主函数两部分:

1.头文件(函数部分)

(1)初始化函数

#include

#include

typedef struct {

int *head;

int length;

int capacity;

} Toslist; //Toslist类型

//初始化顺序表

Toslist initSeqlist() {

Toslist list;

list.length = 0;

list.capacity = 5;

list.head = (int *)malloc(10 * sizeof(int));

if (!list.head)

{

printf("初始化失败!\n");

exit(0);

}

return list;

}

(2)打印函数

//打印顺序表

void displayList(Toslist list) {

for (int i = 0; i < list.length; i++) {

printf("%d ", list.head[i]);

}

printf("\n");

}

(3)插入函数

//插入元素

Toslist add(Toslist list, int elem, int pos) {

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 (int i = list.length - 1; i >= pos; i--) {

list.head[i + 1] = list.head[i];

}

list.head[pos] = elem;

list.length ++;

return list;

if (pos > list.length || pos < 0)

printf("插入位置错误!\n");

return list;

}

(4)删除函数

//删除元素

Toslist delete(Toslist list, int pos) {

for (int i = pos; i < list.length - 1; i++) {

list.head[i] = list.head[i + 1];

}

list.length--;

return list;

if (pos < 0 || pos > list.length) {

printf("删除位置有误!\n");

return list;

}

}

(5)查找函数

//查

int search(Toslist list, int elem) { //elem是查找的元素

//顺序查找

for (int i = 0; i < list.length; i++) {

if (elem == list.head[i]) {

return i;

}

}

return 0;

}

(6)替换函数

//改

Toslist modify(Toslist list, int elem, int val) { //val是要替换它的元素

int pos = search(list, elem); //获取要替换元素的位置

list.head[pos] = val;

return list;

}

2.主函数

int main() {

Toslist list = initSeqlist();

int Addpos = -1, Addnum, Delpos, Serachnum,Modifynum;

printf("请输入5个整数元素\n");

for (int i = 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);

int pos = 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;

return 0;

}

以上程序本人已调试完毕,若程序有繁杂之处,欢迎批评指正!

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值