数据结构纯属新手,小白一枚,欢迎批评指正!
下面这个图是接下来要实现的单循环链表!

直接上代码OVO!

定义结构体

typedef struct Node {int data;               //数据域struct Node* next;     //指针域
}Node;

单循环链表跟单链表类似只有数据域和指向下一个结点的指针域,不过尾结点的指针域指向第一个结点。

创建链表

//创建单循环链表
Node* initList() {Node* L = (Node*)malloc(sizeof(Node));L->data = 0;L->next = L;return L;
}

头插法

//头插法
void headInsert(Node* L, int data) {Node* node = (Node*)malloc(sizeof(Node));node->data = data;node->next = L->next;L->next = node;L->data++;
}

尾插法

//尾插法
void tailInsert(Node* L,int data) {Node* n = L;Node* node = (Node*)malloc(sizeof(Node));node->data = data;n = L->next;while (n->next != L) {n = n->next;}node->next = n->next;n->next = node;L->data++;}

删除结点

//删除结点
int deleteList(Node* L, int data) {Node* node = L->next;Node* preNode = L;while (node != L) {if (node->data == data) {preNode->next = node->next;L->data--;free(node);return TRUE;}preNode = node;node = node->next;}return FALSE;
}

遍历链表

//遍历链表
void printList(Node* L) {Node* node = L->next;while (node != L) {printf("%d->", node->data);node = node->next;}printf("NULL\n");
}

全部代码:

#include <stdio.h>
#include <stdlib.h>#define TRUE 1
#define FALSE 0typedef struct Node {int data;struct Node* next;
}Node;//创建单循环链表
Node* initList() {Node* L = (Node*)malloc(sizeof(Node));L->data = 0;L->next = L;return L;
}//头插法
void headInsert(Node* L, int data) {Node* node = (Node*)malloc(sizeof(Node));node->data = data;node->next = L->next;L->next = node;L->data++;
}//尾插法
void tailInsert(Node* L,int data) {Node* n = L;Node* node = (Node*)malloc(sizeof(Node));node->data = data;n = L->next;while (n->next != L) {n = n->next;}node->next = n->next;n->next = node;L->data++;}//删除结点
int deleteList(Node* L, int data) {Node* node = L->next;Node* preNode = L;while (node != L) {if (node->data == data) {preNode->next = node->next;L->data--;free(node);return TRUE;}preNode = node;node = node->next;}return FALSE;
}//遍历链表
void printList(Node* L) {Node* node = L->next;while (node != L) {printf("%d->", node->data);node = node->next;}printf("NULL\n");
}int main(void) {Node* L=initList();headInsert(L,1);headInsert(L,2);headInsert(L,3);headInsert(L,4);headInsert(L,5);tailInsert(L,6);tailInsert(L,7);deleteList(L,1);printList(L);return 0;
}

运行截图:

总结

单循环链表是单链表的另一种形式,其结构特点链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环。.
和单链表相同,单循环链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作较为方便。.

数据结构-单循环链表(C语言代码)相关推荐

  1. 数据结构-单链表(C语言代码)

    数据结构纯属新手,小白一枚,欢迎批评指正! 直接上代码OVO! 定义结构体 typedef struct Node {int data; //数据域struct Node* next; //指针域 } ...

  2. 数据结构——队列的C语言代码实现

    系列文章目录 数据结构--顺序表的C语言代码实现 数据结构--八种链表的C语言代码实现 数据结构--栈的C语言代码实现 数据结构--队列的C语言代码实现 数据结构--堆的C语言代码实现 文章目录 系列 ...

  3. 数据结构之链表(java语言实现)

    链表的底层储存结构: 相对于数组这一需要连续.足够大空间的数据结构,链表只需要利用"指针"将一组零碎的空间(在链表中称之为节点)串联起来,这样就可以避免在创建数组时一次性申请过大的 ...

  4. 数据结构——单循环链表的

    循环链表:循环链表是一个首尾相接的链表.将单链表最后一个结点的指针域由NULL改为指向表头结点,就得到了单链形式的循环链表,并称为循环单链表.同样还可以有多重链的循环链表. //定义结构体 typed ...

  5. 【数据结构】链表 - Go 语言实现

    文章目录 一.简介 二.最简单的链表 三.循环链表 1. 初始化循环链表 2. 创建一个指定大小 N 的循环链表,值全为空 3. 获取上一个或下一个节点 4. 获取第 n 个节点 5. 获取链表长度 ...

  6. 链表c语言代码题库排坐标,C语言讲义——链表完整代码

    #include #include #include struct Node { int _id; char s[50]; struct Node* pre;// 指向前一个节点的地址 struct ...

  7. 数据结构-循环队列(C语言代码)

    循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用.在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可 ...

  8. 数据结构-单链表基本操作-C语言代码

    单链表基本操作 1.头插法建立单链表 2.尾插法建立单链表 3.查找结点 3.修改结点 4.插入结点 5.删除结点 本篇只有c语言代码,具体思路讲解请看这篇博客:数据结构-线性结构-单链表 1.头插法 ...

  9. C语言数据结构篇——单循环链表的创建,插入,节点删除,打印等操作

     作者名:Demo不是emo  主页面链接:主页传送门 创作初心:对于计算机的学习者来说,初期的学习无疑是最迷茫和难以坚持的,中后期主要是经验和能力的提高,我也刚接触计算机1年,也在不断的探索,在CS ...

最新文章

  1. python 内置函数map的使用
  2. shell usage file
  3. 计算机无法开机按了f2,开机提示按f2 解决电脑开机时总是提示按F2 to continue的方法...
  4. MapReduce 作业调试
  5. java serializeutils_java序列化 SerializeUtil
  6. 绿洲因涉嫌抄袭下架;Facebook 泄露 4.19 亿条用户数据;Go 1.13 发布 | 极客头条...
  7. WCF服务编程 学习笔记(1)
  8. 字段不显示 继承_Springboot Shiro页面按钮显示、路径越权访问题
  9. RS报表从按月图表追溯到按日报表
  10. html自动get提交,html跳转,获取get提交参数
  11. matlab 单元数组输入,Matlab 单元数组
  12. 威联通(NAS)搭建个人音乐中心
  13. 过QQ游戏大厅的SX保护
  14. 解决用友固定资产出现的“不能月末结账,可能月末未结账”的处理办法
  15. 关于 类的常成员函数 声明和定义处 都需要加 const的原因
  16. 马踏棋盘问题(C++版)
  17. 自己动手搭建Fabric网络,修改当前工作目录名之后出现的错误
  18. 孫子に学ぶITマネジメント CIOの予算獲得編(1)勝ち方は体系化できる
  19. 【实训第一天】-开班仪式
  20. Linux安装围棋AI(q5go和katago)

热门文章

  1. 为什么batchnormalize 有效
  2. jetson nano 安装 onnx
  3. python date time
  4. 知识图谱学习笔记-非结构化数据处理
  5. 根据后续数组重建搜索二叉树
  6. AB测试:基础概念、应用场景及入门指南
  7. 一部手机失窃引发的惊心动魄的战争,你是个合格的程序猿吗?
  8. SQL 语句快速参考
  9. LeetCode-动态规划基础题-509. 斐波那契数
  10. QT中使用QCustomplot设置坐标原点在左上或者反转镜像坐标轴