C语言如何实现双向链表
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容介绍了"C语言如何实现双向链表"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!双向链表的基本操
千家信息网最后更新 2025年02月01日C语言如何实现双向链表
本篇内容介绍了"C语言如何实现双向链表"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
双向链表的基本操作
1.利用尾插法建立一个双向链表。
2.遍历双向链表。
3.实现双向链表中删除一个指定元素。
4.在非递减有序双向链表中实现插入元素e仍有序算法。
5.判断双向链表中元素是否对称若对称返回1否则返回0。
6.设元素为正整型,实现算法把所有奇数排列在偶数之前。
7.在主函数中设计一个简单的菜单调试上述算法。
实例代码:
//排序的时候因为没有说明奇数和偶数需不需要各自再排序,我就没有排序,只是将奇数放在偶数后面。//创建链表的时候,因为这个实验没有要求输出链表的长度,所以我就输入了一个长度为n的链表。#include#include struct node{ int data; node *pre,*next;}*h,*end;void CreatList()//创建一个双向链表{ int n; node *s,*e; printf("请输入链表长度: "); scanf("%d",&n); printf("请输入数据: "); h=(node *)malloc(sizeof(node)); s=(node *)malloc(sizeof(node)); h->pre=NULL; e=h; e->next=s; s->pre=e; while(n--) { e=s; scanf("%d",&s->data); s=(node *)malloc(sizeof(node)); e->next=s; s->pre=e; } s->next=NULL; end=s; return ;}void PrintList()//输出链表{ node *s; s=h->next; printf("链表数据: "); while(s!=end) { printf("%d ",s->data); s=s->next; } printf("\n"); return ;}void DeletList()//删除链表中的某个元素{ int x; int flag; node *s,*e; printf("请输入需删除元素: "); scanf("%d",&x); s=h->next; e=h; flag=0; while(s!=end) { if(s->data==x) { e->next=s->next; s->next->pre=e; free(s); flag=1; break; } e=s; s=e->next; } if(!flag) printf("链表中不存在值为%d的元素。\n",x);//如果链表中没有x,输出这句话。 return ;}void InsetList()//在有序链表中插入某个元素{ int x; node *s,*e; printf("输入需要插入的元素: "); scanf("%d",&x); s=h->next; while(1) { if(s->data>=x) { e=(node *)malloc(sizeof(node)); e->data=x; e->next=s; e->pre=s->pre; s->pre->next=e; s->pre=e; break; } else if(s==end)//将x放入链表末尾 { end=(node *)malloc(sizeof(node)); s->data=x; end->pre=s; end->next=NULL; s->next=end; break; } s=s->next; } return ;}void JudgeList()//判断双向链表是否对称{ node *s,*e; int flag=0; s=h->next; e=end->pre; while(s->data==e->data&&s!=end&&e!=h) { s=s->next; e=e->pre; } if(s==end&&e==h) printf("链表对称。\n"); else printf("链表不对称。\n"); return ;}void SortList()//将链表中的奇数放在偶数后面{ node *s; node *odd; int temp; odd=h->next; s=h->next; while(s!=end) { if(s->data%2!=0) { temp=odd->data; odd->data=s->data; s->data=temp; odd=odd->next; s=s->next; } else s=s->next; } return ;}int PrintMenu()//打印目录{ int T; printf("******************目录******************\n"); printf("创建一个双向链表: 1\n"); printf("输出链表: 2\n"); printf("删除链表中的指定元素: 3\n"); printf("向链表中插入元素: 4\n"); printf("判断链表是否对称: 5\n"); printf("排列链表: 6\n"); printf("操作结束: 0\n"); printf("输入操作指令: "); scanf("%d",&T); switch(T) { case 1:CreatList();break; case 2:PrintList();break; case 3:DeletList();break; case 4:InsetList();break; case 5:JudgeList();break; case 6:SortList();break; case 0:return 1; default:printf("输入错误。请重新输入。\n"); } return 0;}int main(){ int flag; while(1) { flag=PrintMenu(); if(flag)//通过flag控制循环的跳出 break; } printf("谢谢使用!\n"); return 0;}
"C语言如何实现双向链表"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
双向
元素
输入
对称
输出
偶数
奇数
有序
算法
长度
排序
语言
内容
数据
时候
更多
目录
知识
实用
学有所成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
怎么看数据库有没有安装插件
做软件开发懂硬件
2020年互联网网络安全峰会
macos 文件服务器
富民信息化软件开发价格信息
用虚拟机做成文件服务器
网络安全设备组成及功能
静态网站需要服务器吗
网络安全六个坚持实践论
公安局检查网络安全
数据库统计出现次数最多的算法
服务器连接断开101
户籍管理系统的数据库
如何更改数据库表的内容
春节倒计时软件开发
我是网络安全卫士的简笔画
玩吧游戏软件开发公司
csgo开箱连接服务器错误
上海个人软件开发哪个好
临沂巨久网络技术公司
广场舞网络安全不烦恼
开远天气预报软件开发
excel服务器教程下载
哪家的云服务器比较好
信息短信服务器发送
软件开发可以做java吗
用友现在是云存储还是要服务器
吴沈括 网络安全案例
云服务器商
网络安全国际教育