C语言怎么实现循环双链表
发表于:2024-12-01 作者:千家信息网编辑
千家信息网最后更新 2024年12月01日,这篇文章主要介绍"C语言怎么实现循环双链表",在日常操作中,相信很多人在C语言怎么实现循环双链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"C语言怎么实现循环双链表"
千家信息网最后更新 2024年12月01日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安全错误
数据库的锁怎样保障安全
在nas上可以安装数据库
服务器端口软件
数据库姓名数据类型v
网络安全网闸端口是双向的吗
河南通用软件开发零售价
服务器密钥登录
tcl互联网科技
盗版伤害世界服务器
网络安全服务管家亮相
郑州武夷山软件开发
linux查服务器型号
web服务器banner
搜财务资料的数据库
数据库设计会员套餐
业务日志 存数据库
域名接入阿里云服务器
网络安全与信息化 中央
建立疾病数据库
java日志 数据库
文本 转入数据库
不安全服务器是什么意思
互联网科技金融管理
网络安全服务管家亮相
机器人服务器自动上网
服务器被恶意镜像了怎么办
湖州应用软件开发流程
安徽大数据软件开发如何收费
易语言程序在服务器里无法运行
医保网络安全检查自查表怎么填
崇明区网络技术厂家批发价