欢迎访问有用文档网!

当前位置: 有用文档网 > 述职报告 >

约瑟夫环问题实验报告

| 浏览次数:

  1

  《专业实训 II》 实训报告

 实训项目名称:

  约瑟夫环问题

  班级:

 学号:

  姓名:

 指导教师:

  2 目录

 目录 .................................................................................................................................................. 2 一、摘要........................................................................................................................................... 3 二、专业实训项目描述 ................................................................................................................... 3 三、程序设计 ................................................................................................................................... 3 3.1 菜单系统设计(系统功能结构设计)

 ............................................................................. 3 3.2 基础数据结构设计 ............................................................................................................ 4 3.3

 函数封装(功能模块设计)

 .......................................................................................... 4 四、关键算法分析 ........................................................................................................................... 6 五、总结........................................................................................................................................... 6 附录:程序源代码 ........................................................................................................................... 7

 湖北第二师范学院计算机学院

  83030177

  专业实训 I

 3

 一、摘要

 报告描述了《约瑟夫环系统》的 C 语言实现方案,程序代码用 C语言给出,包含所有的数据结构及函数定义、功能模块,以及专业实训过程中的心得体会

  二、专业实训项目描述 本专业实训项目以《约瑟夫环系统》为主题,包含初始化链表、创建链表、约瑟夫环输出等模块,主要采用了循环单链表数据结构,及相关的递归算法等。

 三、程序设 计

  3.1 菜单系统设计(系统功能结构设计)

 void main()

 {

  int n,m; Node *p,*head; LinkList CL;

  printf("\t\t************欢迎来到约瑟夫环*************\n\n\n");

  printf("请输入一个初始密码作为一个报数上限值,再输入每个人的密码,并求出出列顺序\n\n\n");

 printf("请输入人数 N:\n");

  scanf("%d",&n);

  printf("请输入初始密码 m:\n");

  scanf("%d",&m);

  InitCLinkList(&CL);

 head=CreateCLinkList(CL,n);

  PrintLinkList(head,n);

  p=head;

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

  joseph(p,n,m); }

 湖北第二师范学院计算机学院

  83030177

  专业实训 I

 4 3.2 基础数据结构设计

  ************************** typedef struct Node {

 int num;

 int data;

 struct Node *next; } Node,*LinkList;//结点类型,指针类型

 int InitCLinkList(LinkList *CL)//创建一个无头结点的单向循环链表 {

 int key;

 printf("请依次输入密码:");

 scanf("%d",&key);

 *CL=(Node *)malloc(sizeof(Node));//申请一个结点

 (*CL)->data=key;

 (*CL)->num=1;

  (*CL)->next=*CL;

  return OK; }

 3.3

 函数封装(功能模块设计)

 1.主函数模块——执行输入调用其他的功能函数 2.创建环表模块——创建单向循环链表 Node *CreateCLinkList(LinkList CL,int n) {

 Node *rear; Node *s,*head;

  int i=1,key;

 rear=CL;

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

 {

  scanf("%d",&key);

 head=s=(Node*)malloc(sizeof(Node));//创建一个结点

  s->data=key;

  s->num=i;

  rear->next=s;

 湖北第二师范学院计算机学院

  83030177

  专业实训 I

 5

  rear=s;

  }

  head=rear->next=CL;//尾指针指向头指针

  return head;

  } 3.计算处理模块——计算出要出列的标号并输出 4.宣示模块——输出建立好的环表

  int PrintLinkList(LinkList CL,int n)

 {

  int i;

  Node *p;

  p=CL;

  printf("每个人的序号及对应的密码为:\n");

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

  {

 printf("%d,%d\n",p->num,p->data);

  p=p->next;

  }

  if(p=NULL)

  {

  printf("此链表为空");

  exit(OVERFLOW);

 }

 printf("\n");

  return OK;

 }

 湖北第二师范学院计算机学院

  83030177

  专业实训 I

 6

 四、关键算法分析 int joseph(LinkList CL,int n,int m)

 {

  int i,j;

  Node *p;

  Node *q;

 p=CL;

 for(j=1;j<m-1;j++)//循环到第 m-1 个结点

 {

 p=p->next;

  }

  q=p->next;

 //q 指向第 m 个结点

  p->next=q->next;

  p=p->next;

 printf("%d\t",q->num);//输出第 m 个结点的序号

 n--;

  if(n>1)

  joseph(p,n,q->data);//用第 m 个结点的密码进行递归调用

  else

  printf("%d",p->num);//输出最后一个结点的序号

  free(q);

  p->next=NULL;

  return OK;

  } 五、 总结 答:细节决定成败,编程最需要的是严谨,如何的严谨都不过分,往往检查了半天发现错误发生在某个括号,分号,引号,或者数据类型上。在写主要函数 joseph()时,在查找目标结

 湖北第二师范学院计算机学院

  83030177

  专业实训 I

 7 点的书写处不是很清楚,导致我浪费了很多时间。

 附录:程序源代码 #include <stdio.h> #include <stdlib.h> #include <conio.h> #define OK 1 #define OVERFLOW 0 typedef struct Node {

 int num;

 int data;

 struct Node *next;

 } Node,*LinkList;

 int InitCLinkList(LinkList *CL) {

 int key;

 printf("请依次输入密码:");

 scanf("%d",&key);

 *CL=(Node *)malloc(sizeof(Node));

 (*CL)->data=key;

 (*CL)->num=1;

  (*CL)->next=*CL;

  return OK; }

  Node *CreateCLinkList(LinkList CL,int n) {

 Node *rear; Node *s,*head;

  int i=1,key;

 rear=CL;

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

 {

  scanf("%d",&key);

 head=s=(Node*)malloc(sizeof(Node));

  s->data=key;

  s->num=i;

  rear->next=s;

 湖北第二师范学院计算机学院

  83030177

  专业实训 I

 8

  rear=s;

  }

  head=rear->next=CL;

  return head;

  }

  int joseph(LinkList CL,int n,int m)

 {

  int i,j;

  Node *p;

  Node *q;

 p=CL;

 for(j=1;j<m-1;j++)

 {

 p=p->next;

  }

  q=p->next;

  p->next=q->next;

  p=p->next;

 printf("%d\t",q->num);

 n--;

  if(n>1)

  joseph(p,n,q->data);

  else

  printf("%d",p->num);

  free(q);

  p->next=NULL;

  return OK;

  }

 int PrintLinkList(LinkList CL,int n)

 {

  int i;

  Node *p;

  p=CL;

  printf("每个人的序号及对应的密码为:\n");

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

  {

 printf("%d,%d\n",p->num,p->data);

  p=p->next;

 湖北第二师范学院计算机学院

  83030177

  专业实训 I

 9

  }

  if(p=NULL)

  {

  printf("此链表为空");

  exit(OVERFLOW);

 }

 printf("\n");

  return OK;

 }

 void main()

 {

  int n,m; Node *p,*head; LinkList CL;

 printf("\t\t************欢迎来到约瑟夫环*************\n\n\n");

  printf("请输入一个初始密码作为一个报数上限值,再输入每个人的密码,并求出出列顺序\n\n\n");

  printf("请输入人数 N:\n");

  scanf("%d",&n);

  printf("请输入初始密码 m:\n");

  scanf("%d",&m);

  InitCLinkList(&CL);

 head=CreateCLinkList(CL,n);

  PrintLinkList(head,n);

  p=head;

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

  joseph(p,n,m); }

