线性表——链式存储结构之循环单链表的应用

来源:互联网 发布:数据库密码忘了怎么办 编辑:程序博客网 时间:2024/04/29 23:10

题目:编写一个程序求解约瑟夫(Joseph)问题。有n个小孩围成一圈,给他们从1开始依次编号,从编号为1的小孩开始报数,数到第m个小孩出列,然后从出列的下一个小孩重新开始报数,数到第m个小孩又出列,…,如此反复直到所有的小孩全部出列为止,求整个出列序列。如当n=6,m=5时的出列序列是5,4,6,2,3,1。

代码示例:

#include <iostream>using namespace std;struct Child//小孩结点类型{int no;//小孩编号Child *next;//指向下一个结点指针};class Joseph{int n, m;Child *h;//首结点指针public:Joseph(int n1, int m1)//构造函数,建立有n1个结点的循环单链表{int i;Child *p, *r;n = n1; m = m1;h = new Child();h->no = 1;r = h;for (i = 2; i <= n; i++){p = new Child();p->no = i;r->next = p;r = p;}r->next = h;}~Joseph()//析构函数,所有结点在出列时已释放{}void Jsequence()//求解约瑟夫序列{int i, j;Child *p, *q;for (i = 1; i <= n; i++){p = h; j = 1;while (j<m - 1){j++;p = p->next;}q = p->next;cout << q->no << " ";p->next = q->next;delete q;h = p->next;}}};void main(){int n = 6, m = 5;Joseph obj(n, m);cout << "n=" << n << ",m=" << m << "的约瑟夫序列:";obj.Jsequence();cout << endl;}


阅读全文
0 0
原创粉丝点击