#include"CLinkList.h"
没有发?
给你个看看吧
#include "iostream.h"
/*******************************************************************************
单循环链表的结点类
*******************************************************************************/
class Node
{
friend class Linklist;
public:
Node();
int data;
Node *next;
};
/*******************************************************************************
单循环链表类
*******************************************************************************/
class Linklist
{
public:
Linklist();
void Creatlist(Linklist &L);
int getLength(Linklist &L);
Node * Head;
};
/*******************************************************************************
Node类的构造函数,初始化结点数据
*******************************************************************************/
Node::Node()
{
data = 0;
next = NULL;
}
/*******************************************************************************
Linklist类的构造函数,初始化首结点数据
*******************************************************************************/
Linklist::Linklist()
{
Head = NULL;
}
/*******************************************************************************
建立单循环链表
*******************************************************************************/
void Linklist::Creatlist(Linklist &L)
{
cout << "请输入生死游戏的总人数N:";
int n;
cin >> n;
Node *p;
for (int i = n; i > 0; i --)
{
p = new Node;
p->data = i;
p->next = L.Head;
L.Head = p;
}
while (p->next) {
p = p->next;
}
p->next = L.Head;
}
/*******************************************************************************
获取单循环链表的长度
*******************************************************************************/
int Linklist::getLength(Linklist &L)
{
Node *p=L.Head;
int count=0;
while (p->next!=L.Head) {
count++;
p = p->next;
}
count++;
return count;
}
/*******************************************************************************
主函数,实现约瑟夫生死游戏
*******************************************************************************/
void main ()
{
cout << "现有N人围成一圈,从第S个人开始依次报数,报M的人出局,";
cout << "再由下一人开始报数,如此循环,直至剩下K个人为止" << '\n' << '\n';
Linklist L;
L.Creatlist(L);
cout << "请输入游戏开始的位置S:"<< '\t' ;
int s;
cin >> s;
cout << "请输入死亡数字M:"<< '\t';
int m;
cin >> m;
cout << "请输入剩余的生者人数K:"<< '\t';
int k;
cin >> k;
cout<< '\n' ;
Node *p, *q, *r;
p = L.Head;
for(int i = 0; i < s - 1; i ++) //找出s结点
{
p = p->next;
}
int t = 1;
while ( k < L.getLength(L) ) {
for(int j = 0; j < m - 1; j ++) //报数,找出m结点
{
q = p;
p = p->next;
}
if (p == L.Head) { //元素出列
r = p;
L.Head = p->next;
q->next = p->next;
p = p->next;
}
else
{
r = p;
q->next = p->next;
p = p->next;
}
cout << "第" << t << "个死者的位置是:" << '\t'<< r->data << '\n';
t ++;
}
cout<< '\n' << "最后剩下:" << '\t' << L.getLength(L) << "人" <
p = L.Head;
while(p->next!=L.Head){
cout<< p->data << '\t';
p=p->next;
}
if(p)
cout<< p->data << '\t' ;
cout<< '\n';
}
没看出来,检查了下语法,貌似语法没问题
表头 Head 的初始化放在哪里