数据结构-单循环链表(C语言代码)
数据结构纯属新手,小白一枚,欢迎批评指正!
下面这个图是接下来要实现的单循环链表!
直接上代码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语言代码)相关推荐
- 数据结构-单链表(C语言代码)
数据结构纯属新手,小白一枚,欢迎批评指正! 直接上代码OVO! 定义结构体 typedef struct Node {int data; //数据域struct Node* next; //指针域 } ...
- 数据结构——队列的C语言代码实现
系列文章目录 数据结构--顺序表的C语言代码实现 数据结构--八种链表的C语言代码实现 数据结构--栈的C语言代码实现 数据结构--队列的C语言代码实现 数据结构--堆的C语言代码实现 文章目录 系列 ...
- 数据结构之链表(java语言实现)
链表的底层储存结构: 相对于数组这一需要连续.足够大空间的数据结构,链表只需要利用"指针"将一组零碎的空间(在链表中称之为节点)串联起来,这样就可以避免在创建数组时一次性申请过大的 ...
- 数据结构——单循环链表的
循环链表:循环链表是一个首尾相接的链表.将单链表最后一个结点的指针域由NULL改为指向表头结点,就得到了单链形式的循环链表,并称为循环单链表.同样还可以有多重链的循环链表. //定义结构体 typed ...
- 【数据结构】链表 - Go 语言实现
文章目录 一.简介 二.最简单的链表 三.循环链表 1. 初始化循环链表 2. 创建一个指定大小 N 的循环链表,值全为空 3. 获取上一个或下一个节点 4. 获取第 n 个节点 5. 获取链表长度 ...
- 链表c语言代码题库排坐标,C语言讲义——链表完整代码
#include #include #include struct Node { int _id; char s[50]; struct Node* pre;// 指向前一个节点的地址 struct ...
- 数据结构-循环队列(C语言代码)
循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用.在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可 ...
- 数据结构-单链表基本操作-C语言代码
单链表基本操作 1.头插法建立单链表 2.尾插法建立单链表 3.查找结点 3.修改结点 4.插入结点 5.删除结点 本篇只有c语言代码,具体思路讲解请看这篇博客:数据结构-线性结构-单链表 1.头插法 ...
- C语言数据结构篇——单循环链表的创建,插入,节点删除,打印等操作
作者名:Demo不是emo 主页面链接:主页传送门 创作初心:对于计算机的学习者来说,初期的学习无疑是最迷茫和难以坚持的,中后期主要是经验和能力的提高,我也刚接触计算机1年,也在不断的探索,在CS ...
最新文章
- python 内置函数map的使用
- shell usage file
- 计算机无法开机按了f2,开机提示按f2 解决电脑开机时总是提示按F2 to continue的方法...
- MapReduce 作业调试
- java serializeutils_java序列化 SerializeUtil
- 绿洲因涉嫌抄袭下架;Facebook 泄露 4.19 亿条用户数据;Go 1.13 发布 | 极客头条...
- WCF服务编程 学习笔记(1)
- 字段不显示 继承_Springboot Shiro页面按钮显示、路径越权访问题
- RS报表从按月图表追溯到按日报表
- html自动get提交,html跳转,获取get提交参数
- matlab 单元数组输入,Matlab 单元数组
- 威联通(NAS)搭建个人音乐中心
- 过QQ游戏大厅的SX保护
- 解决用友固定资产出现的“不能月末结账,可能月末未结账”的处理办法
- 关于 类的常成员函数 声明和定义处 都需要加 const的原因
- 马踏棋盘问题(C++版)
- 自己动手搭建Fabric网络,修改当前工作目录名之后出现的错误
- 孫子に学ぶITマネジメント CIOの予算獲得編(1)勝ち方は体系化できる
- 【实训第一天】-开班仪式
- Linux安装围棋AI(q5go和katago)