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

是求解约瑟夫问题,用无头结点的单循环链表实现。n是指人数,m是指报到m的人出圈,从约定编号k开始报数。#include<iostream.h>#include"CLink... 是求解约瑟夫问题,用无头结点的单循环链表实现。n是指人数,m是指报到m的人出圈,从约定编号k开始报数。
#include<iostream.h>
#include"CLinkList.h"
typedef int T;

template <class T>
void CLinkList<T>::OutLine(int n,int m,int k)
{

Node<T> *pre,*p;
int count;
for(int i=1;i<k;i++)
{
pre=p;
p=p->next;
}
while(p!=p->next)
{
for(count=1;count<m;count++)
{
pre=p;
p=p->next;
}
cout<<p->data;
pre->next=p->next;
delete p;
p=pre->next;
}
cout<<p->data;

}

template<class T>
void CLinkList<T>::CreateList(int n)
{
Node<T> *p,*q;
p=Head;p->data=1;
for(int i=2;i<=n;i++)
{
q=new Node<T>;
q->data=i;
q->next=p->next;
p->next=q;
p=q;
cout<<q->data;
}
p->next=Head;
}

int main()
{
int n,m,k;
cout<<"输入n,m,k的值";
cin>>n>>m>>k;
CLinkList<int>L;
L.CreateList(n);
cout<<"出列顺序为:";
L.OutLine(n,m,k);
return 0;
}
展开
 我来答
整在独14
2011-03-21 · TA获得超过205个赞
知道答主
回答量:137
采纳率:0%
帮助的人:64.5万
展开全部
#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) << "人" <<endl;
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';
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mztt2010
2011-03-21 · TA获得超过628个赞
知道小有建树答主
回答量:1001
采纳率:100%
帮助的人:575万
展开全部
没看出来,检查了下语法,貌似语法没问题
追问
我发现问题是出在OutLine函数中,具体是什么地方就是找不出来,一运行到那一步就出错
追答
还是没发现问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dfh00l
2011-03-21 · 超过32用户采纳过TA的回答
知道答主
回答量:68
采纳率:0%
帮助的人:26.6万
展开全部
表头 Head 的初始化放在哪里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式