<数据结构与算法>单向循环链表基本框架(C语言描述)
来源:互联网 发布:php完全自学手册出版地 编辑:程序博客网 时间:2024/05/16 09:37
/**单向循环链表基本框架*作者:wsg*2017年8月28日*/#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//颜色控制#define BGC_RED "\033[41m"#define BGC_GREEN "\033[42m"#define EPT_COL "\033[0m"typedef int datatype;//单向循环链表的结构体typedef struct node{datatype data; //数据struct node *next; //后趋指针}singly_linked_circle_list, *slc_list;//1.初始化,创建只含指针的头结点slc_list init_list(void){ slc_list mylist = malloc(sizeof(struct node)); if(mylist != NULL) { //指针指向自己 mylist->next = mylist; } return mylist;}//2.判断链表是否为空bool is_empty(slc_list mylist){return mylist->next == mylist;}//3.新建节点slc_list creat_node(datatype data){slc_list new_node = malloc(sizeof(struct node));if(new_node != NULL){new_node->data = data;new_node->next = NULL;}return new_node;}//4.插入节点void insert_node(slc_list head, slc_list new){slc_list p = head;if(new == NULL){return;}while(p->next != head){p = p->next;}new->next = head;p->next = new;printf(""BGC_GREEN"%d插入成功!"EPT_COL"\n", new->data);}//5.遍历链表void display_node(slc_list head){if(is_empty(head)){printf(""BGC_RED"链表为空!"EPT_COL"\n");return;}slc_list p = head;while(p->next != head){p = p->next;printf("%d\t", p->data);}printf("\n");}//5.查找节点void find_node(slc_list head, datatype data){if(is_empty(head)){printf(""BGC_RED"链表为空!"EPT_COL"\n");return;}slc_list p = head; //从头结点开始查找while(p->next != head) //for(p = head; p->next != NULL; p = p->next){if(p->next->data == data){printf(""BGC_GREEN"找到了!该节点数据为:%d"EPT_COL"\n", p->next->data);return;}/* else{p = p->next;} */p = p->next; }printf(""BGC_RED"找不到数据为%d这个节点!"EPT_COL"\n", data);}//6.删除节点void delete_node(slc_list head, datatype data){//先判断链表是否为空,是空链表就退出此函数if(is_empty(head)){printf(""BGC_RED"链表为空!"EPT_COL"\n");return;}slc_list p = head; //从头节点开始查找while(p->next != head){if(p->next->data == data){slc_list q = p->next;p->next = q->next;q->next = NULL;free(q); //将q所占空间释放掉printf(""BGC_GREEN"节点为%d的节点删除成功!"EPT_COL"\n", data);return;}p = p->next;}printf(""BGC_RED"链表中无数据为%d的节点!"EPT_COL"\n", data);}//7.修改节点中的数据void modify(slc_list head, datatype data){//先判断链表是否为空,是空链表就退出此函数if(is_empty(head)){printf(""BGC_RED"链表为空!"EPT_COL"\n");return;}slc_list p = head; //从头节点开始查找while(p->next != head){if(p->next->data == data){printf("将数据%d修改为(请输入):", data);datatype tmp;scanf("%d", &tmp);p->next->data = tmp;printf(""BGC_GREEN"修改成功!"EPT_COL"\n");return;}p = p->next;}printf(""BGC_RED"找不到数据为%d的节点!"EPT_COL"\n", data);}//8.清空链表(就是一个一个节点的删除)void clear_list(slc_list head){if(is_empty(head)){printf(""BGC_RED"链表为空!"EPT_COL"\n");return;}slc_list p = head; //从头节点开始删除while(p->next != head){slc_list q = p->next;p->next = q->next;q->next = NULL;free(q); //将q所占空间释放掉}printf("已清空!\n");}int main(int argc, char *argv[]){//1.初始化链表slc_list mylist = init_list();//2.新建节点slc_list new = creat_node(1);//3.插入节点insert_node(mylist, new);new = creat_node(2);insert_node(mylist, new);new = creat_node(3);insert_node(mylist, new);new = creat_node(4);insert_node(mylist, new);new = creat_node(5);insert_node(mylist, new);//4.遍历显示display_node(mylist);//5.查找结点find_node(mylist, 1);find_node(mylist, 0);//6.删除节点delete_node(mylist, 5);delete_node(mylist, 0);//删除之后遍历display_node(mylist);//7.修改节点数据modify(mylist, 4);modify(mylist, 0);//修改之后遍历查看display_node(mylist);//8.清空链表clear_list(mylist);//清空之后查看display_node(mylist);return 0;}
阅读全文
0 0
- <数据结构与算法>单向循环链表基本框架(C语言描述)
- <数据结构与算法>双向循环链表的全面基本框架(C语言描述)
- 算法与数据结构-单向链表的基本操作C语言实现
- 数据结构与算法Javascript描述(五)循环链表
- c语言_数据结构_单向循环链表
- c语言数据结构之单向循环链表约瑟夫问题
- 数据结构——c语言描述 第二章(2) 单向链表
- <数据结构与算法>二叉搜索树(BST)的基本操作(C语言描述)
- C++数据结构与算法——单向循环链表
- 数据结构——单向链表的基本操作C语言描述(克服对头结点和尾结点的操作)
- 数据结构(C语言)-单向链表
- 数据结构与算法(C语言描述)——双向链表
- 读《算法与数据结构---c语言描述》
- 数据结构与算法分析(C语言描述)L1.1
- 数据结构与算法(C语言描述)——单链表
- 数据结构与算法(单向链表)
- C语言基础—数据结构之单向循环链表和双向循环链表
- 数据结构(C++)——单向循环链表
- python中double转化成float32
- RabbitMQ的几种典型使用场景
- CSS实现单行、多行文本溢出时显示省略号
- 洛谷P2723 丑数 Humble Numbers
- Ignite缓存持久化例子
- <数据结构与算法>单向循环链表基本框架(C语言描述)
- 【帝国CMS】排行榜调用标签(24小时排行、本周排行、本月排行)
- 动态规划算法
- SIGIR 2017 Paper Characterizing and Predicting Enterprise Email Reply Behavior
- git
- 2017年8月28日22:46:43
- Expect ssh免秘钥登入自动脚本(ssh-copy-id、expect免交互输入脚本)
- 01_SpringMVC流程架构图
- 常用的各种网络协议概念关系整理