输入圆桌上的人数n:5从第k人开始报数(k>1且k<5):3数到m的人出列:2出列人的编号为:4出列人的编号为:1出列人的编号为:3出列人的编号为:2出列人的编号为:5 循环链表和动态链表唯一不同在于它的首尾连接,这也注定了在使用循环链表时,附带的最多的操作就是遍历链表。
第二部步 根据用户的输入 生成一个小孩的出圈顺序 需要创建一个复制指针(helper),事先让helper指向环形链表的最后一个节点。 在小孩报数之前 先让first 和helper 移动K-1次;移到指定的开始位置; 当小孩开始报数,让first和helper指针同时的移动m-1次 (m为报的数) 这时 可以将first指针指向的小孩出圈, first =...
void PrintList(LinkNode *pHead) //输出链表中的节点值 { LinkNode *pNode = pHead; while(pNode) { cout << pNode->value << " "; pNode = pNode->next; } cout << endl; } void RemoveNode(LinkNode **pHead, int value) //从链表中删除节点 { if(pHead==NULL || *pHead==NULL) re...
Status Josephus(CirLinkList &L,int n,int r,int m){ // 链表一共有 n 个结点,从已经排好序的循环链表第 r 个结点位置 // 起数,数到第 m 个结点,让该结点出局,依次循环下去。 int i,k=0; struct LNode *p,*q; p=L->next; //此时的 p 为初始化时循环链表的头指针 i=1; while(i!=...
1. 环形链表 环形链表是另一种形式的链式存贮结构。它的特点是表中最后一个结点的指针域指向第一个结点,整个链表形成一个环。 2. 约瑟夫问题 设编号为1,2,…,n 的n个人围坐一圈,约定编号为 k (1 ≤ k ≤ n) 的人从1开始报数,数到m的那个人出列,出列的人的下一位又从1开始报数,数到m的那个人又...
1.关键算法 约瑟夫问题的实质就是在含n个元素的循环链表中依次删除第m个元素,返回链表中最后一个元素值。即用含n个元素的数组初始化循环链表,从第一个元素开始查找第m-1个元素,删除第m个元素,然后从第m+1个元素开始继续查找第m-1个元素,删除第m个元素,循环此过程直到链表中只剩下最后一个元素。
循环链表和约瑟夫环 循环链表的实现 单链表只有向后结点,当单链表的尾链表不指向NULL,而是指向头结点时候,形成了一个环,成为单循环链表,简称循环链表。当它是空表,向后结点就只想了自己,这也是它与单链表的主要差异,判断node->next是否等于head。 代码实现分为四部分: ...
据说著名犹太历史学家 Josephus 有过以下故事:在罗马人占领乔塔帕特后,39 个犹太。题目来自【牛客题霸】
带有头结点的单链表的实现和相关操作。单链表对于插入和删除操作,它不需要移动其它元素,算法时间复杂度为O(1),因此特别适合频繁的插入和删除操作。 计算机21009班 郭梦盼 不带有头结点的循环列表解决约瑟夫环,约瑟夫问题,是一个计算机科学和数学中的问题,在计算机编程的算法...
Josephus约瑟夫问题假设n个竞赛者排成一个环形,依次顺序编号1,2,…,n.从某 个指定的第1号开始,沿环计数,每数到第m个人就让其出列,且从下一个人开始 重新计数,继续进行下去.这个过程一直进行到所有的人都出列为止.最后出列者为 优胜者.无论是用链表实现还是用数组实现来解约瑟夫问题都有一个共同点:要模 ...