数据结构(c语言版)--约瑟夫环

来源:百度知道 编辑:UC知道 时间:2024/06/16 21:47:44
【实验内容与要求】
问题描述:编号是1,2,…,n(n>0)的n个人按照顺时针方向围坐一圈,每人持有一正整数密码。开始时任选一个正整数作为报数上限值m,从某个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。令n最大值取30。设计一个程序来求出出列顺序,并输出结果。
基本要求:利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各人的编号。
【测试数据】
n为7,m的初值为20,密码:3、1、7、2、4、8、4,正确的结果应为:6、1、4、7、2、3、5。

一定要数据结构的形式哦~~符合要求的话追加分数~~

你连一分都不给,大家谁会来帮你回答啊!
呵呵。。。。
我人比较好!
还是给你一个程序:
#include<stdio.h>
#include<stdlib.h>
typedef struct data{ //定义一个结构体“data”
int num; //用于存放人的序号
int val; //用于存放密码
}typedata;
typedef struct node{ //定义一个结构体(结点),其中包含一个数据域和一个指针域
typedata data; //结构体的嵌套
struct node *next;
}listnode;
typedef listnode *linklist;
linklist head;

void main()// 进入主函数
{
int n,i,b,m,j;
linklist head=(listnode *)malloc(sizeof(listnode)); //申请一个空间(头结点 head)
listnode *p,*q; //定义两个可以指向结点的指针
printf("输入总人数:");
scanf("%d",&n);
q=head; //用指针q指向头结点

for(j=1;j<=n;j++) //本次循环主要是将每一个人的数据(包括序号、密码)存入循环链表中
{
printf("请输入第%d号同学的密码:\n",j);
scanf("%d",&b);
printf("\n");
q->next=(listnode *)malloc(sizeof(listnode));