欢迎来到天天文库
浏览记录
ID:39892389
大小:139.50 KB
页数:11页
时间:2019-07-14
《约瑟夫生死游戏》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、约瑟夫生死游戏一、约瑟夫生死游戏30个人围成一个圈由第一个人数起,依次报数,数到第九个人,便把他剔除,然后再从他的下一个人数起,数到第九个人,再将他剔除剩下15个乘客为止,问那些位置将是被扔下大海的位置。二、实验目的n个人围成一个圈由第一个人数起,依次报数,数到第x个人,便把他剔除,然后再从他的下一个人数起,数到第x个人,再将他剔除,依次继续,直到剩下的人数小于等于n/2。三、功能分析1、构建约瑟夫链表:使整个游戏在链表中运行,使得结点在删除时不需要移动大量的结点;2、确定n的值:进而使链具化体,从而可以构建一个具体的链表;3、更新链表:对剔除
2、结点后的链表进行重新连接,构成一个新的链表,使得循环继续进行;4、输入:输入n的值进行链表具体化,输入间隔值m,使得间隔被确定,程序得以有效正确的进行;5、输出:输出要剔除的结点的数值。四、系统设计1、利用类定义构造成员函数以及成员templateclassList{public:List(){first=newLinkNode;first->link=first;}List(Tx){first=newLinkNode(x);first->link=first;}List(List&L);~List(){}vo
3、idInsert(inti,Tx);TgetHead(){returnfirst->data;}LinkNode*getfirst(){returnfirst;}voidxiuf(LinkNode*a){first=a;}LinkNode*Locate(inti);protected:LinkNode*first;};1、定义成员函数templateList::List(List&L){Tvalue;LinkNode*srcptr=L.getHead();LinkNode*dest
4、ptr=first=newLinkNode;destptr->data=srcptr->data;while(srcptr->link!=first){value=srcptr->link->data;destptr->link=newLinkNode(value);destptr=destptr->link;srcptr=srcptr->link;last=srcptr;}};templateLinkNode*List::Locate(inti){if(i<0)returnNULL;LinkNode5、>*current=first;intk=1;while(klink;k++;if(current==first)returnNULL;}returncurrent;};1、创建含有n个结点的单循环链表队列的顺序表示和实现和顺序栈相似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,尚需附设两个指针front和rear分别指示队列头元素及队列尾元素的位置。初始化建空队列时,令front=rear=0,每当插入新的队列尾元素时,“尾指针增1”;每当删除队列头元素时,6、“头指针增1”。因此,在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。从上述分析可见,不能用动态分配的一维数组来实现循环队列。如果用户的应用程序中设有循环队列,则必须为它设定一个最大队列长度;若用户无法预估所用队列的最大长度,则宜采用链队列。templatevoidList::Insert(inti,Tx){LinkNode*current=Locate(i);if(current==NULL)return;LinkNode*newNode=newLinkNode(x);i7、f(newNode==NULL){cout<<"存储分配错误!"<link=current->link;current->link=newNode;};2、Josephu操作Josphu链表——链式表示和实现约瑟夫(Josephu)问题:已知N个人围坐在一张圆桌周围(不妨以1,2,……,N对每一个人依次编号),现在先从序号为K的人开始报数,数到m的那个人出列,他的下一个人又从1开始数,报数到m的人出列……直到所有人都出出列为止。给出出列的顺序。templatevoidJosephu8、s(List&Js,intn,intm){LinkNode*p=Js.Locate(1),*pre;inti,j;for(i=1;i<=n
5、>*current=first;intk=1;while(klink;k++;if(current==first)returnNULL;}returncurrent;};1、创建含有n个结点的单循环链表队列的顺序表示和实现和顺序栈相似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,尚需附设两个指针front和rear分别指示队列头元素及队列尾元素的位置。初始化建空队列时,令front=rear=0,每当插入新的队列尾元素时,“尾指针增1”;每当删除队列头元素时,
6、“头指针增1”。因此,在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。从上述分析可见,不能用动态分配的一维数组来实现循环队列。如果用户的应用程序中设有循环队列,则必须为它设定一个最大队列长度;若用户无法预估所用队列的最大长度,则宜采用链队列。templatevoidList::Insert(inti,Tx){LinkNode*current=Locate(i);if(current==NULL)return;LinkNode*newNode=newLinkNode(x);i
7、f(newNode==NULL){cout<<"存储分配错误!"<link=current->link;current->link=newNode;};2、Josephu操作Josphu链表——链式表示和实现约瑟夫(Josephu)问题:已知N个人围坐在一张圆桌周围(不妨以1,2,……,N对每一个人依次编号),现在先从序号为K的人开始报数,数到m的那个人出列,他的下一个人又从1开始数,报数到m的人出列……直到所有人都出出列为止。给出出列的顺序。templatevoidJosephu
8、s(List&Js,intn,intm){LinkNode*p=Js.Locate(1),*pre;inti,j;for(i=1;i<=n
此文档下载收益归作者所有