C语言怎么实现循环双链表
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,这篇文章主要介绍"C语言怎么实现循环双链表",在日常操作中,相信很多人在C语言怎么实现循环双链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言怎么实现循环双链表"
千家信息网最后更新 2025年01月22日C语言怎么实现循环双链表
这篇文章主要介绍"C语言怎么实现循环双链表",在日常操作中,相信很多人在C语言怎么实现循环双链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言怎么实现循环双链表"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
具体内容如下
#include#include #include typedef int DataType;typedef struct Node{ DataType data; // 数据域 struct Node * prior; // 前趋指针 struct Node * next; // 后继指针 }LinkList; LinkList* Init_List(); // 初始化循环双链表 bool Creat_List(LinkList * L); // 创建链表 int Length_List(LinkList * L); // 链表长度 bool Empty_List(LinkList * L); // 判空 bool Insert_List(LinkList * L, int pos, DataType x); // 插入 bool Delete_List(LinkList * L, int pos, DataType * x);// 删除 bool Destroy_List(LinkList * L); // 销毁链表bool Traverse_List(LinkList * L); // 遍历链表 int Prior_Value(LinkList * L, int pos); // 前趋结点的值 int main(){ DataType x; int pos; LinkList * L = Init_List(); if(Creat_List(L)) printf("链表构造成功!\n"); else printf("链表构造失败!\n"); printf("遍历链表:"); Traverse_List(L); printf("链表结点个数:%d\n\n", Length_List(L)); printf("输入要求前趋结点的结点:"); scanf("%d",&pos); printf("第%d个结点的前趋结点:%d\n\n",pos,Prior_Value(L, pos)); Insert_List(L, 2, 5); printf("插入结点:第2个结点\n"); printf("插入元素:5\n"); printf("遍历链表:"); Traverse_List(L); Delete_List(L, 3, &x); printf("删除结点:第3个结点\n"); printf("被删除元素:%d\n",x); printf("遍历链表:"); Traverse_List(L); if(Destroy_List(L)) printf("销毁成功!\n"); else printf("销毁失败!\n"); return 0; } LinkList* Init_List(){ LinkList * L = (LinkList *)malloc(sizeof(LinkList)); // 创建头结点 if(!L) { printf("申请空间失败!\n"); exit(-1); } L->next = L->prior = L; // 空表,前趋指针和后继指针均指向其自身 return L; // 返回头结点的地址 } bool Creat_List(LinkList * L){ int i,n,val; LinkList * p = L; // 保证L始终指向头结点 printf("请输入循环双链表的结点个数:"); scanf("%d",&n); for(i=0; i data = val; p->next = q; q->prior = p; p = q; } p->next = L; // 保证最后一个结点的后继指针指向头结点 L->prior = p; // 保证头结点的前趋指针指向最后一个结点 return true;} int Length_List(LinkList * L){ int len = 0; LinkList * p = L->next; while(p!=L) // 最后一个结点也要加上 { len++; p = p->next; } return len;} bool Empty_List(LinkList * L){ if(L->next==L&&L->prior==L) return true; else return false;} bool Insert_List(LinkList * L, int pos, DataType x){ int i = 1; LinkList * p = L->next; if(pos<1||pos>Length_List(L)) return false; while(i next; } LinkList * q = (LinkList*)malloc(sizeof(LinkList)); q->data = x; q->next = p->next; q->prior = p; p->next->prior = q; p->next = q; return true;} bool Delete_List(LinkList * L, int pos, DataType * x){ int i = 1; LinkList * p = L->next; if(pos<1||pos>Length_List(L)) return false; while(i next; } LinkList * q = p->next; *x = q->data; p->next = q->next; q->next->prior = p; free(q); return true;} bool Destroy_List(LinkList * L){// 将循环双链表变成单链表 LinkList * p = L->next; L->next = NULL; // 空表时, 头结点的前趋指针、后继指针都是指向其自身 L->prior = NULL; // 销毁时,头结点前趋指针、后继指针指向空 while(p) { LinkList * q = p->next; free(p); p = q; } L = p = NULL; return true;} bool Traverse_List(LinkList * L){ if(Empty_List(L)) return false; LinkList * p = L->next; while(p!=L) { printf("%3d",p->data); p = p->next; } printf("\n\n"); } int Prior_Value(LinkList * L, int pos){ int i = 1; LinkList * p = L->next; if(pos<1||pos>Length_List(L)) return false; while(i next; } return p->prior->data; }
到此,关于"C语言怎么实现循环双链表"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
结点
指针
双链
循环
后继
语言
指向
学习
保证
成功
个数
元素
更多
向头
帮助
输入
实用
接下来
内容
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器和水反应离子方程式
考研数据库方向
bomb 服务器
县委对网络安全
梦幻西游20年新开火热服务器
软件开发进阶系列视频
网络安全提升年总结
企业信息网络安全保障
软件开发可以先写文档吗
湖南电信的服务器虚拟主机
朝阳审计局网络安全管理
福特中央数据库
南京开放大学试卷数据库
网络技术培训哪个直播平台好
淘宝购物涉及数据库吗
什么是车载网络安全
请在web服务器上操作
数据库怎么备份
证券软件开发工程师
网络安全学习周知识竞赛
网络安全 实验
金山软件开发工程师年终奖
沭阳自动化网络技术诚信合作
嵌入式软件开发有哪几个层次
银行网络技术规范
h3c网络安全卫士
做好网络安全复核工作
泰坦陨落2一直连接服务器中
用户访问数据库
导出数据库文件后怎么导入