循环链表-圆桌出列问题
来源:互联网 发布:程序员怎么转ai工程师 编辑:程序博客网 时间:2024/06/05 03:56
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
以下是C++实现代码
#include <cstdlib>#include <cstdio>typedef struct LNode{ int data; struct LNode *link;}LNode,*LinkList;
//建立无头结点的循环链表
LinkList Create( int n ){ LinkList head,p,temp; head=NULL; p=head; int i; for( i=1;i<=n;i++ ){ temp=(LinkList)malloc(sizeof(LNode)); temp->data=i; if( head==NULL ){ head=temp; p=head; }else{ p->link=temp; p=temp; } } p->link=head; return head;}
//出列函数
void function( int n,int m,int k ){ LinkList head,p,q; head=Create(n); int i; printf( "the list is:\n" ); p=head; for( i=0;i<n;i++ ){ printf( "%d ",p->data ); p=p->link;} printf("\n"); p=head; //找到第一个报数的结点,即编号为k的结点 for( i=0;i<n;i++ ){ if( k==p->data ) break; p=p->link; } //循环数1到m,出列 while( n-- ){ for( i=1;i<m;i++ ){ q=p; p=p->link; } printf( " %d out\n",p->data ); q->link=p->link; free(p); p=q->link; }}
//主函数
int main(){ function(5,4,2); return 0;}
阅读全文
0 0
- 循环链表-圆桌出列问题
- 圆桌问题
- 圆桌问题
- 圆桌问题
- 圆桌问题
- 圆桌问题
- 圆桌问题
- 有一个单向循环链表队列,从头开始报数,当报到m或者m的倍数的元素出列,根据出列的先后顺序重新组成单向循环链表。
- 单向循环链表队列,从头开始报数,当报到m或者m的倍数的元素出列
- java--报数出列问题
- Josephus问题(圆桌骑士)
- 圆桌吃饭问题
- 1487 圆桌问题
- hdu4841 圆桌问题
- hdu4841.圆桌问题
- hdoj圆桌问题
- HDU 4841 圆桌问题
- HDOJ 圆桌问题 4841
- 【数学建模】MATLAB数值积分与微分
- Java设计模式_(创建型)_单例模式
- 玩转Android之二维码生成与识别
- 爬虫 scrapy 抓取小说实例
- Android Gatt 蓝牙连接通信
- 循环链表-圆桌出列问题
- MySql高级—视图、函数、存储过程、触发器
- 字符串数组元素排列与组合
- mysql 数据库
- Android异步消息处理机制
- Python:使用Counter进行计数统计及collections模块
- Noip2015 斗地主【搜索】【贪心】
- 自动更新packagejson
- 图像的矩