
哪位高手帮我这个菜鸟修改一下代码,不胜感激呀!
我主要利用循环链表解约瑟夫问题,但对一些语法不是很熟悉,代码在vs2008上运行不出来,只要帮我在08上运行成功必重分谢之!!!#pragmaoncetemplate<c...
我主要利用循环链表解约瑟夫问题,但对一些语法不是很熟悉,代码在vs2008上运行不出来,只要帮我在08上运行成功必重分谢之!!!
#pragma once
template<class Type>
class circlist;
template<class Type>
class cirlistnode
{
friend class circlist<Type>;
public:
cirlistnode(Type d=0,cirlistnode<Type> *next1=NULL):data(d),link(next1)
{};
private:
Type data;
cirlistnode<Type>*link;
};
template<class Type>
class circlist
{
circlist(const Type &value)
{
first=last=new circlistnode<Type>(value);
first.link=first;
}
public:
void insert(const Type & value);
void remove();
void next();
bool isempty()
{
return first.link==first;
};
void josephus(Type n,Type m);
private:
circlistnode<Type> *first,*current,*last;
};
template<class Type>
void circlist<Type>:: insert(const Type& value)
{
circlistnode * newnode=new circlistnode(value);
circlistnode *p=first;
int i=1;
while(i<value-1)
{
p=p.link;
i++;
}
newnode.link=p.link;
p.link=newnode;
}
template<class Type>
void circlist<Type>::remove()
{
circlistnode*q;
q=current.link;
current.link=q.link;
delete q;
}
template<class Type>
void circlist<Type>::next()
{
current=current.link;
}
#include "circlist.h"
#include "shixian.cpp"
#include<iostream>
using namespace std;
template<class Type>
tvoid circlist<Type>::josephus(int n ,int m)
{
current=first;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<m-1;j++)
next();
remove;
}
cout<<current.link.data;
}
void main()
{
circlist<int> clist(1);
int n,m;
cout<<"输入2个数";
cin>>n>>m;
for(int i=2;i<=n;i++)
clist.insert(i);
clist.josephus(n,m)
}
编译错误在图片上 展开
#pragma once
template<class Type>
class circlist;
template<class Type>
class cirlistnode
{
friend class circlist<Type>;
public:
cirlistnode(Type d=0,cirlistnode<Type> *next1=NULL):data(d),link(next1)
{};
private:
Type data;
cirlistnode<Type>*link;
};
template<class Type>
class circlist
{
circlist(const Type &value)
{
first=last=new circlistnode<Type>(value);
first.link=first;
}
public:
void insert(const Type & value);
void remove();
void next();
bool isempty()
{
return first.link==first;
};
void josephus(Type n,Type m);
private:
circlistnode<Type> *first,*current,*last;
};
template<class Type>
void circlist<Type>:: insert(const Type& value)
{
circlistnode * newnode=new circlistnode(value);
circlistnode *p=first;
int i=1;
while(i<value-1)
{
p=p.link;
i++;
}
newnode.link=p.link;
p.link=newnode;
}
template<class Type>
void circlist<Type>::remove()
{
circlistnode*q;
q=current.link;
current.link=q.link;
delete q;
}
template<class Type>
void circlist<Type>::next()
{
current=current.link;
}
#include "circlist.h"
#include "shixian.cpp"
#include<iostream>
using namespace std;
template<class Type>
tvoid circlist<Type>::josephus(int n ,int m)
{
current=first;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<m-1;j++)
next();
remove;
}
cout<<current.link.data;
}
void main()
{
circlist<int> clist(1);
int n,m;
cout<<"输入2个数";
cin>>n>>m;
for(int i=2;i<=n;i++)
clist.insert(i);
clist.josephus(n,m)
}
编译错误在图片上 展开
2个回答
2009-09-21
展开全部
1楼司马,函数功能是错的。
经我全部改正,结果验证无误:
头文件:circlist.h
#include <iostream>
using namespace std;
template<class Type>
class circlist;
template<class Type>
class Node
{
friend class circlist<Type>;
public:
Node(const Type &val = 0, Node<Type> *next = NULL):m_data(val),m_next(next)
{};
/*Node<Type> *NextNode() const
{
return m_next;
}*/
//private:
Type m_data;
Node<Type> *m_next;
};
template<class Type>
class Circlist
{
public:
Circlist(const Type &value = 0)
{
m_head = NULL;
m_curr = m_head;
}
void Insert(const Type &value);
void Create(int n);
void Remove();
bool Isempty()
{
return m_head->m_next == m_head;
};
void Josephus(int n,int m);
private:
Node<Type> *m_head, *m_curr;
};
template<class Type>
void Circlist<Type>:: Insert(const Type &value)
{
cirlistnode<Type> *newnode = new cirlistnode<Type>(value);
m_curr = m_head;
int i=1;
while(i < value)
{
m_curr = m_curr->m_next;
i++;
}
newnode->m_next = m_curr->m_next;
m_curr->m_next = newnode;
}
template<class Type>
void Circlist<Type>::Create(int n)
{
int i;
Node<Type> *newNode;
for(i = 0; i < n; ++i)
{
newNode = new Node<Type>(i+1);
if(NULL == m_head)
{
m_head = newNode;
}
else
{
m_curr->m_next = newNode;
}
m_curr = newNode;
}
m_curr->m_next = m_head;
m_curr = m_head;
}
template<class Type>
void Circlist<Type>::Remove()
{
Node<Type> *q;
q= m_curr->m_next;
m_curr->m_next = q->m_next;
delete q;
}
template<class Type>
void Circlist<Type>::Josephus(int n, int m)
{
Create(n);
int i;
Node<Type> *pre;
while(m_curr->m_next != m_curr)
{
for(i=0;i<m-1;++i)
{
pre = m_curr;
m_curr = m_curr->m_next;
}
pre->m_next = m_curr->m_next;
// cout << "delete: " << m_curr->m_data;
delete m_curr;
m_curr = pre->m_next;
}
cout<<m_curr->m_data;
}
执行文件:Josephus.cpp:
#include "circlist.h"
int _tmain(int argc, _TCHAR* argv[])
{
Circlist<int> clist(1);
int n,m;
cout<<"输入2个数\n";
cin>>n>>m;
clist.Josephus(n,m);
return 0;
}
经我全部改正,结果验证无误:
头文件:circlist.h
#include <iostream>
using namespace std;
template<class Type>
class circlist;
template<class Type>
class Node
{
friend class circlist<Type>;
public:
Node(const Type &val = 0, Node<Type> *next = NULL):m_data(val),m_next(next)
{};
/*Node<Type> *NextNode() const
{
return m_next;
}*/
//private:
Type m_data;
Node<Type> *m_next;
};
template<class Type>
class Circlist
{
public:
Circlist(const Type &value = 0)
{
m_head = NULL;
m_curr = m_head;
}
void Insert(const Type &value);
void Create(int n);
void Remove();
bool Isempty()
{
return m_head->m_next == m_head;
};
void Josephus(int n,int m);
private:
Node<Type> *m_head, *m_curr;
};
template<class Type>
void Circlist<Type>:: Insert(const Type &value)
{
cirlistnode<Type> *newnode = new cirlistnode<Type>(value);
m_curr = m_head;
int i=1;
while(i < value)
{
m_curr = m_curr->m_next;
i++;
}
newnode->m_next = m_curr->m_next;
m_curr->m_next = newnode;
}
template<class Type>
void Circlist<Type>::Create(int n)
{
int i;
Node<Type> *newNode;
for(i = 0; i < n; ++i)
{
newNode = new Node<Type>(i+1);
if(NULL == m_head)
{
m_head = newNode;
}
else
{
m_curr->m_next = newNode;
}
m_curr = newNode;
}
m_curr->m_next = m_head;
m_curr = m_head;
}
template<class Type>
void Circlist<Type>::Remove()
{
Node<Type> *q;
q= m_curr->m_next;
m_curr->m_next = q->m_next;
delete q;
}
template<class Type>
void Circlist<Type>::Josephus(int n, int m)
{
Create(n);
int i;
Node<Type> *pre;
while(m_curr->m_next != m_curr)
{
for(i=0;i<m-1;++i)
{
pre = m_curr;
m_curr = m_curr->m_next;
}
pre->m_next = m_curr->m_next;
// cout << "delete: " << m_curr->m_data;
delete m_curr;
m_curr = pre->m_next;
}
cout<<m_curr->m_data;
}
执行文件:Josephus.cpp:
#include "circlist.h"
int _tmain(int argc, _TCHAR* argv[])
{
Circlist<int> clist(1);
int n,m;
cout<<"输入2个数\n";
cin>>n>>m;
clist.Josephus(n,m);
return 0;
}
展开全部
输入2个数100 36
51请按任意键继续. . .
vs2008 大概人品好 没办法
#pragma once
template<class Type>
class circlist;
template<class Type>
class cirlistnode
{
friend class circlist<Type>;
public:
cirlistnode(Type d):data(d){}
cirlistnode(Type d,cirlistnode<Type> *next1):data(d),link(next1)
{};
private:
Type data;
cirlistnode<Type>*link;
};
template<class Type>
class circlist
{
public:
circlist(const Type &value)
{
first=last=new cirlistnode<Type>(value);
(*first).link=first;
}
void insert(const Type & value);
void remove();
void next();
bool isempty()
{
return first.link==first;
};
void josephus(Type n,Type m);
private:
cirlistnode<Type> *first,*current,*last;
};
template<class Type>
void circlist<Type>:: insert(const Type& value)
{
cirlistnode<Type> * newnode=new cirlistnode<Type>(value);
cirlistnode<Type> *p=first;
int i=1;
while(i<value-1)
{
p=p->link;
i++;
}
newnode->link=p->link;
p->link=newnode;
}
template<class Type>
void circlist<Type>::remove()
{
cirlistnode<Type>*q;
q=current->link;
current->link=q->link;
delete q;
}
template<class Type>
void circlist<Type>::next()
{
current=current->link;
}
#include "circlist.h"
#include<iostream>
using namespace std;
template<class Type>
void circlist<Type>::josephus(Type n ,Type m)
{
current=first;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<m-1;j++)
next();
remove();
}
cout<<(current->link)->data;
}
void main()
{
circlist<int> clist(1);
int n,m;
cout<<"输入2个数";
cin>>n>>m;
for(int i=2;i<=n;i++)
clist.insert(i);
clist.josephus(n,m);
}
51请按任意键继续. . .
vs2008 大概人品好 没办法
#pragma once
template<class Type>
class circlist;
template<class Type>
class cirlistnode
{
friend class circlist<Type>;
public:
cirlistnode(Type d):data(d){}
cirlistnode(Type d,cirlistnode<Type> *next1):data(d),link(next1)
{};
private:
Type data;
cirlistnode<Type>*link;
};
template<class Type>
class circlist
{
public:
circlist(const Type &value)
{
first=last=new cirlistnode<Type>(value);
(*first).link=first;
}
void insert(const Type & value);
void remove();
void next();
bool isempty()
{
return first.link==first;
};
void josephus(Type n,Type m);
private:
cirlistnode<Type> *first,*current,*last;
};
template<class Type>
void circlist<Type>:: insert(const Type& value)
{
cirlistnode<Type> * newnode=new cirlistnode<Type>(value);
cirlistnode<Type> *p=first;
int i=1;
while(i<value-1)
{
p=p->link;
i++;
}
newnode->link=p->link;
p->link=newnode;
}
template<class Type>
void circlist<Type>::remove()
{
cirlistnode<Type>*q;
q=current->link;
current->link=q->link;
delete q;
}
template<class Type>
void circlist<Type>::next()
{
current=current->link;
}
#include "circlist.h"
#include<iostream>
using namespace std;
template<class Type>
void circlist<Type>::josephus(Type n ,Type m)
{
current=first;
for(int i=0;i<n-1;i++)
{
for(int j=0;j<m-1;j++)
next();
remove();
}
cout<<(current->link)->data;
}
void main()
{
circlist<int> clist(1);
int n,m;
cout<<"输入2个数";
cin>>n>>m;
for(int i=2;i<=n;i++)
clist.insert(i);
clist.josephus(n,m);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询