推荐访问:约瑟夫 实验 报告

热门排行Top Ranking

弦振动实验报告

弦振动得研究 一、实验目得 1、观察固定均匀弦振动共振干涉形成驻波时得波形,加深驻波得认识。 2、了

宣传委员述职报告12020 幼儿园党支部宣传委员述职报告

下面是小编为大家精心整理的宣传委员述职报告12020幼儿园党支部宣传委员述职报告文章,供大家阅读参考。宣传委员述

党建工作现场述职会上讲话 公安局长在党建工作现场会上的讲话

下面是小编为大家精心整理的党建工作现场述职会上讲话公安局长在党建工作现场会上的讲话文章,供大家阅读参考。党建工作现场

支部宣传委员述职述廉报告范例 幼儿园党支部宣传委员述职报告

下面是小编为大家精心整理的支部宣传委员述职述廉报告范例幼儿园党支部宣传委员述职报告文章,供大家阅读参考。支部宣传

政治生态评估报告5篇

可能会捆绑住经办人员的手脚,不利于业务工作的开展。致使个别中层干部主体责任压力传导出现能量损耗;个别

2021年领导述职报告合集2020 县领导述职报告

下面是小编为大家精心整理的2021年领导述职报告合集2020县领导述职报告文章,供大家阅读参考。2

工商局监察室主任述职述廉报告

工商局监察室主任述职述廉报告 第一篇:工商局监察室主任述职述廉报告 我叫haoword,中共党员,现

党支部书记个人述职报告 对村党支部书记述职报告的点评

下面是小编为大家精心整理的党支部书记个人述职报告对村党支部书记述职报告的点评文章,供大家阅读参考。党支部书记个人

结合乡村振兴战略人才工作述职报告 乡村振兴工作员年度述职

下面是小编为大家精心整理的结合乡村振兴战略人才工作述职报告乡村振兴工作员年度述职文章,供大家阅读参考。结合

财务分析课程报告4篇

财务分析课程报告4篇财务分析课程报告篇1一年来,在领导和同事们的的支持帮助和指导下,加上自身的不断努

个人安全生产履职报告[安全生产述职报告] 党委书记安全生产履职报告

下面是小编为大家精心整理的个人安全生产履职报告[安全生产述职报告]党委书记安全生产履职报告文章,供大家阅读参

企业年度工作总结报告范文13篇

企业年度工作总结报告范文13篇企业年度工作总结报告范文篇1时光飞逝,转眼已经毕业一年了,我顺利地完成