C语言怎么实现循环双链表
发表于:2024-11-13 作者:千家信息网编辑
千家信息网最后更新 2024年11月13日,这篇文章主要介绍"C语言怎么实现循环双链表",在日常操作中,相信很多人在C语言怎么实现循环双链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言怎么实现循环双链表"
千家信息网最后更新 2024年11月13日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安全错误
数据库的锁怎样保障安全
转录数据库有哪些
数据库一般多大
税务系统网络安全自查报告
计算机三级数据库题库免费
我的交易系统服务器连接不上
数据库法学济南大学
绍兴制造软件开发工程师
精通网络安全技术
如何修改公司mes数据库
网络安全知识班会活动总结
数据库mdf怎么看数据
天津拍拍够网络技术有限公司
泉州管理财务软件开发
网络安全 指标
c 网络安全
新闻发布系统的数据库设计
服务器维护日志怎么写
服务器与客户机网络
我的世界仙诀服务器
plus怎么连接sql数据库
mc服务器垃圾
数据库 需要多少钱
衡水协同办公系统网络技术
怎么给服务器管理员设密码
深耕网络安全工作
服务器开机长鸣报警
中邮信息科技软件开发中心
核酸的一级数据库
删除数据库用户以及数据库
网络安全和信息化 新媒体