#include<iostream>
using namespace std;
typedef struct Node
{
int data;
Node *next;
};
class JosephRing
{
private:
Node *rear;//尾结点
public:
JosephRing(int n);//构造函数,初始化n个结点的循环链表
~JosephRing();//析构函数
void Joseph(int m);//密码为m,打印出环顺序
};
JosephRing::JosephRing(int n)
{
rear = new Node;
rear->data = 1;
rear->next = rear;
Node *s = nullptr;
for (int i = 2; i <= n; i++)
{
s = new Node;
s->data = i;
s->next = rear->next;
rear->next = s;
rear = s;
}
}
void JosephRing::Joseph(int m)
{
Node *pre = rear;
Node *p = rear->next;
int count = 1;
cout << "出环顺序为:";
while (p->next != p)
{
if (count < m)
{
pre = p;
p = p->next;
count++;
}
else
{
cout << p->data << "\t";
pre->next = p->next;
p = pre->next;
delete p;
count = 1;
}
}
cout << p->data;
}
JosephRing::~JosephRing()
{
if (rear != nullptr)
{
Node *p = rear;
while (rear->next != rear)
{
rear = p->next;
delete p;
p = rear->next;
}
delete rear;
}
}
int mian()
{
int n, m;
cout << "请输入约瑟夫环的长度:";
cin >> n;
cout << "请输入密码:";
cin >> m;
JosephRing R(n);
R.Joseph(m);
system("puase");
return 0;
}
c++实现约瑟夫环
最新推荐文章于 2025-01-04 00:15:00 发布


2119

被折叠的 条评论
为什么被折叠?



