C语言怎么实现循环双链表
发表于:2024-11-30 作者:千家信息网编辑
千家信息网最后更新 2024年11月30日,这篇文章主要介绍"C语言怎么实现循环双链表",在日常操作中,相信很多人在C语言怎么实现循环双链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言怎么实现循环双链表"
千家信息网最后更新 2024年11月30日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安全错误
数据库的锁怎样保障安全
晶典网络技术工作室
QT软件开发CS架构
珠海正规软件开发
网络安全公益信息
公司上网 代理服务器
成都建设路凶宅数据库
最新无源光纤网络技术
直播平台服务器搭建
网吧服务器管理系统哪个好
arcgis符号数据库分享
软件开发质量提升建议
支付宝健康云服务器
紫光展锐软件开发怎么样
杨飞雪北京中科三方网络技术
探测服务器安全厂商
网络安全启动仪式创意
网络技术服务工程师招聘
文科网络安全学校
怀旧服服务器状态查询小程序
小学生宣传网络安全
清远自主可控软件开发优化价格
网络安全微书画手抄报
数据库安全管理 实验报告
罗兰电鼓游戏软件开发
申论 网络安全
国外服务器没人管
杨飞雪北京中科三方网络技术
北京多功能网络技术开发常见问题
网络安全图片大学生
软件开发销售费用一般有哪些