单向循环链表的简单实现
单向链表结构图示:(以下示意图均摘自 来源: http://blog.csdn.net/fisherwan/ar )
#include <stdlib.h>
#include <stdio.h>
typedef struct circle_list
{int date;struct circle_list *next;}list;//节点创建函数
list *creat_node()
{//创建头节点list *newnode = (list *)malloc(sizeof(struct circle_list));if(newnode == NULL){printf("创建头结点失败!\n");}else{newnode->next=NULL;return newnode;}}//插入数据到链表中
int insert_list(list *head)
{//创建节点int val;printf("请输入要插入的元素:");scanf("%d",&val);list *newnode = creat_node();newnode->date = val;//判断头节点是否为NULLif(head != NULL){//遍历头节点,中间变量Plist *p = head;//遍历头节点到,最后一个数据while(p->next != head ){//错误,这样会改变头节的位置,必须使用中间变量进行变量// head = head->next;p = p->next;}//把最后一个节点赋新的节点过去p->next = newnode;newnode->next = head;return 1;}else{printf("head is NULL\n");return 0;}
}//遍历链表中的数据
int display(list *head)
{if(head != NULL){//遍历头节点,中间变量Plist *p = head;//遍历头节点到,最后一个数据while(p->next != head ){//错误,这样会改变头节的位置,必须使用中间变量进行变量// head = head->next;printf("%d ",p->next->date);p = p->next;}//把最后一个节点赋新的节点过去return 1;}else{printf("头结点为空!\n");return 0;}
}int delete_list(list *head)
{if(head == NULL){printf("链表为空!\n");return 0;}list *temp = head;list *ptr = head->next;int del;printf("请输入你要删除的元素:");scanf("%d",&del);while(ptr != head){if(ptr->date == del){if(ptr->next == head)//循环结束的条件换成ptr->next == head{temp->next = head;free(ptr);return 1;}temp->next = ptr->next;free(ptr);//printf("元素删除成功!\n");return 1;}temp = temp->next;ptr = ptr->next;}printf("没有找到要删除的元素%d\n",del);return 0;
}int update_list(list *head)
{if(head == NULL){printf("链表为空!\n");return 0;}list *temp = head;int olddate,newdate;printf("请输入要修改的元素:");scanf("%d",&olddate);printf("修改为:");scanf("%d",&newdate);while(temp->next != head){if(temp->next->date == olddate){temp->next->date = newdate;return 1;}temp = temp->next;}printf("没有找到要修改的元素!\n");return 0;
}int seek_list(list*head)
{if(head == NULL){printf("链表为空!\n");return 0;}int val,i=0;printf("请输入要查找的元素:");scanf("%d",&val);list *p = head;while(p->next != head){i++;if(p->next->date == val){printf("找到元素%d,位置在%d\n",val,i);}p = p->next;}printf("没有找到该元素!\n");return 0;
}void menu()
{system("cls");//清屏printf("\t\t|===============================================|\t\t\n");printf("\t\t|==================单向循环操作=================|\t\t\n");printf("\t\t|===================1.插入元素==================|\t\t\n");printf("\t\t|===================2.打印链表==================|\t\t\n");printf("\t\t|===================3.删除元素==================|\t\t\n");printf("\t\t|===================4.修改链表==================|\t\t\n");printf("\t\t|===================5.查找元素==================|\t\t\n");printf("\t\t|==请输入对应的数字执行对应的功能!(输入0退出)==|\t\t\n");printf("\t\t|====== 作者:RXX 时间:2017/07/06 ======|\t\t\n");printf("\t\t|===============================================|\t\t\n");
}
int main()
{//创建头节点list *head = creat_node();//让头字节自我循环head->next = head;int num;menu();scanf("%d",&num);//插入节点while(num){switch(num){case 1:{printf("插入元素操作:\n");if(insert_list(head))printf("插入节点成功!\n");elseprintf("插入节点失败!\n");break;}case 2:{printf("打印链表操作:\n");display(head);break;}case 3:{if(delete_list(head))printf("删除节点成功!\n");break;}case 4:{if(update_list(head))printf("修改元素成功!\n");break;}case 5:{if(seek_list(head))printf("查找元素成功!\n");break;}}getch();menu();scanf("%d",&num);//清空缓存区//while(getchar()!='\n');}printf("\t\t|================感谢使用!再见!===============|\t\t\n");return 0;
}
运行界面:
单向循环链表的简单实现相关推荐
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
http://blog.csdn.net/fisherwan/article/details/19754585 昨天写了单向链表的代码,今天上午把单向循环链表的程序给敲完了.链表的相关操作一样的,包含 ...
- python之链表、单链表、双向链表、单向循环链表
python之链表.单链表.双向链表.单向循环链表 链表 顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所以使用起来并非很灵活 链表结构可以充分利用计算机 ...
- 线性表—单向循环链表
开始没看单向循环链表,感觉应该很简单,但实际上有几个概念不是很清楚: 头结点,头指针,尾指针,尾节点??? [个人理解]:头结点就是一个链表中实际存储数据的那个节点的前一个节点,这个节点不存储数据,只 ...
- Algorithms_基础数据结构(04)_线性表之链表_单向循环链表约瑟夫环问题
文章目录 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 约瑟夫问题 结构 分析 大纲图 链表的经典面试题目 如何设计一个LRU缓存淘汰算法 tip:单向链表 约瑟夫问题 N个人围成一圈, ...
- 【数据结构与算法】之单向循环链表的创建/遍历/插⼊/查找/删除算法实现
一.单向循环链表简介 单向循环链表是一个收尾相接的链表,将单链表的最后一个指针域改由NULL改为指向表头结点这就是单链式的循环链表,并称为循环单链表. 带头结点的循环单链表的各种操作的算法实现与带头结 ...
- Python实现单向循环链表
Python实现单向循环链表 关于链表的介绍,请参考:https://blog.csdn.net/weixin_43790276/article/details/104033254 本篇文章使用 Py ...
- 链表——单链表、单向循环链表、双向链表
目录 1 单链表 节点实现 单链表操作 单链表实现 测试 链表与顺序表对比 2 单向循环链表 操作 实现 测试 3 双向链表 操作 实现 测试 1 单链表 单向链表也叫单链表,是链表中最简单的一种形式 ...
- c语言循环链表约瑟夫问题的时间复杂度,用单向循环链表解决约瑟夫问题算法优劣性分析.doc...
用单向循环链表解决约瑟夫问题算法优劣性分析 用单向循环链表解决约瑟夫问题算法优劣性分析 摘要: 首先由简单问题引入约瑟夫问题,然后用单向循环链表解决约瑟夫问题,最后对模拟方法及数学方法的优劣性进行分析 ...
- Java 单向链表和单向循环链表的代码实现
这个链表,以前上学的时候,学c语言,还是数据结构的时候,学过.也许也实现过吧.下面我就简单记录下这个链表的实现. 单向链表跟单向循环链表的差别就是:单向链表是有结束位的,指向null的时候,就到结尾了 ...
最新文章
- 超级 App 手机百度云端架构设计与个性化推荐
- 宏基因组公众号创立初衷及如何注册一个名字好记的公众号
- python的工资为什么这么低-Python为什么这么火 Python岗位薪资水平如何
- alert()的功能_功能强大的Flutter 视频播放插件
- 跨平台导PDF,结合wkhtmltopdf很顺手
- SpringMVC实现RESTful风格
- kafka shutdown停止关闭很慢问题的解决方案
- 在DOS中使用系统还原工具
- Java LP1_Java Performance 总结(1. Class Loader)
- FPGA SPI协议
- Arcgis重分类无法赋新值为小数
- 阿里巴巴java方向笔试题 带详细答案
- Houdini学习笔记
- oracle报内存不足,oracle 内存不足处理
- 2021-07-19支付宝扫码点餐推广怎么做(干货来了)
- ADSL自动更换IP的方法
- 数值微分 python代码实现
- 【AcWing 327. 玉米田】状压dp
- 关于虚拟机VMware中打开Ubuntu20.04提示AMD-V处于禁用状态解决办法(基于MSI微星主板)
- IOS开发之免费证书+不越狱真机调试