2020年约瑟夫问题求解实验报告
时间:2020-11-26 11:34:13 来源:工作范文网 本文已影响 人
约瑟夫问题求解实验报告 姓名程裕博 学号149074353 班级物联网工程 141 班
一、
实验目的 1、 掌握上机调试线性表的基本方法; 2、 掌握线性表的基本操作插入、删除、查找等运算在顺序存储结构和链式存储结构上的运算。
3、 掌握约瑟夫问题求解算法 二、
实验内容 1、 认真阅读和掌握本实验的参考程序,并上机运行本程序,可尝试完善删除、查找等运算。
2、 参考第二章课件中对瑟夫问题求解算法的描述,选择一种存储结构实现该问题的求解。
三、
注意事项
1、在磁盘上创建一个目录,专门用于存储数据结构实验的程序,可通过 U 盘或邮箱长期保存程序。
2、实验报告要求(1)算法的完整代码;(2)程序运行结果及分析;(3)实验总结。
实验源代码
#include"stdio.h" #include"stdlib.h" #include"malloc.h" typedef struct node {
int data;
struct node *next; }*plinklist; plinklist setlink() {
plinklist list,p,r;
int i,n;
printf("请输入所有个体的个数");
scanf("%d",&n);
list=(plinklist)malloc(sizeof(struct node));
if(list!=NULL)
{
r=list;
printf("请输入您的序号");
scanf("%d",&r->data);
for(i=0;i<n-1;i++)
{
p=(plinklist)malloc(sizeof(struct node));
r->next=p;
scanf("%d",&p->data);
r=p;
p->next=NULL;
}
}
else
printf("创建失败!\n");
p->next=list;
return list; } void josephus(plinklist list,int s,int m) {
plinklist p,pre;
int i;
if(!list)
printf("表中没有元素");
p=list;
for(i=1;i<s;i++)
p=p->next;
printf("输出约瑟夫序列");
while(p!=p->next)
{
pre=p->next;
while(pre->next!=p) pre=pre->next;
for(i=1;i<m;i++)
{
pre=p;
p=p->next;
}
printf("%d ",p->data);
pre->next=p->next;
free(p);
p=pre->next;
}
printf("%d ",p->data);
free(p);
putchar("\n"); } void main()
{
int s,m;
plinklist t;
t=setlink();
printf("请输入第一个元素的位置,以及间隔的位数:");
scanf("%d%d",&s,&m);
josephus(t,s,m); } 实验截图
实验总结
- 下载文档
- 收藏
- 0