约瑟夫环C 程序代码约瑟夫环C 程序代码
#include
using namespace std;
struct people
{
int NO;
int pass;
};
template class Link
{
private:
static Link* freelist; public:
struct people element;
Link* next;
Link(people elemval,Link* nextval=NULL)
{
element.NO=elemval.NO;
e...
约瑟夫环C 程序代码
#include
using namespace std;
struct people
{
int NO;
int pass;
};
template class Link
{
private:
static Link* freelist; public:
struct people element;
Link* next;
Link(people elemval,Link* nextval=NULL)
{
element.NO=elemval.NO;
element.pass=elemval.pass;
next=nextval;
}
Link(Link* nextval=NULL)
{
next=nextval;
}
void* operator new(size_t);
void operator delete(void*); };
template class LList
{
private:
Link *head;
Link *tail;
Link *fence;
void init()
{
head=tail=fence=new Link;
tail->next=head->next;
}
void removeall()
{
while(head!=NULL)
{
fence=head;
fence=fence->next;
delete fence;
}
}
public:
LList()
{
init();
}
~LList()
{
removeall();
}
bool insert(const people& T);
bool remove(Elem&);
void getOut(int&,int&);
void prev();
bool append(const people& T);
};
template
Link* Link::freelist=NULL;
template
void* Link::operator new(size_t)
{
if(freelist==NULL)
return ::new Link;
Link* temp=freelist;
freelist=freelist->next;
return temp;
}
template
void Link::operator delete(void* ptr)
{
((Link*)ptr)->next=freelist;
freelist=(Link*)ptr; }
template
bool LList::insert(const people& T) {
fence->next=new Link(T,fence->next);
if(tail==fence)
{
tail=fence->next;
tail->next=head->next;
}
return true;
}
template
bool LList::append(const people& T) {
tail=tail->next=new Link(T,head->next);
return true;
}
template
bool LList::remove(Elem& it) {
if(tail==head)
return false;
if(fence->next==NULL)
{
it=fence->element.pass;
cout<element.NO<<"-- ";
return true;
}
it=fence->next->element.pass;
cout<next->element.NO<<"-- ";
Link* temp=fence->next;
fence->next=temp->next;
if(temp==tail)
{
tail=fence;
}
delete temp;
return true;
}
template
void LList::prev() {
if(fence->next!=head)
fence=fence->next;
else
{
fence->next=head->next;
fence=fence->next;
}
}
template void LList::getOut(int &it,int& sum)
{
int sign,n=1;
fence=tail;
cout<<"Enter you want to first get out:";
cin>>sign;
while(sum>0)
{
if(sign>sum&&sign>1)
sign=sign%sum;
if(sign==n||sum==1)
{
remove(it);
sign=it;
sum--;
n=0;
}
else
prev();
n++;
}
}
int main()
{
LList A;
struct people T;
int item,it,sum;
cout<<"Enter you want to people:";
cin>>sum;
for(int i=1;i<=sum;i++)
{
cout<<"enter the--"<>item;
T.NO=i;
T.pass=item;
A.append(T);
cout<
本文档为【约瑟夫环C 程序代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。