C语言如何实现双向链表

C语言如何实现双向链表

本篇内容介绍了“C语言如何实现双向链表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

双向链表的基本操作

1.利用尾插法建立一个双向链表。

2.遍历双向链表。

3.实现双向链表中删除一个指定元素。

4.在非递减有序双向链表中实现插入元素e仍有序算法。

5.判断双向链表中元素是否对称若对称返回1否则返回0。

6.设元素为正整型,实现算法把所有奇数排列在偶数之前。

7.在主函数中设计一个简单的菜单调试上述算法。

实例代码:

//排序的时候因为没有说明奇数和偶数需不需要各自再排序,我就没有排序,只是将奇数放在偶数后面。//创建链表的时候,因为这个实验没有要求输出链表的长度,所以我就输入了一个长度为n的链表。#include<stdio.h>#include<stdlib.h>structnode{intdata;node*pre,*next;}*h,*end;voidCreatList()//创建一个双向链表{intn;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;}voidPrintList()//输出链表{node*s;s=h->next;printf("链表数据:");while(s!=end){printf("%d",s->data);s=s->next;}printf("\n");return;}voidDeletList()//删除链表中的某个元素{intx;intflag;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;}voidInsetList()//在有序链表中插入某个元素{intx;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;}elseif(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;}voidJudgeList()//判断双向链表是否对称{node*s,*e;intflag=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");elseprintf("链表不对称。\n");return;}voidSortList()//将链表中的奇数放在偶数后面{node*s;node*odd;inttemp;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;}elses=s->next;}return;}intPrintMenu()//打印目录{intT;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){case1:CreatList();break;case2:PrintList();break;case3:DeletList();break;case4:InsetList();break;case5:JudgeList();break;case6:SortList();break;case0:return1;default:printf("输入错误。请重新输入。\n");}return0;}intmain(){intflag;while(1){flag=PrintMenu();if(flag)//通过flag控制循环的跳出break;}printf("谢谢使用!\n");return0;}

“C语言如何实现双向链表”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!

发布于 2022-04-03 22:39:14
分享
海报
22
上一篇:C语言如何格式化输出控制长度 下一篇:C语言如何实现枚举与指针
目录

    忘记密码?

    图形验证码