循环链表是一种链式存储结构,它的最后一个节点指向头结点,形成一个环。因此,从循环链表中的任何一个结点出发都能找到任何其他结点。循环链表的操作和单链表的操作基本一致,差别仅仅在于算法中的循环条件有所不同。

#include<iostream>
#include<malloc.h>
using namespace std;
typedef char ElemType;
typedef struct Lnode                //节点类型
{ElemType data;struct Lnode *next;
}LinkList;
void InitList(LinkList *&L)         //初始化链表
{L = (LinkList *)malloc(sizeof(LinkList));L->next = L;
}
void DestroyList(LinkList *&L)
{LinkList *p = L,*q = p->next;while(q != NULL){free(p);p = q;q = q->next;}free(p);
}
int ListEmpty(LinkList *L)
{return (L->next == L);
}
int ListLength(LinkList *L)    //返回链表长度
{LinkList *p = L;int i = 0;while(p->next != L){i++;p = p->next;}return i;
}
void DisplayList(LinkList *L)
{LinkList *p = L->next;while(p != L){cout << p->data <<" ";p = p->next;}cout << endl;
}
int GetElem(LinkList *L, int i ,ElemType &e)
{int j = 0;LinkList *p;if(L->next != L){if(i==1){e = L->next->data;return 1;}else{p = L->next;while(j<i-1&&p!=L){j++;p = p->next;}if(p==L)return 0;else{e = p->data;return 1;}}}elsereturn 0;
}int LocateElem(LinkList *L,ElemType e)
{LinkList *p = L->next;int n =1;while(p != L && p->data != e){p = p->next;n++;}if(p==L)return 0;elsereturn n;
}
int ListInsert(LinkList *&L,int i,ElemType e)
{int j = 0;LinkList *p = L,*s;if(p->next ==L || i==1){s = (LinkList *)malloc(sizeof(LinkList));s->data = e;s->next = p->next;p->next = s;return 1;}else{p = L->next;while(j<i-2 && p !=L){j++;p = p->next;}if(p == L)return 0;else{s = (LinkList *)malloc(sizeof(LinkList));s->data = e;s->next = p->next;p->next = s;return 1;}}
}
int ListDelete(LinkList *&L,int i,ElemType &e)
{int j = 0;LinkList *p = L, *q;if(L->next != L){if(i==1){q = L->next;L->next = q->next;free(q);return 1;}else{p = L->next;while(j<i-2&&p!=L){j++;p = p->next;}if(p==L)return 0;else{q = p->next;p->next = q->next;free(q);return 1;}}}elsereturn 0;
}int main()
{LinkList *L;ElemType e;cout << "(1)初始化链表L: \n";InitList(L);cout << "(2)插入法建立链表:\n";ListInsert(L,1,'a');ListInsert(L,2,'b');ListInsert(L,3,'c');ListInsert(L,4,'d');ListInsert(L,5,'e');cout << "(3)输出单链表L:";DisplayList(L);cout << "(4)单链表长度: ";cout << ListLength(L) <<endl;cout << "(5)单链表L是:" << (ListEmpty(L)?"空":"非空") <<endl;GetElem(L,3,e);cout << "(6)单链表L的第三个元素是:" <<  e << endl;cout << "(7)元素a的位置是:" << LocateElem(L,'a') <<endl;cout << "(8)在第四个位置插入元素f";ListInsert(L,4,'f');cout << "(9)输出链表L:";DisplayList(L);cout << "(10)删除第三个元素\n";ListDelete(L,3,e);cout << "(11)输出单链表L:";DisplayList(L);cout << "(12)释放单链表L:\n";DestroyList(L);
return 0;
}

  

