博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
循环链表实现约瑟夫环(C实现)~
阅读量:4216 次
发布时间:2019-05-26

本文共 1572 字,大约阅读时间需要 5 分钟。

#include
#include
typedef struct JoNode* Node;struct JoNode{ int num; Node Next;};//循环链表核心Node Josephus(int M, int N) { Node P; int Times = N-1; P = (Node)malloc(sizeof(struct JoNode)); if(P == NULL){ printf("申请空间失败"); return NULL ; } Node Head, P1, P2; int cnt = 0; int n = 0; while(N--){ cnt++; if(cnt == 1){ P2 = (Node)malloc(sizeof(struct JoNode)); P2->num = ++n; Head = P1 = P2; } else{ P2 = (Node)malloc(sizeof(struct JoNode)); P2->num = ++n; P1->Next = P2; P1 = P2; } } P2->Next = Head;//循环链表 的 末尾指针 指向头部 Node Pre; Pre = P2;//最开始 链表头的前一位置为表尾 Node Tmp; int m = 1;//计数 看 每次循环开始时候 从 0 还是1 开始 可以是0代表自己 也可以是1代表自己 int people = 0;//出局人数 while(people < Times){ if(M == m){ printf("%d ",Head->num); Tmp = Head; Pre->Next = Head->Next; Head = Head->Next; free(Tmp); people++; m = 1; } else{ m++; Head = Head->Next; Pre = Pre->Next; } } return Head; //最后 剩下一个 自己指向自己 也就是幸存的那个 }//Node Findprevious(Node H, Node P)// {// Node Tmp = H;// while(Tmp->Next != NULL && Tmp->Next != P){// Tmp = Tmp->Next;// } // return Tmp;// } void PrintCircleList(Node P) { Node Tmp; //打印循环链表的方法 哈哈哈哈哈哈哈 printf("%d",P->num); Tmp = P->Next; while(Tmp != P){ printf("%d",Tmp->num); Tmp = Tmp->Next; } } void ShowVal(Node P) { printf("%d",P->num); } int main() { int M, N; Node Head, Pthis; printf("请输入总人数和每组循环报数次数:\n"); scanf("%d%d",&N,&M); printf("出局顺序为 : "); Pthis = Josephus(M, N); printf("\n"); ShowVal(Pthis); printf(" is survival"); return 0; }

转载地址:http://yaimi.baihongyu.com/

你可能感兴趣的文章
mongodb 增加全文检索索引
查看>>
QC数据库表结构
查看>>
测试工具厂商的编程语言什么时候“退休”?
查看>>
资源监控工具 - Hyperic HQ
查看>>
LoadRunner中Concurrent与Simultaneous的区别
查看>>
SiteScope - Agentless监控
查看>>
为什么我们的自动化测试“要”这么难
查看>>
LoadRunner性能脚本开发实战训练
查看>>
测试之途,前途?钱途?图何?
查看>>
反病毒专家谈虚拟机技术 面临两大技术难题
查看>>
几种典型的反病毒技术:特征码技术、覆盖法技术等
查看>>
论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取
查看>>
廖雪峰Python教程 学习笔记3 hello.py
查看>>
从内核看epoll的实现(基于5.9.9)
查看>>
python与正则表达式
查看>>
安装.Net Framework 4.7.2时出现“不受信任提供程序信任的根证书中终止”的解决方法
查看>>
input type=“button“与input type=“submit“的区别
查看>>
Linux文件和设备编程
查看>>
文件描述符
查看>>
终端驱动程序:几个简单例子
查看>>