数据结构-循环双链表
循环链表,就是把链表给首尾相连,即尾结点的next指向L头结点,而循环双链表不仅尾结点指向头结点,且头结点的prior指向尾结点,判断为空时,只要看尾结点下一个是否指向头结点,循环链表的操作和链表的操作差别并不大。
循环双链表的创建、插入、删除
#include<iostream>
#include<cstdlib>
using namespace std;typedef int ElemType;
typedef struct CNode{ElemType data; struct CNode *next;struct CNode *prior;
}CNode,*CLinkNode;void createCLinkNode(CLinkNode &L){L = (CNode*)malloc(sizeof(CNode));CLinkNode t,s;t=L;ElemType e;cin>>e;while(e!=-1){s=(CLinkNode)malloc(sizeof(CNode));s->data = e;t->next = s;s->prior = t;t = s;cin>>e;} t->next = L; //L->prior = t;
}
void print(CLinkNode L){CLinkNode p = L -> next;while(p!=L){cout<<p->data<<" ";p=p->next; }cout<<endl;p=L->prior;while(p!=L){cout<<p->data<<" ";p=p->prior;}cout<<endl;
}
CLinkNode get(CLinkNode L,int i){CLinkNode p = L;int j = 1;while(p&&j<i){p=p->next;j++;}return p;
}
void insertCLinkNode(CLinkNode &L,int i){ ///插入到第一个 结点之前 CLinkNode p = get(L,i);CLinkNode s = (CLinkNode)malloc(sizeof(CNode));s->data = 999;s->next = p->next; //s的下一个节点,是原p的下一个结点 p->next->prior = s; //原p的下一个结点的前一个结点变为s s->prior = p; //s的前一个结点是p p->next = s;
}
void deleteCLinkNode(CLinkNode &L,int i){ //删除第一个结点 CLinkNode p = get(L,i);CLinkNode q = p->next;p->next = q->next;q->next->prior = p;
}int main()
{CLinkNode L;createCLinkNode(L);print(L);insertCLinkNode(L,1);print(L);deleteCLinkNode(L,1);print(L);return 0;
}
如有错误,敬请指正!
数据结构-循环双链表相关推荐
- 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表
循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...
- (王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表
文章目录 一:循环链表定义 二:循环单链表 三:循环双链表 一:循环链表定义 循环链表:规定好头尾结点的指向形成成环状 循环单链表:其尾节点的next指针由原本的空改为指向头结点 循环双链表:其尾节点 ...
- 【数据结构】双链表的应用
1.设计一个算法,在双链表中值为y的结点前面插入一个值为x的新结点,即使得值为x的新结点成为值为y的结点的前驱结点. 2.设计一个算法,将一个双链表改建成一个循环双链表. #include <s ...
- 建立循环双链表(尾插法)
该方法是将节点插入在当前循环双链表的表尾上,为此增加一个尾指针r ,并始终指向当前链表的尾节点,最后让r->next 指向头结点.头结点的prior 指向尾节点. 注意:这里头结点,尾节点 要相 ...
- 建立循环双链表(头插法)
该方法从一个空表开始,读取数组a中元素,生成新节点,将读取的数据存在该节点的数据域中,然后将该新节点插入到当前节点的表头上,直到结束为止. 双链表的存储结构: typedef strcut DLink ...
- 第四周实践项目6 循环双链表应用
/* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目6-设非空线性表ha和hb都用带头节点的循环双链表表示.设计一个 ...
- 判断循环双链表是否对称
题目:设计一个算法判断带头结点的循环双链表是否对称 分析: 简单分析,我们可以设置两个指针,pre和next,从头结点出发,进行比较,若pre与next所指值不同,则不对称,若pre和 ...
- 循环双链表的手动构建总结
我们常用的是单链表的算法.虽然双链表和循环双链表的算法常常被拿来作为一种设计的思路,也常假想有一个循环双链表,对它进行操作,实际上我从没动手写过循环双链表. 在手动实现单链表的习题多道以后,有了一种对 ...
- [C语言实现]带你手撕带头循环双链表
目录 什么是双链表? 带头结点的优势: 双链表的实现: 什么是循环双链表? 众所周知,顺序表的插入和删除有时候需要大量移动数据,并且每次开辟空间都可能会浪费大量内存和CPU资源,于是我们有了链表,我们 ...
最新文章
- android jar 包 意见反馈功能,android重点jar包详解.docx
- C Primer Plus 第6章 C控制语句:循环 6.3 关系运算符和表达式
- Android Activtity Security
- Oracle Java Mission Control:终极指南
- 什么样的人适合自学编程?你以为你自学难是为什么?来看看答案吧!
- 使用jedisPool管理jedis,使用jedis操作redis
- access insert语句怎么写_码住!MySQL中超实用的几种SQL语句
- c程序语言编写 计算器,C语言编写简单计算器
- 【Gym 102134-E】Kth subtree【权值树状数组、二分统计第k大+dfs离线操作】
- 【思路】2021年第十四届“认证杯“数学中国数学建模国际赛(小美赛)思路
- 实用干货秘籍!最经典的10个Pandas数据查询案例,收藏!
- tftpd64-SE使用
- 面试常见简单编程题目
- c语言fprintf 数组,C语言fprintf()函数:格式化输出到一个流中
- Nvme硬盘完美安装官方原版win10教程(含激活)
- 常见的异常类有哪些?
- RISC-V要上天!NASA选它做下一代航天计算芯片
- NP问题真的很难理解
- webmail 客户端_开源Webmail客户端Isotope入门
- 重新排序(排序不等式+差分)蓝桥
热门文章
- JVM 逃逸分析 (史上最全)
- 高效办公!Python 批量生成PDF文档
- 《MySQL性能优化和高可用架构实践》阅读总结
- 使用TWRP Recovery刷入CM13等第三方ROM教程
- ovs-docker实现容器网络vlan隔离
- 如何以正确地姿势AK SQL查询50题(精华篇)
- discuz x2.5后台界面html版本
- qprocess qt 打开word_Qt QProcess启动和关闭外部程序
- Windows Server 2022 开始,DNS 客户端支持 DNS over-HTTPS (DoH)
- 最好的在线PDF转换工具服务