首先我是设置的链表节点的元素包括三个: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语言)相关推荐

  1. 【Java】单循环链表解决约瑟夫环问题

    问题描述 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自 ...

  2. 【数据结构作业—01】用单循环链表解决约瑟夫问题

    实验作业一:线性表(链表) 1. 用单循环链表解决约瑟夫问题. 问题描述: 一个旅行社要从n个旅客中选出一名旅客,为他提供免费的环球旅行服务.旅行社安排这些旅客围成一个圆圈,从帽子中取出一张纸条,用上 ...

  3. 用链表实现约瑟夫环(没用)

    用链表实现约瑟夫环 Description 你听说过约瑟夫问题吗?问题大致如下:首先n个人围成一个圈,标记为1到n号.接着,从1号开始报数(从1开始),然后2号报数,然后3号...当有人报到到m时,这 ...

  4. 单链表实现约瑟夫环问题

    经典的约瑟夫环问题,用单链表实现竟然这么简单!? 目录 前言 问题 思路 代码 前言 这两天想到了之前自己用数组实现约瑟夫环问题时写了好多的代码,然后想到数据结构中的但链表好像也可以实现,于是去实践了 ...

  5. 约瑟夫问题C语言加注释,用链表实现约瑟夫环【有注释,有很多注释】

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 主要问题在于删除约瑟夫环的数,结果一直出不来,看了好几天改了好几次都改不对 #include #include typedef struct ysf { ...

  6. c语言循环单链表实现约瑟夫环问题

    题目: 约瑟夫(Joeph)问题的一种描述是:编号为1,2,-,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数上限值max,从第一个人开始按顺时针方向自1开始 ...

  7. 单链表实现约瑟夫环(JosephCircle)(C语言)

    //使链表形成一个环 void FormCyc(PSListNode *pHead) {if (NULL == pHead){return;}else{PSListNode pNode = *pHea ...

  8. java 单链表约瑟夫环_java循环单链表实现约瑟夫环问题

    package SingleLinkList; //节点类 class Node{ private int data; private Node next; public int getData() ...

  9. python约瑟夫环_Python语言之如何实现约瑟夫环问题

    本文Python语言实例讲述了Python实现约瑟夫环问题的方法.分享给大家供大家参考,希望对大家学习Python语言有所帮助,具体如下: 题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0 ...

最新文章

  1. boost::spirit模块实现逗号分隔的数字列表的解析器的测试程序
  2. 数据结构(五)---栈的链式存储的实现---java版
  3. 陕西师范大学 渝粤教育 《学前儿童数学教育》作业
  4. linux的基础知识——TCP异常断开
  5. linux vg备份还原,Oracle Linux 6.4 误删VG之恢复过程
  6. $(document).ready
  7. matlab GUI学习笔记4 如何添加并设置下拉菜单以及GUI解决不用直接用load的问题
  8. Win10(21h2)十一代i7,HUD750,打驱动一直重启
  9. (18)python字符串的使用
  10. 程序员转行为什么这么难
  11. 董卫凤:不服输是成功最好的催化剂
  12. 语音、图像和视频数据的格式
  13. 御坂御坂题解(出自北航校赛) 约瑟夫环问题高效解决方案
  14. 广发证券电脑linux,广发证券易淘金电脑PC官方版
  15. 取消超时订单及延迟处理方案
  16. codeforces 14E. Camels(多维dp)
  17. android强制选择器,谷歌手软了:不再强制在Android Q采用隔离存储沙盒机制
  18. 子网掩码和IP地址的关系
  19. c# 全选快捷键等类似事件
  20. UltraEdit常见问题及解决教程

热门文章

  1. tiny4412 裸机程序 一、说明【转】
  2. erp登入显示查找服务器地址,erp软件服务器地址在哪查
  3. C盘垃圾文件清理方法
  4. 3600000毫秒等于多少小时_科学家解密!你知道月球上一天等于地球上多久吗?...
  5. 论文阅读笔记(11)--- Attention is all you need(Transformer)逐段精读
  6. for,while,do...while循环语句的基本知识
  7. springboot+jsp健身房教练课程预约管理系统
  8. 车削加工出现振刀打刀现象,咋处理呢?
  9. python安装第三方库 找不到、匹配不到库的问题(多目标优化)
  10. eLife(IF:8.713)发表武汉大学逯杨/苏畅团队白念珠菌半乳糖代谢信号通路分子机制