循环链表,就是把链表给首尾相连,即尾结点的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;
}

如有错误,敬请指正!

数据结构-循环双链表相关推荐

  1. 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表

    循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...

  2. (王道408考研数据结构)第二章线性表-第三节3:循环单链表和循环双链表

    文章目录 一:循环链表定义 二:循环单链表 三:循环双链表 一:循环链表定义 循环链表:规定好头尾结点的指向形成成环状 循环单链表:其尾节点的next指针由原本的空改为指向头结点 循环双链表:其尾节点 ...

  3. 【数据结构】双链表的应用

    1.设计一个算法,在双链表中值为y的结点前面插入一个值为x的新结点,即使得值为x的新结点成为值为y的结点的前驱结点. 2.设计一个算法,将一个双链表改建成一个循环双链表. #include <s ...

  4. 建立循环双链表(尾插法)

    该方法是将节点插入在当前循环双链表的表尾上,为此增加一个尾指针r ,并始终指向当前链表的尾节点,最后让r->next 指向头结点.头结点的prior 指向尾节点. 注意:这里头结点,尾节点 要相 ...

  5. 建立循环双链表(头插法)

    该方法从一个空表开始,读取数组a中元素,生成新节点,将读取的数据存在该节点的数据域中,然后将该新节点插入到当前节点的表头上,直到结束为止. 双链表的存储结构: typedef strcut DLink ...

  6. 第四周实践项目6 循环双链表应用

    /* *Copyright (c) 2017,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:项目6-设非空线性表ha和hb都用带头节点的循环双链表表示.设计一个 ...

  7. 判断循环双链表是否对称

    题目:设计一个算法判断带头结点的循环双链表是否对称 分析:         简单分析,我们可以设置两个指针,pre和next,从头结点出发,进行比较,若pre与next所指值不同,则不对称,若pre和 ...

  8. 循环双链表的手动构建总结

    我们常用的是单链表的算法.虽然双链表和循环双链表的算法常常被拿来作为一种设计的思路,也常假想有一个循环双链表,对它进行操作,实际上我从没动手写过循环双链表. 在手动实现单链表的习题多道以后,有了一种对 ...

  9. [C语言实现]带你手撕带头循环双链表

    目录 什么是双链表? 带头结点的优势: 双链表的实现: 什么是循环双链表? 众所周知,顺序表的插入和删除有时候需要大量移动数据,并且每次开辟空间都可能会浪费大量内存和CPU资源,于是我们有了链表,我们 ...

最新文章

  1. android jar 包 意见反馈功能,android重点jar包详解.docx
  2. C Primer Plus 第6章 C控制语句:循环 6.3 关系运算符和表达式
  3. Android Activtity Security
  4. Oracle Java Mission Control:终极指南
  5. 什么样的人适合自学编程?你以为你自学难是为什么?来看看答案吧!
  6. 使用jedisPool管理jedis,使用jedis操作redis
  7. access insert语句怎么写_码住!MySQL中超实用的几种SQL语句
  8. c程序语言编写 计算器,C语言编写简单计算器
  9. 【Gym 102134-E】Kth subtree【权值树状数组、二分统计第k大+dfs离线操作】
  10. 【思路】2021年第十四届“认证杯“数学中国数学建模国际赛(小美赛)思路
  11. 实用干货秘籍!最经典的10个Pandas数据查询案例,收藏!
  12. tftpd64-SE使用
  13. 面试常见简单编程题目
  14. c语言fprintf 数组,C语言fprintf()函数:格式化输出到一个流中
  15. Nvme硬盘完美安装官方原版win10教程(含激活)
  16. 常见的异常类有哪些?
  17. RISC-V要上天!NASA选它做下一代航天计算芯片
  18. NP问题真的很难理解
  19. webmail 客户端_开源Webmail客户端Isotope入门
  20. 重新排序(排序不等式+差分)蓝桥

热门文章

  1. JVM 逃逸分析 (史上最全)
  2. 高效办公!Python 批量生成PDF文档
  3. 《MySQL性能优化和高可用架构实践》阅读总结
  4. 使用TWRP Recovery刷入CM13等第三方ROM教程
  5. ovs-docker实现容器网络vlan隔离
  6. 如何以正确地姿势AK SQL查询50题(精华篇)
  7. discuz x2.5后台界面html版本
  8. qprocess qt 打开word_Qt QProcess启动和关闭外部程序
  9. Windows Server 2022 开始,DNS 客户端支持 DNS over-HTTPS (DoH)
  10. 最好的在线PDF转换工具服务