C语言双链表框架搭建练习(三)
来源:互联网 发布:php程序设计读后感 编辑:程序博客网 时间:2024/06/06 08:53
我们继续实现双链表插入排序,即将双链表创建时进行排序操作,核心函数如下:
node* addsortdata(node*phead, datatype data){ node *newp = (node*)malloc(sizeof(node)); newp->data = data; newp->pnext = NULL; if (phead==NULL) { phead = newp; } else { node*p = phead; while (p->pnext != NULL && p->pnext->data < newp->data) //停留在小于目标位置的前一位 { p = p->pnext; } /*newp->pnext = p->pnext; p->pnext = newp;*/ if (p == phead && p->data > newp->data) //因为要改变投节点,所以需要单独把头插列举出来 { newp->pnext = phead; phead = newp; } else //其余的为尾插或者中插 { newp->pnext = p->pnext; p->pnext = newp; } } showdata(phead); return phead;}
调用:
void main4(){ node* link = NULL; link = addsortdata(link, 20); link = addsortdata(link, 0); link = addsortdata(link, 21); link = addsortdata(link, 3); link = addsortdata(link, 56); link = addsortdata(link, 7); link = addsortdata(link, 1); link = addsortdata(link, 32); link = addsortdata(link, 5); link = addsortdata(link, 6); showdata(link); system("pause");}
环状链表
环状链表即首尾相连,创建时的核心函数如下:
node *adddatacircel(node*phead, datatype data) // 尾部添加{ node *newp = (node*)malloc(sizeof(node)); newp->data = data; newp->pnext = phead; if (phead==NULL) { phead = newp; newp->pnext = phead; //在环状链表初始化的时候,要注意为空的指针的赋值 } else { node *p = phead; while (p->pnext != phead) { p = p->pnext; } p->pnext = newp; } return phead;}
相对应的显示函数会发生死循环,即在环状链表内找不到结束点,所以相匹配有对应的显示函数:
void showcircel(node*phead) //打印{ node *p = phead; while (p->pnext != phead) { printf("%d ", p->data); p = p->pnext; } printf("%d \n", p->data);}
查
node* findcircle(node*phead, datatype data){ node*p = phead; while (p->pnext != NULL&&p->pnext->data != data) { p = p->pnext; } if (p->pnext->data!=data) { return NULL; } else { return p; }}
删
node* delcircle(node*phead, datatype data){ node*p = findcircle(phead, data); if (p == NULL) { return phead; } else { p->pnext = p->pnext->pnext; return p; }}
1 0
- C语言双链表框架搭建练习(三)
- C语言双链表框架搭建练习(二)
- C语言双链表框架搭建练习(一)
- C语言练习作业(三)
- C语言基础练习(三)
- C语言程序练习三
- C语言编程(练习1:循环,三大循环结构 )
- C语言编程(练习2:循环,三大循环结构 )
- C语言编程(练习4:循环,三大循环结构 )
- C语言编程(练习3:循环,三大循环结构 )
- C语言编程(练习5:循环,三大循环结构 )
- C语言编程(练习6:循环,三大循环结构 )
- C语言编程(练习7:循环,三大循环结构 )
- C练习(三)
- 三 练习反汇编C语言程序
- c语言练习(二)
- C语言(练习篇)
- C语言练习(1)
- Linux vi/vim
- Java----------华为机试--------------坐标移动
- OpenGL学习笔记(六)
- TCP协议的三次握手和四次挥手
- 微信小程序倒计时组件更新,加入时间校准、多计时器功能
- C语言双链表框架搭建练习(三)
- linux yum 命令
- android studio finished with non-zero exit value 3的解决方法
- acrgis api for javaScript中的FeatureLayer查询
- tomcat9用户账户配置文件编辑——从浏览器进入tomcat Manager
- Python实现视频下载
- 基于注解的SpringMVC
- oracle数据库转成mysql数据库sql(Navicat premium)
- linux重命名