约瑟夫环生死问题,利用循环链表作为存储结构,使用简单的c++语言知识便可实现。
由于算法并不复杂,故并未使用多个函数,在一个主函数中实现
#include<iostream>
#include<cstdlib>
using namespace std;
typedef int ElemType;
typedef struct lnode
{
ElemType data;
struct lnode *next;
}node, *linklist;
int main()
{
int n, i = 1, k;
node *p, *q;
linklist head;
cin >> n >> k;
if (n % 2 != 0)
cout << "请输入偶数,否则无法实现。" << endl;
head = (node*)malloc(sizeof(node));
head->data = 1;
q = head;
p = head;
for (int l = 2; l <= n; l++)
{
p = (linklist)malloc(sizeof(node));
q->next = p;
q = p;
p->data = l;
}
q->next = head;//循环单链表创建完成
p = head;
cout << "死亡人员:";
while (i <= n / 2)
{
for (int m = k; m >2; m--)
p = p->next;
q = p->next;
p->next = q->next;
cout << q->data << " ";
free(q);
p = p->next;
i++;
}//死亡人员确认
cout << endl << "幸存人员:";
i = 1;
while (i <= n / 2)
{
p = p->next;
cout << p->data << " ";
i++;
}
cout << endl;
return 0;
}