约瑟夫问题的由来:

据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。看来功课学得好关键时刻可以救命啊!!! 哈哈。。。

简单实现了一个单链表以对约瑟夫问题的求解。

/*
循环链表:循环单链表
示例:约瑟夫环
*/
typedef struct LNode {int data; //数据域LNode *next; //指针域
}LNode,*LinkList;
/*
function:初始化约瑟夫环
*/
LinkList createLinkList(int n) {LNode *L = NULL;LNode *s;LNode *r = NULL;//尾指针if (n < 1) {return NULL;}//注释这行的目的是为了去除头结点,我们的数据节点从第一个开始//L = (LinkList)malloc(sizeof(LNode));//头结点//r = L;int j = 1;int x;scanf_s("%d", &x);while (j<=n){s = (LinkList)malloc(sizeof(LNode));s->data = x;if (L == NULL) {//初始化第一个节点L = r = s;}else{r->next = s;r = s;}if (j == n) {break;}j++;scanf_s("%d", &x);}//指向第一个节点,形成闭环r->next = L;return L;
}
/*
function:依次取出满足条件的数据
*/
void printData() {LNode *p =createLinkList(10);int j = 1;int k = 3;//约瑟夫环约定需要处理的节点标号while (p!=NULL){    //p = p->next;//获取下一个节点地址if (j == (k -1)) {//达到约瑟夫环的条件需要移除节点的前驱节点LNode *q = p->next;//需要移除的节点p->next = q->next;p = p->next;    //指针向前移动一个节点(从下一个节点开始)printf_s("%d \t", q->data);free(q);j == 1;}else{j++;}p = p->next;//获取下一个节点地址}
}void main() {printData();
}

以上为约瑟夫问题循环单链表的基本实现,帮助我们进一步熟悉循环单链表;我们还可以通过更高级的方式实现:递归,好吧,这就留给下次思考和实现了!

数据结构-循环单链表之约瑟夫问题相关推荐

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

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

  2. 循环单链表解决约瑟夫问题

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

  3. 数据结构-循环单链表之魔术师发牌问题

    问题描写叙述: 魔术师手中有A.2.3--J.Q.K十三张黑桃扑克牌.在表演魔术前,魔术师已经将他们依照一定的顺序叠放好(有花色的一面朝下).魔术表演过程为:一開始,魔术师数1,然后把最上面的那张牌翻 ...

  4. DHU数据结构-循环单链表-ADT应用-圆桌问题

    目录 1.题目 2.题解 3.代码实现 1.题目 圆桌问题 作者: 冯向阳 时间限制: 1S 章节: DS:数组和链表 问题描述 : 目的:使用C++模板设计循环链表的抽象数据类型(ADT).并在此基 ...

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

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

  6. 第四次博客:循环单链表解决约瑟夫环问题

    #include <stdio.h> #include <stdlib.h> typedef struct aa{  int data;  struct aa *next; } ...

  7. 【数据结构】线性表的链式表示-循环单链表、循环双链表、静态链表

    循环单链表 从任何一个结点出发都能访问到链表的每一个元素 判空条件不是头节点的后继指针是否为空,而是它是否等于头指针 有时对单链表常做的操作实在表头和表尾进行的,此时可对循环单链表不设头指针而仅设尾指 ...

  8. 约瑟夫环问题---循环单链表

    约瑟夫环问题是比较经典的问题,原来做的题目是依次输出数字,而原来的循环链表结构不改变,今天遇到一道题是要求按照顺序重新组成一个循环单链表. 题目:一些人围坐一圈报数,形成一个循环单链表,当报数是m或m ...

  9. 【数据结构】循环单链表的实现(C语言)

    循环单链表应掌握以下基本操作: 1.建立一个空的循环单链表. 2.获得循环单链表的最后一个结点的位置. 3.输出循环单链表中各结点的值. 4.在循环单链表中查找值为x的结点. 5.在循环单链表中第i个 ...

最新文章

  1. java.sql.SQLException: Zero date value prohibited 报错分析
  2. buuctf(misc) FLAG [LSB隐写]
  3. GDCM:gdcm::VL 的测试程序
  4. python 基本数据类型常用方法总结
  5. WWDC 2013 Session笔记 - iOS7中弹簧式列表的制作
  6. 【Hadoop】HDFS Short Circuit Local Reads(HDFS短路读取)
  7. Java的HttpClient类以POST方式提交数据,目标端收到后中文乱码
  8. linux 空闲物理内存 很少,linux系统free查看内存,发现可用物理内存很少,但是查看进程却发现没进程占用大内存...
  9. 01_kubernetes初始化系统和全局变量
  10. 如何选择VC界面库产品?(二)– DSkinLite界面库介绍
  11. mysql统计分组求和
  12. 必看,关于sql的慢查询及解决方案
  13. 三循环流水灯电路的原理
  14. 谷歌面试题之扔鸡蛋的问题(蓝桥杯摔手机的问题)
  15. synchronized对象锁的同步和异步问题
  16. 新导智能的融合物联一体化管理平台应用案例
  17. 如何使用iTerm2+oh-my-zsh+Dracula美化你的MAC终端
  18. 二分图(三)——KM算法
  19. tcpreplay 流量拆分算法研究
  20. 安卓开发资料大集合,很多都是51CTO中的推荐材料,值得学习

热门文章

  1. No architectures to compile for (ONLY_ACTIVE_ARCH=YES, active arch=armv7s, VALID_ARCHS=armv7 armv6)
  2. 方法重载,new,override
  3. apache Storm学习之二-基本概念介绍
  4. (转)Oracle 临时表用法
  5. [Hyper-V]在Windows 8.1 操作系统中启用Hyper-V功能
  6. 从情报分析的高度来看APT***
  7. Windows7虚拟化体验之一:Windows7部署
  8. java公寓管理系统设计与实现_宿舍管理系统设计与实现
  9. 利用逆矩阵解线性方程组_机器人学导论---第四章 操作臂逆运动学(一)4.1-4.11...
  10. oryx-editor 客户端的加载过程