作业帮 > 综合 > 作业

约瑟夫环(Joseph)问题数据结构的实验.c++编程~

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/17 06:30:16
约瑟夫环(Joseph)问题数据结构的实验.c++编程~
约瑟夫环(Joseph)问题的一种描述是:编号为1,2,…,n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数.报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止.试通过类的设计求解约瑟夫环问题的出列顺序.具体的要求和说明如下:(1)利用单向循环链表存储结构模拟此过程,按照出列的顺序输出个人的编号.(2)m的初值为20;n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先m的值为6(正确的出列顺序应为:6,1,4,7,2,3,5).(3)程序运行后,首先要求用户指定初始报数的上限值,然后读取个人的密码.可设n
#include using namespace std; //每个人的号码和密码. struct people { int NO; int pass; }node; 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);// 重载new 函数. void operator delete(void*);//重载delete函数. }; 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); }; 太长了.去这里看 http://blog.programfan.com/article.asp?id=23037