城建局副局长女主角1:有那位学数据结构的朋友帮我解决一下这个问题?
#include <iostream.h>
#include <iomanip.h>
#include "josephus.h"
template <class Type> CircListNode<Type>::CircListNode( Type d , CircListNode<Type> *next )
{
data = d;
link = next;
}
template <class Type> CircList<Type>::CircList( Type value )
{
first = current =last = new CircListNode<Type> (value);
first->link = first;
}
template <class Type> CircList<Type>::~CircList(void)
{
cout << "The CircList has been successfully destructed" << endl;
}
template <class Type> int CircList<Type>::Length(void) const
{
int count = 1;
CircListNode<Type> *find = first->link;
while ( find != first )
{
find = find->link;
count++;
}
return count;
}
template <class Type> Boolean CircList<Type>::Find( const Type &value ) const
{
CircListNode<Type> *find = first;
while ( find->data != value && find->link != first )
{
find = find->link;
}
if ( find->data == value )
{
return True;
}
else
{
return False;
}
}
template <class Type> Boolean CircList<Type>::Next(void)
{
current = current->link;
return True;
}
template <class Type> Boolean CircList<Type>::Prior(void)
{
CircListNode<Type> *prior = first;
while ( prior->link != current )
{
prior = prior->link;
}
current = prior;
return True;
}
template <class Type> void CircList<Type>::Insert( const Type &value )
{
CircListNode<Type> *temp;
temp = new CircListNode<Type> (value);
temp->link = current->link;
current->link = temp;
if ( current == last )
{
last = temp;
}
return;
}
template <class Type> void CircList<Type>::Remove(void)
{
if ( current == first )
{
if ( first != last )
{
first = current->link;
delete current;
current = first;
last->link = first;
}
else
{
delete current;
first = current = last = NULL;
}
}
else
{
if ( current == last )
{
Prior();
current->link = last->link;//first
delete last;
last = current;
current = first;
}
else
{
CircListNode<Type> *temp = current;
Prior();
current->link = temp->link;
delete temp;
Next();
}
}
return;
}
template <class Type> void CircList<Type>::Traverse(void)
{
if ( !first || !last || !current )
{
cerr << "Illegal address" << endl;
exit(1);
}
CircListNode<Type> *traverse = first;
while ( traverse != last )
{
cout << setw(3) << traverse->data;
traverse = traverse->link;
}
cout << setw(3) << traverse->data << endl;//last node
return;
}
template <class Type> void CircList<Type>::Josephus(int n, int m)
{
current = first;
int count = 0;
while ( first != last )
{
if ( count == m )
{
count = 0;
Prior();
cout << "Number " << current->data << " has been rejected" << endl;
Remove();
}
else
{
count++;
Next();
}
}
cout << "The winner is : number " << current->data << endl;
}
int main()
{
CircList<int> josephus(1);
for ( int i = 2; i <= MAXPASSENGERS; i++ )
{
josephus.Insert(i);
josephus.Next();
}
cout << "The Josephus question :" << endl;
josephus.Traverse();
cout << endl;
josephus.Josephus(8,3);
return 0;
}
//josephus.cpp
我喜编程
做的很好,很好