数据结构实验报告(约瑟夫环)

  • 格式:doc
  • 大小:88.50 KB
  • 文档页数:4

下载文档原格式

  / 4
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基础成绩:82分《数据结构》课程实验

实验报告

题目:Joseph问题求解算法的设计与实现

专业:网络工程

班级:网络102

姓名:***

学号: ******

完成日期:2012/6/20

一、试验内容

-

约瑟夫(Joseph)问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。

二、试验目的

掌握链表的基本操作:插入、删除、查找等运算,能够灵活应用链表这种数据结构。

三、流程图

struct list

{

-

int num,code;

struct list *next;

};

void main()

{

printf("Joseph问题求解算法的设计与实现\n \n");

int i,j,m=1;

int key; // 密码.

int n; //人数.

list *p,*s,*head;

head=(list *)malloc(sizeof(list)); //为头结点分配空间.

p=head; //使指针指向头节点

printf("输入人的总个数:");

scanf("%d",&n);

for(i=1;i<=n;i++)

{

printf("第%d个人的密码:\n",i);

scanf("%d",&key);

s=p;

p=(list *)malloc(sizeof(list)); //创建新的结点.

s->next=p;

p->num=i;

p->code=key;

}

p->next=head->next;

p=head;

head=head->next;

free(p); //释放头结点.

p=head;

printf("\n\n输入初始值:\n");

scanf("%d",&key);

printf("\n出列顺序为:\n");

do

{ j=1; p=head;

while(j

{

s=p;

p=p->next;//使P指向下一结点

j++;

} //报数过程.

i=p->num;

key=p->code;

printf("%d\n",i);

s->next=p->next;

-

head=p->next; //重新定义head,下次循环的开始结点.

free(p);// 释放已出列的结点.

n--; //人数减一.

}while(n>0);

int x;

printf(“输入0退出:”);

scanf(“%d”,&x);

for(;;)

{

if(x==o)

break;

}

}

五、调试过程

调试过程中,曾出现过缺少分号、括号之类的错误,还出现过运算顺序颠倒,致使运算出现了错误,在经过仔细的检查并且向人请教,终于得出了正确结果.

六、结果分析

输入人数:7 输入密码:3 1 7 2 4 8 4 初值:6

排序结果:6 1 4 7 2 3 5