《单循环链表解决约瑟夫问题.doc》由会员分享,可在线阅读,更多相关《单循环链表解决约瑟夫问题.doc(4页珍藏版)》请在金锄头文库上搜索。
1、/用单循环链表解决约瑟夫问题#include using namespace std;typedef struct Lnodeint data;Lnode *next;Lnode;class JosephusCirclepublic:void creat_list();void Josephus();private:int n;int s;int m;Lnode *head;void JosephusCircle:creat_list() /初始化cout请依次输入,约瑟夫圈人数、报数起始位置、报几个数:nsm;if(m=0) cout报数的个数不许为0!; coutnext=head; ta
2、il=head;for(int i=0;idata=(i+1);tail-next=p;tail=p;p-next=head-next;void JosephusCircle:Josephus()Lnode *p=head-next;Lnode *q=head; /q指针紧随其后int j=1;while (j!=s) /找到报数起点p=p-next;q=q-next;+j;while (p!=q)for(int i=0;inext; q=q-next;coutdatanext; /删除节点 q-next=p;coutdata; /输出最后一个出圈人编号void main()JosephusCircle Jose;Jose.creat_list();cout出圈顺序为:endl;Jose.Josephus();coutendl;