转载于:https://www.cnblogs.com/theast/archive/2013/05/08/3067038.html

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

  1. 数据结构——循环链表之约翰夫生死游戏

    数据结构--循环链表之约翰夫生死游戏 一.什么是约翰夫生死游戏? 约瑟夫游戏的大意是: 每30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉乘客,只有将全船一半的旅客投入还中,其 ...

  2. python算法与数据结构-循环链表

    求链表长度 需要考虑的特殊情况,空链表或者链表当中只有一个节点的时候. 添加元素: 除了头部指向新节点,单向循环链表也需要尾节点指向新的节点 删除元素如下所示: 代码如下所示: # -*-coding ...

  3. python算法与数据结构-循环链表(41)

    阅读目录 一.循环链表的介绍 二.循环链表基本操作的python代码实现 三.循环链表基本操作的C语言实现 一.循环链表的介绍 上一篇我们已经讲过单链表,本篇给大家讲解循单链表的一个变形是单向循环链表 ...

  4. Linux C 数据结构—-循环链表

    前面我们学习了单向链表,现在介绍单向循环链表,单向循环链表是单链表的一种改进,若将单链表的首尾节点相连,便构成单向循环链表结构,如下图: 对于一个循环链表来说,其首节点和末节点被连接在一起.这种方式在 ...

  5. 数据结构 循环链表及其基本操作

    目录 一.引入 二.循环链表的定义 三.单链表与循环链表对比 3.1图示对比 3.2代码对比 四.循环链表的操作 4.1循环链表的初始化 4.2循环链表的建立 4.2.1头插法建立循环链表 4.2.2 ...

  6. 数据结构——循环链表

    1.介绍 循环链表,故名思意,就是首尾相连的一个链表. 对于单链表来说,最后一个结点的指针不为nullptr,而是头指针,即存放头节点的地址. 对于双链表来说,头节点的prior指针指向最后一个结点, ...

  7. 头歌JAVA数据结构答案

    头歌JAVA数据结构答案 一.Java数据结构-循环链表的设计与实现 第1关 单循环链表的实现-链表的添加.遍历 package step1; /*** Created by sykus on 201 ...

  8. 数据结构与算法--头歌(educoder)实训作业题目及答案

    目录 Java 数据结构之图 第1关:图的表示 第2关:深度优先搜索 第3关:广度优先搜索 第4关:单源最短路径 Java 数据结构之排序 第1关:选择排序 第2关:插入排序 第3关:归并排序 第4关 ...

  9. [总结] 全部笔记博文目录总结(持续更新...)

    计算机网络 [Linux] tcpdump 过滤传递给指定端口的数据 [Linux] 使用tcpkill杀掉tcp连接 [Linux]利用tcpdump打印sql语句 [linux] tcpdump抓 ...

最新文章

  1. 【错误记录】Android 文件分享 FileProvider 设置错误
  2. Vue 组件中 移动 this.$el 的注意事项
  3. mysql5.7应该导什么包_立冬为什么要吃饺子?包饺子应该注意什么?怎么煮?看完你就明白...
  4. mos管结电容等效模型_为什么我的mos管炸了???
  5. 【渝粤教育】 国家开放大学2020年春季 1366英语教学理论与实践 参考试题
  6. 11-[函数进阶]-闭包
  7. linux认令牌操作错误,验证令牌操作错误
  8. Hadoop JAVA 开发说明
  9. ZMQ模式详解——发布/订阅模式
  10. 刚写完的商城erp + 这个商城前台,新鲜出炉。自己1个人写, 包括php框架和前端html页面....
  11. mysql 修改字段注释_MySQL数据库+命令大全,人手一份的实操攻略来啦
  12. python not_刚接触Python,python中not in怎么解释?求解释一下?
  13. 启用Windows 功能NetFx3时出错,错误代码:-2146498298
  14. 站群服务器用SS5 SOCKS5 配置多IP/多端口高性能代理服务器(16G内存主机支持超过100万并发S5代理)
  15. ViewPager的翻页动画
  16. java 解析word模板为xml, 动态填充数据到xml,最后输出word文档
  17. java吸血鬼数字_吸血鬼数字的简单实现
  18. 计算机系统分盘作用,电脑为什么要分区,分区的好处
  19. 准备搞个google play账号玩玩
  20. (私人收藏)古风PPT高级灰蓝传艺

热门文章

  1. 判断一个数组是否是另一个数组的子集
  2. JavaScript绑定键盘事件的多种写法
  3. Windows下用PIP安装scipy出现 no lapack/blas resources found
  4. java面向对象(类与对象,局部变量成员变量,基本类型和引用类型作为参数传递)...
  5. 机器人整机主要产品规格参数
  6. js课程 5-14 js如何实现控制动画角色走动
  7. 北京君正集成电路的Newton平台--穿戴式
  8. gcc/g++ 以及makefile
  9. GCC的内存边界对齐
  10. Oracle Database 12c(12.1) Beta已经开始内部测试