
数据结构——循环链表
发布日期:2021-05-07 23:08:09
浏览次数:20
分类:精选文章
本文共 1647 字,大约阅读时间需要 5 分钟。
对于循环链表,我是通过一道例题来学习的:
约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 还是顺时针开始报数,数到 m 的那个人又出列;依次重复下去,要求找到最后出列的那个人。 当然,我们可以用数学知识来求解,通过找规律什么的应该是可以解的,但是我觉得咱写代码的应该对自己好点,比较头发不好保养,还是让计算机来解决这个问题吧~ 我们可以很明确的知道这里我们需要用到循环来解决问题。那么循环链表就可以在这里出场了:循环链表其实很好理解,就是将之前的链表头尾相连。其他的地方和循环链表几乎一模一样~ 接下来就是将这个题目的代码整理出来给大家了:#include#include typedef struct node{ int number; struct node *next;}person;/*初始化循环列表*/person *initLink(int n){ person *head = (person *)malloc(sizeof(person)); head->number = 1; head->next = NULL; person *cyclic = head; /*head作为头指针,不能移动,不然咱也就找不到这个链表了, 所以这个时候我们申请一个新的cyclic来往下遍历创建新的结点*/ int i; for(i = 2; i <= n; i++){ /*用body创立新的结点*/ person *body = (person *)malloc(sizeof(person)); body->number = i; body->next = NULL; cyclic->next = body;//将前后的结点连接起来 cyclic = cyclic->next; } cyclic->next = head; return head;} void findAddKillK(person *head, int k, int m){ person *tail = head; /*找到链表的结尾*/ while(tail->next != head){ tail = tail->next; } /*用p来找到我们的起点*/ person *p = head; while( p->number != k){ tail = p; p = p->next; } /*找到我们需要删除的结点*/ while(p->next != p){ int i; for( i = 1; i < m; i++){ tail = p; p = p->next; } //此时的p指向我们需要删除的结点 tail->next = p->next; //将p的前一个结点连向它的后一个结点 printf("出列表的人为%d", p->number); free(p); //释放空间 p = tail->next; } printf("出列表的人为%d", p->number); free(p); //最后将自己给释放 }int main(){ int n,m,k; printf("圆桌上共有:" ); scanf("%d", &n); person * head = initLink(n); printf("从第k人开始报数:"); scanf("%d", &k); printf("数到m个人出列:"); scanf("%d", &m); findAddKillK(head, k, m);}
我是不会说我犯错居然把取地址符曾经漏了,找不到错差点崩溃的~
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年03月21日 10时12分56秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
springmvc Controller详解
2021-05-09
mybatis #{}和${}区别
2021-05-09
Java Objects工具类重点方法使用
2021-05-09
Java内存模型(JMM)
2021-05-09
AQS相关
2021-05-09
abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)
2021-05-09
WCF学习之旅—第三个示例之一(二十七)
2021-05-09
java ThreadPoolExecutor初探
2021-05-09
Markdown进阶
2021-05-09
快速指数算法
2021-05-09
python去除字符串中的特殊字符(爬虫存储数据时会遇到不能作为文件名的字符串)
2021-05-09
PHP将网址快捷方式保存到桌面
2021-05-09
SpringCloud微服务(03):Hystrix组件,实现服务熔断
2021-05-09
Spring 框架基础(01):核心组件总结,基础环境搭建
2021-05-09
JavaEE基础(02):Servlet核心API用法详解
2021-05-09
SpringBoot2 整合Nacos组件,环境搭建和入门案例详解
2021-05-09