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

来源:百度知道 编辑:UC知道 时间:2024/06/07 19:51:02
n个人坐一圈,从第i个人开始,报数为m。
稍微变了下形,但是非要用循环队列实现。
帮帮忙啊!

给,已经编译运行确认:
#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->