求高手帮忙解决!! 以下程序运行时总是出错,可是不知道错在哪里?希望尽快帮我解决啊!

2024年11月15日 02:22
有3个网友回答
网友(1):

#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) << "人" < cout<< "剩余的生者位置为:" << '\t';
p = L.Head;

while(p->next!=L.Head){
cout<< p->data << '\t';
p=p->next;
}
if(p)
cout<< p->data << '\t' ;
cout<< '\n';
}

网友(2):

没看出来,检查了下语法,貌似语法没问题

网友(3):

表头 Head 的初始化放在哪里