关于约瑟夫环的问题 c++循环队列实现

n个人坐一圈,从第i个人开始,报数为m。稍微变了下形,但是非要用循环队列实现。帮帮忙啊!... n个人坐一圈,从第i个人开始,报数为m。
稍微变了下形,但是非要用循环队列实现。
帮帮忙啊!
展开
 我来答
匿名用户
推荐于2016-04-12
展开全部
给,已经编译运行确认:
#include <iostream.h>
#include <stdlib.h>

typedef struct Node
{
int data;
struct Node* next;
}LNode, *LinkList;

LinkList list = NULL;
int n; //人数
int m; //报数号

//n为总人数,k为第一个开始报数的人,m为出列者喊到的数
void JosephRing(int n, int k, int m)
{
LinkList p, r; /* p为当前结点,r为辅助结点,指向p的前驱结点*/

for(int i = 1; i <= n; i++) /*建立循环队列*/
{
p = (LinkList)malloc(sizeof(LNode));
p->data = i;
if(list == NULL) list = p;
else r->next = p;
r = p;
}
p->next = list; /*使队列循环起来*/
p = list; /*使p指向头节点*/

/*把当前指针移动到第一个报数的人*/
for(i = 1; i < k; i++)
{
r = p;
p = p->next;
}

/*循环地删除队列结点*/
while(p->next != p)
{
for(i = 1; i < m; i++)
{
r = p;
p = p->next;
}
r->next=p->next;
cout<<p->data<<endl;
free(p);
p=r->next;
}
cout<<endl<<"最终剩下的人为: "<<p->data<<endl;
}

int main()
{
int m,n,i;
cout<<"请输入人数n: ";
cin>>n;

cout<<"请输入开始位置i: ";
cin>>i;

cout<<"请输入报数m: ";
cin>>m;

cout<<"出队顺序如下: "<<endl;
JosephRing(n, i, m);

system("pause");
return 1;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式