标签:
HUNAN CITY UNIVERSITY
数据结构课程设计
说 明 书
设计题目: 约瑟夫数
专 业: 计算机科学与技术
学生姓名:
班级学号:
分组成员:
指导教师:
2015 年 7月 3日
《数据结构》课程设计说明书
1306402 03 刘德豪
一、设计时间
2015年06月29日-----2015年07月03日
二、设计地点
湖南城市学院实验楼计算机407机房
三、设计目的
1.巩固和加深对数据结构课程所学知识的理解,了解并掌握数据结构与算法的设计方法;
2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3.提高综合运用所学的理论知识和方法,独立分析和解决问题的能力;
4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风;
5.培养查阅资料,独立思考问题的能力。
四.设计小组成员
五.指导老师
六.设计课题
编号为1,2,3, . . . . . ., n 。 的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。 一开始任意给定一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他的顺时针方向上的下一个人开始重新从1报数,如此下去直至所有人全部出列为止。
七.基本思路及关键问题的解决方法
这题用单向循环链表模拟此过程,按照密码数依次选出各数,按照出列顺序打印出各人的编号,主要在于建立单向循环链表,以及按照密码数依次删除各结点,第一行输入人得个数n,接下来第二行输入n个人得密码数,第三行输入上限值m。
八.算法及流程图
九.调试过程中出现的问题及相应解决办法
开始调试的时候有很多错误,错误多出在语法上面,主要由于语法生疏犯了一些比较基础的错误,经过调试现象就出来了,从中可以看出在指针这一块还有很多不足,以后的多熟悉,至于算法方面不算太难,只要建立一个单向循环链表按密码数依次选出各数就可以了。
十.课程设计心得体会
这次做课程设计颇有感触,对于一个题目而言需要先把所有设计方案都列出来,再从中挑选一个最合适的方案来做,这样会轻松很多,少走很多弯路,如果在设计中调试出现了问题,首先看是不是语法问题,在把自己的思路在纸上列一遍,看看有没有问题。往往很多时候结果调试不出来,在于一些地方没有想到。
十一.源程序
struct CirNode/*定义每个结点的类型 */
{
int data;/*每个人所拥有的密码*/
int num;/*每个人在圈中的位序*/
struct CirNode *next;
};
int a[30]; /*人数要求≤30 */
struct CirNode *CreateList(int n)/*生成n个结点的单向循环链表 */
{
struct CirNode *L,*p,*q;
int i;
int j=1;
L=q=(struct CirNode*)malloc(sizeof(struct CirNode));
/*建立一个不带头结点的单向循环链表 */
if(!q)
return ERROR;
printf("shu ru mei ge ren de mi ma:\n");
q->num=j;
printf("%d.data=",j);
scanf("%d",&q->data);
j++;
q->next=L;
for(i=1; i<n; i++)
{
p=(struct CirNode*)malloc(sizeof(struct CirNode));
printf("shu ru mei ge ren de mi ma:\n");
p->num=j;
printf("%d.data=",j);
scanf("%d",&p->data);
j++;
q->next=p;
p->next=L;
q=q->next;
}/*for*/
return (L);
}/*Create*/struct CirNode *DeleteList(struct CirNode *L,int m,int n)/*报m的人出列*/
{
int i,j=0;
int k=n;
struct CirNode *p,*q,*pre;
pre=p=L;
do
{
i=1;
while(i<m-1)
{
p=p->next; /*else*/
i++;
}
if(m==1)
{
while(pre->next!=p) pre=pre->next;
m=p->data;/*得到新的密码 */
a[j]=p->num;/*得到出列人的序号 */
q=p;
pre->next=p->next;
p=p->next;
free(q);
L=pre=p;/*让新的报1的人作为头结点 */
k--;
j++;
}/*if */else
{
q=p->next;
m=q->data;
a[j]=q->num;
p->next=q->next;
p=q->next;
free(q);
L=pre=p;
k--;
j++;
}
}
while(k>1);
a[j]=p->num;/*最后一个出列人的序号 */
printf("xian zai suo you ren chu lie.\n");
return (L);
}/*DeleteList*/int main()
{
struct CirNode *L;
int i,n,m;
printf("======This is a Joseph problem======\n");
printf("qing shu ru ren shu,n=");
scanf("%d",&n);
if(n>30||n<1)
{
printf("ERROR! Please input again,n=");
scanf("%d",&n);
}/*if*/L=CreateList(n);
printf("Please input the first code,m=");
scanf("%d",&m);
if(m<1)
{
printf("ERROR! Please input again,m=");
scanf("%d",&m);
}/*if */DeleteList(L,m,n);
printf("chu dui ren de shun xu31:\n");
for(i=0; i<n; i++) printf("%d ",a[i]);
printf("\n");
参考文献
[1]严蔚敏、吴伟民主编《数据结构》(C语言版) 清华大学出版社 2002
[2]严蔚敏、吴伟民《数据结构习题集》(C语言版) 清华大学出版社
[3]谭浩强编著 《面向对象程序设计》(C++)清华大学出版社
标签:
原文地址:http://www.cnblogs.com/liudehao/p/4615530.html