/*************************************************************************

> File Name: JosephCirle.c

> Author: Wenfei6316

> Mail: wenfei6316@163.com

> Created Time: 2018年06月18日 星期一 09时42分28秒

************************************************************************/

/*约瑟夫环说明:N(N>1) 个人组成一圈,从第 num 个人开始报数(从 1 开始报数)

*当谁报到数字 count 时将执行枪决,然后继续从后面一位开始接着循环,

*直到最后只剩下一个人,利用单向循环链表模拟出每次被杀的人以及最后存活的人*/

#include

#include

#include

typedef enum{false, true}bool;

typedef int data_t;

typedef struct Node

{

data_t data;

struct Node *next;

}JosephNode, *JosephLise;

JosephLise CreateList(int num);

void PrintList(JosephLise cyclelist);

void KillGame(JosephLise cyclelist, int num, int killer);

int main(int argc, const char *argv[])

{

int count = 10;

int num = 8;

int killer = 15;

JosephLise josephcirle;

josephcirle = CreateList(count);

PrintList(josephcirle);

printf("%d is beginning!\n", num);

printf("Calling %d will be killed!\n", killer);

KillGame(josephcirle, num, killer);

return 0;

}

JosephLise CreateList(int num)

{

int i;

JosephLise p, q, s;

if (num < 2)

{

printf("It is insignificance!\n");

exit(EXIT_FAILURE);

}

p = (JosephLise)malloc(sizeof(JosephNode));

if (p == NULL)

{

perror("Create JosephCirle failed!\n");

exit(EXIT_FAILURE);

}

p->data = 1;

p->next = NULL;

q = p;

for (i=2; i<=num; i++)

{

s = (JosephLise)malloc(sizeof(JosephNode));

if (s == NULL)

{

perror("Create JosephCirle failed!\n");

exit(EXIT_FAILURE);

}

s->data = i;

q->next = s;

q = s;

}

q->next = p;

return p;

}

void PrintList(JosephLise cyclelist)

{

bool count = false;

JosephLise p, q;

if (cyclelist == NULL)

{

printf("cyclelist is NULL!\n");

return ;

}

p = cyclelist;

while (!count)

{

printf("%2d ", p->data);

if ((p=p->next) == cyclelist)

count = true;

}

printf("\n");

}

void KillGame(JosephLise cyclelist, int num, int killer)

