码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构课程设计

时间:2015-07-02 13:35:11      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

                     

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!