单链表的创建、插入、删除
来源:互联网 发布:安卓拼图游戏源码 编辑:程序博客网 时间:2024/06/05 20:13
看网上资料,然后写的关于单链表的创建、插入、删除等方面的代码练练手,代码存在一些bug,仅供参考。
#include <stdio.h>#include <stdlib.h>//1.定义链表数据结构struct node { int num; struct node *next;};//函数声明struct node *creat(struct node *head);void print(struct node *head);struct node *del(struct node *head,int num);struct node *insert(struct node *head,int num,int count);int n = 0; //节点的个数int main(){ int num = 0,count = 0; struct node *head; head = NULL; //2.创建一个空表 //创建 printf("************************创建**********************\n"); head = creat(head); //创建单链表 print(head); //打印单链表 //删除 printf("************************删除**********************\n"); printf("输入要删除的数据:\n"); scanf("%d",&num); printf("num is %d\n",num); head = del(head,num); print(head); //插入 while(1) { printf("*************************插入*********************\n"); printf("请输入要插入的位置:1---%d:::::",n+1); scanf("%d",&count); printf("请输入要插入的数据:"); scanf("%d",&num); head = insert(head,num,count); print(head); } return 0;}//链表的创建struct node *creat(struct node *head){ struct node *p1,*p2; //3.利用malloc函数向系统申请节点 p1 = p2 = (struct node *)malloc(sizeof(struct node)); //申请节点 printf("输入大于0的值,小于等于0则结束,值的存放地址为:p1_addr = %d\n",p1); scanf("%d",&p1->num); p1->next = NULL; while(p1->num > 0) { if(head == NULL) head = p1; else p2->next = p1; p2 = p1; p1 = (struct node *)malloc(sizeof(struct node)); p1->next = NULL;//置空 n++; printf("输入大于0的值,小于等于0则结束,值的存放地址为:p%d_addr = %d\n",n,p1); scanf("%d",&p1->num); } free(p1); p1 = NULL; p2->next = NULL; printf("输入结束\n"); return head;}//链表的遍历打印void print(struct node *head){ struct node *tmp; tmp = head; printf("链表打印开始!!!\n"); printf("节点个数为:%d\n",n); while(tmp != NULL) { printf("输入的值为:num = %d,地址为:addr = %d\n",tmp->num,tmp); tmp = tmp->next; } printf("链表打印结束!!!\n");}//链表的删除struct node *del(struct node *head,int num){ struct node *p1,*p2; if(head == NULL) { printf("链表为空链表!!!\n"); return head; } p1 = head; //开始查找 while((num != p1->num) && (p1->next != NULL)) { p2 = p1; //把p1节点赋给p2 p1 = p1->next; //p1后移一个节点 } if(p1->num == num) //找到此数字 { if(p1 == head) //若p1是首结点 head = p1->next; else { p2->next = p1->next; //把要删除的p1所指向的下一个 free(p1); } n--; //节点数减1 } else //没有找到这个数字 { printf("没有发现%d\n",num); } return head;}//链表的插入struct node *insert(struct node *head,int num,int count){ struct node *p0,*p1,*p2; p1 = (struct node *)malloc(sizeof(struct node)); p1->num = num; p1->next = NULL; p0 = head; p2 = p0->next; //查找要插入的位置 if(count == n + 1) //插入尾部 { while(p0->next != NULL) //找到链表最后面 { p0 = p0->next; } p0->next = p1; } else if(count == 1) //插入头部 { p1->next = head; head = p1; } else { for(;count > 2;count--) { p0 = p0->next; p2 = p0->next; } p1->next = p0->next; p0->next = p1; } n++; return head;}
运行结果这里就不贴图了,仅供参考,如果那里有错误,敬请指教。
0 0
- 单链表的创建,删除,插入
- 单链表的创建、插入、删除
- 单链表创建,插入,删除
- 单链表创建,插入,删除
- 单链表的创建、插入、删除、倒置操作
- 单链表的创建、插入、删除、倒置操作
- 单链表的创建,删除,插入,显示,排序
- 数据结构 单链表的创建 插入 删除
- 单链表的创建, 删除, 插入, 输出
- 单链表的创建、插入、删除等操作
- 单链表的创建插入与删除
- 单链表的创建,删除,插入,排序
- 单链表的创建+ 求表长+ 查找+插入+删除
- 单链表的创建(头插法尾插法),插入,删除
- 单链表的创建,插入,删除以及逆序
- 单链表的创建,插入删除等操作
- 单链表的创建、插入删除等操作
- c语言单链表的创建、插入、删除
- Android drawable微技巧,你所不知道的drawable的那些细节
- eclipse web项目SVN同步,比较失败、报错illegalargumentexception
- 普通8位单片机和STM32单片机复位电路区别
- Java千百问_02基本使用(007)_eclipse变量高亮如何打开
- JZ2440使用tftp下载总结
- 单链表的创建、插入、删除
- VM VirtualBox虚拟机中OracleLinux-R6-U5-Server-x86_64系统下安装oracle11gr2
- Futures/Promises Golang方式实现
- emmet语法和sublime,webstorm快捷键
- 算法数组题
- python列表学习2
- OPEN资讯_更多学习资源-经常浏览
- 在Windows下写了一个shell脚本,上传到Linux下执行时报错
- 同步合成PPT幻灯片与讲演视频