央企文库

当前位置:首页 > 关于我们 > 私享空间

私享空间

约瑟夫环课程设计实验报告【约瑟夫环数据结构实验报告】

2020-01-01 00:00:00私享空间
                                                        数据结构实验报告实习1 线性表及其应用题目:编制一个演示约瑟夫环的程序班级:1403011班 姓名:付尧 学号:[1**********] 完成日期:2015.10.25一.需求分析1.本程序中,人数n为任意整数,首先输入一个报数上限值整数m,程序应

数据结构实验报告

实习1 线性表及其应用

题目:编制一个演示约瑟夫环的程序

班级:1403011班 姓名:付尧 学号:[1**********] 完成日期:2015.10.25

一.需求分析

1.本程序中,人数n为任意整数,首先输入一个报数上限值整数m,程序应能自动将出列的人所持的密码赋给m,再次作为报数上限,如此循环,直至所有人都出列为止。

2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入相应数据(即每个人所持的密码),每个人的序号由程序自动分配。

3.程序执行的命令包括:

(1)构造线性表;(2)输入数据;(3)执行报数,删除出列人的信息以及把出列人的密码赋给m;(4)结束。

4.测试数据

(1)m初值为20,n=7,7个人的密码依次为:3,1,7,2,4,8,4,首先m值为6,则正确的出列顺序为6,1,4,7,2,3,5。

二.概要设计

为了实现程序上述功能,应以单向循环链表为存储结构。

1. 基本操作:

void createList()

操作结果:构造单向循环链表,初始化每个人的密码并分配序号。

void Josephus()

……此处隐藏1412个字…… =q; //插入节点P

p=q;

}

tail=p; //保存尾指针

tail->next=head->next; //形成循环链表

}

void Josephus(NODE *p,int m){

//约瑟夫函数

NODE *q;

int count=0; //报数计数器

q=tail; //q为尾结点

p=p->next; //p为第一个数据

while (p->next!=p){

count++; //当循环链表所剩元素大于1时

if (count==m){

printf("%d ",p->num); //输出当前出列者的序号

m=p->code; //更新m为出列者的密码

q->next=p->next; //删除p节点

delete(p);

p=q->next; //令p指向下一个数据结点

count=0;

}

else {

q=p;

p=p->next;

}

}

printf("%d ",p->num); //打印最后剩下的人的序号

}

int main(){

createList();

Josephus(head,m);

return 0;

}

文章评论