顺序表实现约瑟夫环的问题C语言
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
顺序表实现约瑟夫环的问题C语言
计算机科学与工程学院
《算法与数据结构》试验报告[一]
10级计算机工程02计算机大楼计工教研专业班级试验地点室学生学号1005080222 指导教师蔡琼学生姓名肖宇博试验时间 2012-2-29 试验项目算法与数据结构
试验类别基础性() 设计性() 综合性(?) 其它( )
(1)掌握用VC++上机调试线性表的基本方法;
试(2)掌握顺序表的存储结构以及基本运算的实现。验
目的求及
要
成绩评定表
类别评分标准分值得分合计
积极出勤、遵守纪律
上机表现 30分
主动完成设计任务
程序代码规范、功能正确
程序与报告 70分
报告详实完整、体现收获
计算机科学与工程学院
备注:
评阅教师:
日期: 年月日
试验内容
一、实验目的和要求
1、实验目的:
(1)掌握用VC++上机调试线性表的基本方法;
(2)掌握顺序表的存储结构以及基本运算的实现。
2、实验内容
约瑟夫环问题:设编号为1,2,3,……,n的n(n>0)个人按顺
时针方向围坐一圈,m为任意一个正整数。从第一个人开始顺时针
方向自1起顺序报数,报到m时停止并且报m的人出列,再从他的下
一个人开始重新从1报数,报到m时停止并且报m的人出列。如此下
去,直到所有人全部出列为止。要求设计一个程序模拟此过程,对
任意给定的m和n,求出出列编号序列。
3、实验要求:用顺序表实现。
二、设计分析
根据实验要求,采用顺序表来完成本次实验。
实验中定义了两个顺序表,一个用来存储n个人的序号,另一个用来存储n个人的出队顺序及序号。
程序中充分考虑了如果出队的元素大于队列的元素个数时应该有的情况,如果出现这样的错误就提示~否则继续出队~
三、源程序代码
#include
#include
#define MAXSIZE 10 // 宏替换最大值
typedef struct
{
int data[MAXSIZE];
int length;
}Sqlist;
void CreatList(Sqlist *&L,int a[],int n) //创建顺序表{
L=(Sqlist *)malloc(sizeof(Sqlist));
2 《算法与数据结构》试验报告
计算机科学与工程学院
for(int i=0;i { L->data[i]=a[i]; } L->length=n; } void InitList(Sqlist *&L) //初始化顺序表 { L=(Sqlist *)malloc(sizeof(Sqlist)); L->length=0; } void DestoryList(Sqlist *&L) //释放顺序表空间 { free(L); } void josephus(Sqlist *&L) //约瑟夫环的核心代码{ int t=0; int m=0; printf("请输入数到几个人出来"); printf("\n"); scanf("%d",&m); if(m>L->length) { printf("没有这么多人呀~?(?_?)?"); } else { printf("出列顺序为:"); for(int q=L->length;q>=1;q--) { t=(t+m-1)%q; printf("\n"); printf("\t%d\t",L->data[t]); for(int j=t+1;j<=q-1;j++) L->data[j-1]=L->data[j]; } printf("\n"); } } void main() 3 《算法与数据结构》试验报告 计算机科学与工程学院 { Sqlist *s; InitList(s); int a[MAXSIZE]; int n=0; printf("请键入要输入几个数"); printf("\n"); scanf("%d",&n); for(int i=0;i { a[i]=i+1; } CreatList(s,a,n); josephus(s); DestoryList(s); printf("\n"); }四、测试用例(尽量覆盖所有分支) 1.当输入1,2,3,4。。。。。。n的这些数字范围以内的话,可以得到正确的结果如 图: 2.当输入的n比较大的时候的情况如图: 4 《算法与数据结构》试验报告 计算机科学与工程学院 3.当输入序列少,出对数大时 : 4.当输入要出列的元素大于队列里的元素,这将会提示错误如图: 5 《算法与数据结构》试验报告 计算机科学与工程学院 5.当你的输入出队的序列数有误时将会提示错误