博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
16、约瑟夫问题
阅读量:6627 次
发布时间:2019-06-25

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

M个人围成一圈,从第一个开始报数,第N个将被杀掉,最后剩下一个,其余人都将被杀掉。例如M=10,M=3,被杀掉的顺序是:3,6,9,2,7,1,8,5,10,4.

使用单循环链表实现

API函数和单循环链表一样

main.c

宏定义M为10,N为3

1 #define _CRT_SECURE_NO_WARNINGS 2 #include
3 #include
4 #include
5 #include"CircleLinkList.h" 6 7 #define M 10 8 #define N 3 9 10 typedef struct MYNUM {11 CircleLinkNode node;12 int val;13 }MyNum;14 15 void MyPrint(CircleLinkNode* data) {16 MyNum* num = (MyNum*)data;17 printf("%d ",num->val);18 }19 20 int MyCompare(CircleLinkNode* data1, CircleLinkNode* data2) {21 MyNum* num1 = (MyNum*)data1;22 MyNum* num2 = (MyNum*)data2;23 if (num1->val == num2->val) {24 return TRUE;25 }26 return FALSE;27 }28 29 int main() {30 31 //创建循环链表32 CircleLinkList* clist = Init_CircleLinkList();33 //链表插入数据34 MyNum num[M];35 for (int i = 0; i < M; i++) {36 num[i].val = i + 1;37 Insert_CircleLinkList(clist, i, (CircleLinkNode*)&num[i]);38 }39 40 //打印41 Print_CircleLinkList(clist, MyPrint);42 printf("\n");43 44 45 int index = 1;46 //辅助指针47 CircleLinkNode* pCurrent = clist->head.next;48 while (Size_CircleLinkList(clist) > 1) {49 if (pCurrent == &(clist->head)) {50 pCurrent = pCurrent->next;51 }52 if (index == N) {53 54 MyNum* temNum = (MyNum*)pCurrent;55 printf("%d ", temNum->val);56 57 //缓存待删除结点的下一个结点58 CircleLinkNode* pNext = pCurrent->next;59 60 //根据值删除61 RemoveByValue_CircleLinkList(clist, pCurrent, MyCompare);62 pCurrent = pNext;63 if (pCurrent == &(clist->head)) {64 pCurrent = pCurrent->next;65 }66 67 index = 1;68 }69 70 pCurrent = pCurrent->next;71 index++;72 }73 74 if (Size_CircleLinkList(clist) == 1) {75 MyNum* tempNum=(MyNum*)Front_CircleLinkList(clist);76 printf("%d ",tempNum->val);77 }78 else {79 printf("出错!\n");80 }81 printf("\n");82 83 84 //释放链表内存85 FreeSpace_CircleLinkList(clist);86 87 88 system("pause");89 return 0;90 }

运行结果:

 

转载于:https://www.cnblogs.com/luanxin/p/8947293.html

你可能感兴趣的文章
手势滑动源码(适合新手)
查看>>
我的友情链接
查看>>
快速熟悉开源项目
查看>>
Linux Centos 6.2 装好PHP启动Apache错误libmysqlclient.so.18:
查看>>
我的开发工具包
查看>>
运维角度浅谈MySQL数据库优化
查看>>
多版本python下,安装pip
查看>>
AndroidManifest.xml文件解析
查看>>
互联网 免费的WebService接口
查看>>
【我的V日志】2010年1月29日星期五
查看>>
我的友情链接
查看>>
六种微服务架构的设计模式
查看>>
路由器配置大全
查看>>
JACK——AgentManual3 Agents
查看>>
[转载] 的士速递4
查看>>
基于QT平台的手持媒体播放器项目实战视频教程下载
查看>>
一名奔三的程序猿的困惑
查看>>
嵌入式Linux裸机开发(一)——点亮Led
查看>>
搭建Websocket简易聊天室
查看>>
Oracle技术之flashback table
查看>>