1.首先,我们先来了解一下什么是约瑟夫环问题:

讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投降做叛徒。一群人表决说要死,所以用一种策略来先后杀死所有人。 
于是约瑟夫建议:每次由其他两人一起杀死一个人,而被杀的人的先后顺序是由抽签决定的,约瑟夫有预谋地抽到了最后一签,在杀了除了他和剩余那个人之外的最后一人,他劝服了另外一个没死的人投降了罗马。

通俗来说就是:

按照如下规则去杀人:

  • 所有人围成一圈
  • 顺时针报数,每次报到3的人将被杀掉
  • 被杀掉的人将从房间内被移走
  • 然后从被杀掉的下一个人重新报数,继续报3,再清除,直到剩余一人

那么程序实现为:

  链表的定义: 定义为编号即可 所以data项为int

  

typedef struct NODE{
struct NODE *next;
int data;
}Node,*Linklist;

由于是循环,直到最后一个人, 所有可以使用特殊的链表: 循环链表。 当链表中只剩下一个元素后,便认为完事了。 即 L->next = L;

#include <stdio.h>
#include <stdlib.h>
#include "Linklist.h" void Print_Linklist(Linklist L)
{
Linklist head = L;
printf("List: ");
while(L->next != head)
{
printf("%d ",L->data);
L = L->next;
}
printf("%d ",L->data);
printf("\n");
} int main()
{
int i;
Linklist L;
Linklist head;
Linklist Out;
L = (Node*)malloc(sizeof(Node));
head = L;
L->data = ;
L->next = head;
for(i=;i<=;i++)
{
L->next=(Node*)malloc(sizeof(Node));
L->next->data = i;
L->next->next = head;
L = L->next;
}
Print_Linklist(head);
L = head;
while(L != L->next)
{
for(i=;i<;i++)
{
L = L->next;
}
Out = L->next;
printf("%2d号 ----> 自杀!\n",Out->data);
L ->next = Out->next;
L = L->next;
free(Out);
}
printf("幸存者是:%d",L->data);
return ;
}

【数据结构】约瑟夫问题 C语言链表实现的更多相关文章

  1. 数据结构与算法分析——C语言描述 第三章的单链表

    数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...

  2. 《数据结构与算法分析——C语言描述》ADT实现(NO.00) : 链表(Linked-List)

    开始学习数据结构,使用的教材是机械工业出版社的<数据结构与算法分析——C语言描述>,计划将书中的ADT用C语言实现一遍,记录于此.下面是第一个最简单的结构——链表. 链表(Linked-L ...

  3. c语言-链表VS数组

    数组和链表的区别   数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要 ...

  4. 数据结构与算法C语言实现笔记(1)--表

    声明:此一系列博客为阅读<数据结构与算法分析--C语言描述>(Mark Allen Weiss)笔记,部分内容参考自网络:转载请注明出处. 1.表 表是最简单的数据结构,是形如A1.A2. ...

  5. 数据结构算法集---C++语言实现

    //数据结构算法集---C++语言实现 //各种类都使用模版设计,可以对各种数据类型操作(整形,字符,浮点) /////////////////////////// // // // 堆栈数据结构 s ...

  6. C语言 链表

    原文:C语言 链表 最近在复习数据结构,想把数据结构里面涉及的都自己实现一下,完全是用C语言实现的. 自己编写的不是很好,大家可以参考,有错误希望帮忙指正,现在正处于编写阶段,一共将要实现19个功能. ...

  7. ZT C语言链表操作(新增单向链表的逆序建立)

    这个不好懂,不如看 转贴:C语言链表基本操作http://www.cnblogs.com/jeanschen/p/3542668.html ZT 链表逆序http://www.cnblogs.com/ ...

  8. [数据结构-线性表1.2] 链表与 LinkedList<T>(.NET 源码学习)

    [数据结构-线性表1.2] 链表与 LinkedList<T> [注:本篇文章源码内容较少,分析度较浅,请酌情选择阅读] 关键词:链表(数据结构)    C#中的链表(源码)    可空类 ...

  9. C语言链表操作模板(添加,删除,遍历,排序)

    C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...

随机推荐

  1. vue 父子组件之间传参

    父组件中有子组件 msg 为父组件向子组件传的内容,  子组件向父组件传参数 子组件:this.$emit("shownumber",[this.num]);//this.$emi ...

  2. spring-session-data-redis解决session共享的问题

    分布式系统要做到用户友好,需要对用户的session进行存储,存储的方式有以下几种: 本地缓存 数据库 文件 缓存服务器 可以看一些不同方案的优缺点 1.本地机器或者本地缓存.优点:速度快  缺点:服 ...

  3. DenseNet 论文阅读笔记

    Densely Connected Convolutional Networks 原文链接 摘要 研究表明,如果卷积网络在接近输入和接近输出地层之间包含较短地连接,那么,该网络可以显著地加深,变得更精 ...

  4. Django 学习笔记(一) --- Hello Django

    人生苦短 ~ Tips:仅适用于 Python 3+(反正差别不大,py2 改改也能用).因为据 Python 之父 Guido van Rossum 说会在 2020 年停止对 Python 2 的 ...

  5. Jenkins入门之界面概览

    安装完Jenkins后,打开浏览器,在浏览器地址栏内输入http://localhost:8080/ 便可以打开jenkins 基于web的管理界面(如果你在安装过程中修改了Jenkins默认端口,则 ...

  6. spring的第一天

    spring的第一天 ssm框架 spring  Spring是什么? Spring是容器框架,用来配置(装)Bean,并且维护Bean之间的关系.其中Bean可以是Java中的任何一种对象,可以是J ...

  7. [转]npm、 cnpm、yarn

    本文转自:https://blog.csdn.net/sinat_34682450/article/details/79473658 终于搞懂了三者之间的关系- 要知道三者之间的关系首先要了解三个包管 ...

  8. [转]Entity Framework and slow bulk INSERTs

    本文转自:https://weblog.west-wind.com/posts/2013/Dec/22/Entity-Framework-and-slow-bulk-INSERTs I’ve been ...

  9. 菜鸟入门【ASP.NET Core】2:部署到IIS

    配置IIS模块 ASP.NET Core Module载地址:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/asp ...

  10. WebFrom 小程序【条件查询】

    实现按照各种条件对数据库进行综合查询 基本功能:可以根据用户需要灵活查询 重难点:各种条件的可能.限制. public List<users> selectA( string str,Ha ...