用单循环链表实现约瑟夫环(c语言)
首先我是设置的链表节点的元素包括三个:1.每个人的各自拥有的顺序(math表示)2.每个人所拥有的密码(data表示)3.指针元素指向下一个:
typedef struct node {int math; //math为人的顺序// int data; //data为人所带的密码// struct node *next; } node,*Linklist;
然后初始话是直接用的双重指针传入的函数体,当然返回值就是void了:
void Initlist(Linklist *L) { //初始化// (*L)=(Linklist)malloc(sizeof(node));(*L)->next=(*L); }
然后就是创建单循环链表,这里也是引用的双重指针(比较省事),正常的链表写法,n是人数多少:
void created(Linklist *L,int n) { //创建单循环链表// node *s,*r;r=*L;int i;while(n--) {s=(Linklist)malloc(sizeof(node));printf("请输入元素位置和密码:");scanf("%d%d",&s->math,&s->data);r->next=s;r=s;}r->next=(*L)->next; //让尾节点指向首元节点// }
下来就是最重要的链表处理环节,这里的话我是重新申请了两个节点(一个是后继节点,一个是普通节点),这里传入的是一重指针L和人数大小n,定义了m是第一个初始密码,第一个for循环就是找密码结束的哪个点的位置,后面的处理直接看图比较清晰:
void print(Linklist L,int n) {Linklist p,r; int m; //第一个开始密码// p=L; //指向头节点//r=L->next; //后驱节点// printf("请输入第一个密码:");scanf("%d",&m);printf("出列顺序:");while (n--){for (int j = 1; j < m ; j++) //循环m-1次后后继节点就是要删除的节点!!// {p = r; r = r->next;}printf("%2d", r->math); //后驱结点法只能输出后驱节点的math// p->next = r->next; //让后驱节点轮空// m = r->data; //将出列的玩家的密码设为新的密码//free(r); //释放要删除的节点// r = p->next; //重新给r节点赋值为p的前驱// } }
最后附上整个代码:
#include<stdio.h> #include<stdlib.h> typedef struct node {int math; //math为人的顺序// int data; //data为人所带的密码// struct node *next; } node,*Linklist; void Initlist(Linklist *L) { //初始化// (*L)=(Linklist)malloc(sizeof(node));(*L)->next=(*L); } void created(Linklist *L,int n) { //创建单循环链表// node *s,*r;r=*L;int i;while(n--) {s=(Linklist)malloc(sizeof(node));printf("请输入元素位置和密码:");scanf("%d%d",&s->math,&s->data);r->next=s;r=s;}r->next=(*L)->next; //让尾节点指向首元节点// } void print(Linklist L,int n) {Linklist p,r;int m; //第一个开始密码// p=L;r=L->next; //后驱节点// printf("请输入第一个密码:");scanf("%d",&m);printf("出列顺序:");while (n--){for (int j = 1; j < m ; j++) //循环m-1次后后继节点就是要删除的节点!!// {p = r; r = r->next;}printf("%2d", r->math); //后驱结点法只能输出后驱节点的math// p->next = r->next; //让后驱节点轮空// m = r->data; //将出列的玩家的密码设为新的密码//free(r); //释放要删除的节点// r = p->next; //重新给r节点赋值为p的前驱// } } int main() {int n;Linklist L;Initlist(&L);printf("请输入人数大小:");scanf("%d",&n);created(&L,n);print(L,n);return 0; }
后面加一张运行结果:
这里的话是7个人,从前往后每个人携带的密码分别为:3.1.7.2.4.8.4。
第一个开始密码是:20
用单循环链表实现约瑟夫环(c语言)相关推荐
- 【Java】单循环链表解决约瑟夫环问题
问题描述 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自 ...
- 【数据结构作业—01】用单循环链表解决约瑟夫问题
实验作业一:线性表(链表) 1. 用单循环链表解决约瑟夫问题. 问题描述: 一个旅行社要从n个旅客中选出一名旅客,为他提供免费的环球旅行服务.旅行社安排这些旅客围成一个圆圈,从帽子中取出一张纸条,用上 ...
- 用链表实现约瑟夫环(没用)
用链表实现约瑟夫环 Description 你听说过约瑟夫问题吗?问题大致如下:首先n个人围成一个圈,标记为1到n号.接着,从1号开始报数(从1开始),然后2号报数,然后3号...当有人报到到m时,这 ...
- 单链表实现约瑟夫环问题
经典的约瑟夫环问题,用单链表实现竟然这么简单!? 目录 前言 问题 思路 代码 前言 这两天想到了之前自己用数组实现约瑟夫环问题时写了好多的代码,然后想到数据结构中的但链表好像也可以实现,于是去实践了 ...
- 约瑟夫问题C语言加注释,用链表实现约瑟夫环【有注释,有很多注释】
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 主要问题在于删除约瑟夫环的数,结果一直出不来,看了好几天改了好几次都改不对 #include #include typedef struct ysf { ...
- c语言循环单链表实现约瑟夫环问题
题目: 约瑟夫(Joeph)问题的一种描述是:编号为1,2,-,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值max,从第一个人开始按顺时针方向自1开始 ...
- 单链表实现约瑟夫环(JosephCircle)(C语言)
//使链表形成一个环 void FormCyc(PSListNode *pHead) {if (NULL == pHead){return;}else{PSListNode pNode = *pHea ...
- java 单链表约瑟夫环_java循环单链表实现约瑟夫环问题
package SingleLinkList; //节点类 class Node{ private int data; private Node next; public int getData() ...
- python约瑟夫环_Python语言之如何实现约瑟夫环问题
本文Python语言实例讲述了Python实现约瑟夫环问题的方法.分享给大家供大家参考,希望对大家学习Python语言有所帮助,具体如下: 题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0 ...
最新文章
- boost::spirit模块实现逗号分隔的数字列表的解析器的测试程序
- 数据结构(五)---栈的链式存储的实现---java版
- 陕西师范大学 渝粤教育 《学前儿童数学教育》作业
- linux的基础知识——TCP异常断开
- linux vg备份还原,Oracle Linux 6.4 误删VG之恢复过程
- $(document).ready
- matlab GUI学习笔记4 如何添加并设置下拉菜单以及GUI解决不用直接用load的问题
- Win10(21h2)十一代i7,HUD750,打驱动一直重启
- (18)python字符串的使用
- 程序员转行为什么这么难
- 董卫凤:不服输是成功最好的催化剂
- 语音、图像和视频数据的格式
- 御坂御坂题解(出自北航校赛) 约瑟夫环问题高效解决方案
- 广发证券电脑linux,广发证券易淘金电脑PC官方版
- 取消超时订单及延迟处理方案
- codeforces 14E. Camels(多维dp)
- android强制选择器,谷歌手软了:不再强制在Android Q采用隔离存储沙盒机制
- 子网掩码和IP地址的关系
- c# 全选快捷键等类似事件
- UltraEdit常见问题及解决教程
热门文章
- tiny4412 裸机程序 一、说明【转】
- erp登入显示查找服务器地址,erp软件服务器地址在哪查
- C盘垃圾文件清理方法
- 3600000毫秒等于多少小时_科学家解密!你知道月球上一天等于地球上多久吗?...
- 论文阅读笔记(11)--- Attention is all you need(Transformer)逐段精读
- for,while,do...while循环语句的基本知识
- springboot+jsp健身房教练课程预约管理系统
- 车削加工出现振刀打刀现象,咋处理呢?
- python安装第三方库 找不到、匹配不到库的问题(多目标优化)
- eLife(IF:8.713)发表武汉大学逯杨/苏畅团队白念珠菌半乳糖代谢信号通路分子机制