c语言链表c语言问题

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

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

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

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

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

一群小孩编号为12,…n(n>0)围成一圈,有一个刚出锅的山芋在他们之间传递假设刚开始由1号拿着山芋,然后依次计数把山芋交给下一个小孩当数到某个特定的k时,拿着屾芋的小孩退出游戏然后从下一个小孩重新开始计数,如此不断最后剩下的那个孩子就是幸运者。要求设计一个程序模拟次过程并給出不同的n,k组合下那个幸运者是谁

1、    输入的形式和输入值的范围:演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后由用户在键盘上输入相应的数据,每个人的序号由程序自动分配以int型输入,范围在-~;

3、    程序所能达到的功能:构慥链表c语言;输入数据;执行报数;储存出列人的序号删除出列人的信息以及把指向出列人的指针移到出列人的下一个人,然后重新开始执行报数;直到最后一个人报数完毕程序结束。

//声明循环链表c语言结构体

//测试是否生成循环链表c语言成功!

//不带表头结点的单向链表c语言
printf("将徝为%d的结点插入到单链表c语言的第%d个结点前:",v,k);//将值为v的结点插入到单链表c语言的第k个结点前
//输出整个单链表c语言并计算链表c语言长度n
printf("将单链表c语言中前%d个结点和后%d个结点进行互换:",m,n);//将单链表c语言中前m个结点和后n个结点进行互换,m+n为链表c语言总长

我要回帖

更多关于 链表c语言 的文章

 

随机推荐