// 链表遍历到开始位置 LinkList* ListStart(LinkList *L, int n){ for (int i = 0; i < n; i++) { L=L->next; //通过不断地指向下一个节点找到开始节点的位置 } return L; } 调试观察 第三步: 固定步长循环删除节点 //循环删除节点 Status ListDelete(LinkList *L,int n){ LinkList *...
循环链表(空表为只有一个空节点的表,其link指针指向自身)很容易模拟一个环,其数据域可以用来储存编号,加上链表的删除操作,可以很简单的解决约瑟夫问题。 循环链表的实现以及约瑟夫问题的解决代码如下: CircLinkedList.h:该头文件定义了一些需要实现的循环链表的基本函数以及Josephus函数: 1/*Author:catcher qyjiang24@...
(由这个传说产生了约瑟夫问题,总数n,删除数为k) 最后我写了一个函数是将结果输出到外部文本txt中。 我所写出的循环链表是基于单链表来写的:简而言之就是,首先,生成我们所学过的单链表(我这里采用的是头插法),每次生成一个空间,就将该空间的成员信息进行赋初值,也就是把结构里面所定义的成员的位置信息进行赋值...
约瑟夫问题: 意思是===》 有n个人 ,手拉着手,围成一个圆圈,说 :“ 我们每m个数,在那个位置的人就必须自杀,接着往下数,自杀 。”一直循环下去。 比如有 10 人 ,规定 数到 2 就 去自杀。 1 2 3 4 5 6 7 8 9 第一次 ;往下数 2位 :123 4 5 6 7 8 9 ---2被刀了 第二次: 接着往下...
(Node)); new_node->data = i; temp->next = new_node; temp = new_node; } // 最后一个节点指向头部构成循环链表 temp->next = head; return head; } void count_off(Node *head, int n, int k, int m) { Node *cur = head; Node *pre = head; //找到链表第一个结点的上一个结点,...
循环链表———约瑟夫问题(C语言) 约瑟夫问题是循环链表的一个典型应用,其描述如下: m个人围成了一圈,从其中任一个人开始,按顺时针顺序 使所有人依次从1开始报数,报到n的人出列;然后使n之后的 人接着从1开始报数,再次使报到n的人出列……如此下去,...
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 使用环链表解决约瑟夫环问题的算法如下: #define_CRT_SECURE_NO_DEPRECATE#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h...
循环单链表(C语言,无头节点,附约瑟夫杀人问题),实现以下操作init初始化traverse遍历head_add头追加(),尾追加(尾插法)只需要注释掉函数最后一行的头指针赋值len长度insert指定位置插入search正、反向查找数据,返回第1次匹配的位置,找不到返回-1get获取指定位置的
本文实例讲述了C语言基于循环链表解决约瑟夫环问题的方法。分享给大家供大家参考,具体如下: 概述: 约瑟夫环问题,是一个经典的循环链表问题,题意是:已知 n 个人(以编号1,2,3,…,n分别表示)围坐在一张圆桌周围,从编号为 k 的人开始顺时针报数,数到 m 的那个人出列;他的下一个人又从 1 还是顺时针开始报数...
链表模拟约瑟夫环 二个实验~~~循环链表实现约瑟夫环 问题描述: 约瑟夫(joseph):编号为1,2,。。。,的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报的人出列,将他的密码作为新的m值,从他在...