《数据结构》上机实验报告—约瑟夫环问题.docx
福州高校数计学院数据结构上机试验报告专业和班级:信息计算科学与应用数学6班学号姓名成果试验名称线性表结构与其应用试验内容约瑟夫环问题实验目的和要求【试验目的】利用单向循环链表解决约瑟夫环问题,提卷综合设计实力。【基本要求】利用单向循环锥表存储结构模拟此过程,按归口灿列的依次印出各人的编号。问题描述和主要步骤【问题描述】约瑟夫问题:编号为1,2,.n的n个人按瞅时针方向围坐圈,每人持有个密码(正整数)。起先任选个正整数作为报数上限值m,从第一个人起先按顺时针方向自1起先依次报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起先重新从1报数,如此下去,直至全部人全部出列为止。试设计一个程序求出出列依次。【主要程序】#include<stdio.h>4include<stdlib.h>typedefstructnode(intnumber;intpwd;structnode*next;Node,*1.ink:1.inkInit(void)r1.ink1.:1.-(1.ink)malIoc(sizeof(Node);1.->next=1.:return1.;)voidInsert(1.ink1.,inte_pwd,inte_number)t1.inkp,q;P=(1.ink)malIoc(sizeof(Node);p->pwd=e_pwd;p->number=e_number;q=1.;while(q->next!=Dq=q->next;p->next-q->next;q->next=p;)voidDelete(1.ink1.,inti)(1.inkp,q;q=1.;while(q->ncxt!=q&&q->next->numbe!=i)q=q->next;if(q->next->numbcri)(p=q->nexi;q->next-p->next;free(p);)voidmain()l1.inkp,q,1.;inti,m,n,pwd;Printf(”请输入参加人数与初始值:"):SCanf("%d,&n,&ni);if(n<=0)m<=0)return;1.=InitO;i=l:while(i<n)(Printfe请输入第%d个人的密码:",i);SCanf(",&pwd);if(pwd<=O)continue:Insert(1.,pwd,i):i+:)i=1:p=1.->next;while(1.->next!=1.)(q=p;p=p->next:if(p=1.)