{

int i;

JosephLise p, q;

if (cyclelist == NULL)

{

printf("Joseph Cirle is error!\n");

return ;

}

if (num<2 || killer<2)

{

printf("It is insignificance!\n");

return ;

}

p = cyclelist;

for (i=1; i

p = p->next;

while (p->next != p)

{

for (i=1; i

p = p->next;

q = p->next;

printf("%d is killed!\n", q->data);

p->next = q->next;

free(q);

q = NULL;

}

printf("Congratulations, you are free, No%d!\n", p->data);

free(p);

return ;

}

python约瑟夫环单向循环链表_约瑟夫环的单向循环链表的实现代码相关推荐

  1. 锁相环环路滤波器计算公式_锁相环计算方法.doc

    锁相环计算方法 2.理论分析计算与电路设计 2.1 锁相环 2.1.1 锁相环原理 为了使系统产生稳定的载波,本系统设计中采用锁相环路.锁相环路是一种反馈控制电路,将参考信号与输出信号之间的相位进行比 ...

  2. java约瑟夫环 循环链表_约瑟夫环_循环链表JAVA解答

    编写测试案例 public class Cicle { @Test public void test() { LinkedList linkedList = new LinkedList(); lin ...

  3. 锁相环环路滤波器计算公式_锁相环计算方法

    2.1.2 锁相环分频 锁相环分频由参考分频和可编程分频组成,由 MC145152 及 MC12022 实现. 分频框图如下: 图中 PD 为数字鉴相器, f o 为压控振荡的输出频率(即发射频率) ...

  4. 锁相环环路滤波器计算公式_锁相环PLL的电路原理以及基本构成

    锁相环 (phase locked loop),顾名思义,就是锁定相位的环路.学过自动控制原理的人都知道,这是一种典型的反馈控制电路,利用外部输入的参考信号控制环路内部振荡信号的频率和相位,实现输出信 ...

  5. python turtle绕原点旋转_分享给大家几段有趣的代码,学会python画画可以不用自己动手啦...

    前言 Python 是一门简单易学且功能强大的编程语言,无需繁琐的配置,掌握基本语法,了解基本库函数,就可以通过调用海量的现有工具包编写自己的程序,轻松实现批量自动化操作,可以极大提高办公和学习效率. ...

  6. 防火墙单向访问控制_防火墙TCP的单向控制

    网络拓扑: 如上图所示,防火墙分为external/internal/dmz三个安全zone,其中10.133.1.100/32为dmz区的一台squid缓存服务器,10.158.1.10/32,10 ...

  7. python 便利店收银系统_前端开发之便利店收银系统代码

    1+X前端初级JQ 社区便利店收银系统代码 4.5 15 5 addClick = (price) => { let result = $('#t').val(); //从表单里面获取value ...

  8. 《恋上数据结构第1季》单向循环链表、双向循环链表以及约瑟夫环问题

    循环链表(CircleList) 链表的接口设计 单向循环链表 单向循环链表完整源码 双向循环链表 双向循环链表完整源码 双向循环链表解决约瑟夫环问题 如何发挥循环链表的最大威力? 静态链表 数据结构 ...

  9. c语言约瑟夫环问题,C++_详解约瑟夫环问题及其相关的C语言算法实现,约瑟夫环问题 N个人围成一圈 - phpStudy...

    详解约瑟夫环问题及其相关的C语言算法实现 约瑟夫环问题 N个人围成一圈顺序编号,从1号开始按1.2.3......顺序报数,报p者退出圈外,其余的人再从1.2.3开始报数,报p的人再退出圈外,以此类推 ...

最新文章

  1. Aspose.words 书签定位
  2. csdn修改博客皮肤
  3. JavaScript MVC框架和语言总结[infoq]
  4. ElasticSearch _xpack用户管理
  5. 查看命令为内置命令还是外部命令
  6. mysql常用命令orderby_MySQL常用命令总结
  7. 如何使用 jMeter CSV Data Set config
  8. BZOJ3527:[ZJOI2014]力(FFT)
  9. 【python之路14】发送邮件实例
  10. vue.js踩坑之组件参数检验与非props特性
  11. Atom飞行手册翻译: 2.13 基本的自定义
  12. python开发环境有哪些特点_快速了解Python开发环境Spyder
  13. 华为交换机一次性进入多个接口_华为交换机交换机常用配置(认证、批量操作)...
  14. VS 和 Eclipse 的一些快捷键记录
  15. Matlab GUI编程技巧(四):m文件与simulink之间数据传递
  16. 杭州邮政编码一览表|杭州邮编|杭州邮编查询
  17. JVM(1.8)GC日志解析与分析
  18. 66个求职应聘技巧性问答(三)
  19. 欧洲上班族心碎:工作时网聊将无隐私可言
  20. 人活着系列之芳姐和她的猪

热门文章

  1. 硬件产品研发,除了电子元器件成本,还有什么成本?
  2. C语言指针,这可能是史上最干最全的讲解啦(附代码)!!!
  3. 关于使用两个GTP/GTX出现[DRC RTSTAT-1]error([route 35-54] critical warning)的问题详解
  4. 风变编程python助教_花30天时间,学完了风变编程Python基础语法课
  5. java 获取当前月份的第一天_JAVA获取本月的第一天和最后一天
  6. 中职高级计算机操作员,计算机操作员专业排行榜
  7. latex beamer 空一行_握草!一行Python代码写的游戏,我能这样玩一天
  8. mysql消息队列的原理_PHP和MySQL实现消息队列
  9. 手机版python3.6.6的requests库下载_Python爬虫之Python3.6 Requests库的基本使用方法
  10. 分块入门(根据hzwer的博客。。)(右端点是r不是n。。)