数据结构课程设计任务书.docx

上传人:b****7 文档编号:10001841 上传时间:2023-02-07 格式:DOCX 页数:17 大小:76.97KB
下载 相关 举报
数据结构课程设计任务书.docx_第1页
第1页 / 共17页
数据结构课程设计任务书.docx_第2页
第2页 / 共17页
数据结构课程设计任务书.docx_第3页
第3页 / 共17页
数据结构课程设计任务书.docx_第4页
第4页 / 共17页
数据结构课程设计任务书.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数据结构课程设计任务书.docx

《数据结构课程设计任务书.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计任务书.docx(17页珍藏版)》请在冰豆网上搜索。

数据结构课程设计任务书.docx

数据结构课程设计任务书

课程设计(论文)任务书

软件学院学  院  软件+电气专  业2010—1 班

一、课程设计(论文)题目 数据结构课程设计--车厢调度问题

二、课程设计(论文)工作自2011年12月26日起至2011年12月30日止

三、课程设计(论文)地点:

创新大楼机房

四、课程设计(论文)内容要求:

1.本课程设计的目的

⑴训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,

编写程序求解指定问题;

⑵初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;

⑶提高综合运用所学的理论知识和方法独立分析和解决问题的能力,巩固、深化学生

的理论知识,提升编程水平。

2.课程设计的任务及要求

1)基本要求:

⑴要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象

数据类型、编写上机程序和上机调试等若干步骤完成题目,最终写出完整的报告;

⑵在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率;

⑶程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释;

⑷每位同学需提交可独立运行的程序和规范的课程设计报告。

2)课程设计论文编写要求

⑴理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进

行书写和装订;

⑵课程设计报告(论文)包括中文目录、设计任务、需求分析、概要设计、详细设计、

编码实现、调试分析、课设总结、谢辞、参考文献、附录等;

⑶设计部分应包含系统功能模块图,调试分析应包括运行截图等。

3)课程设计评分标准:

⑴学习态度:

10分;

⑵系统设计:

20分;

⑶编程调试:

20分;

⑷回答问题:

20分;

⑸论文撰写:

30分。

4)参考文献:

⑴严蔚敏,吴伟民.数据结构(C语言版)[M].清华大学出版社.2010.3

⑵严蔚敏,吴伟民.数据结构题集(C语言版)[M].清华大学出版社.1999.2

⑶何钦铭,冯燕等.数据结构课程设计[M].浙江大学出版社.2007.8

5)课程设计进度安排

⑴准备阶段(4学时):

选择设计题目、了解设计目的要求、查阅相关资料;

⑵程序模块设计分析阶段(4学时):

程序概要设计、详细设计;

⑶代码编写调试阶段(8学时):

程序模块代码编写、调试、测试;

⑷撰写论文阶段(4学时):

总结课程设计任务和设计内容,撰写课程设计论文。

学生签名:

2011年12月26日

6)课程设计题目具体要求:

根据自己所选择的题目填写内容

 

课程设计(论文)评审意见

(1)学习态度(10分):

优( )、良( )、中( )、一般( )、差( );

(2)系统设计(20分):

优()、良( )、中( )、一般( )、差( );

(3)编程调试(20分):

优( )、良( )、中( )、一般( )、差( );

(4)回答问题(20分):

优( )、良( )、中( )、一般( )、差( );

(5)论文撰写(30分):

优( )、良( )、中( )、一般( )、差( );

(6)格式规范性及考勤是否降等级:

是( )、否( )

评阅人:

王英华 职称:

讲师

2012年1月4日

一、需求分析3

1、问题描述3

2、基本要求:

3

3、问题分析3

二、概要设计3

1.定义栈的抽象数据类型定义:

3

2.定义一个一维数组来保存所有的输出序列4

3、定义全局变量4

三、详细设计5

(1)菜单显示voidmessage()5

(2)调度过程voidAttemper(intpos,intpath[],intcur)5

1、序列输出voidPrint()5

2、变化过程voidDisplayOnly(intk,intOutput,intInput)5

3、显示操作序列的状态的变化过程voidDisplayOnly(intk,intOutput,intInput)6

四、调试分析8

1.分析描述8

2.调试思路8

五、用户手册8

1.程序运行环境8

2.进入操作页面8

六、测试结果9

1.输入车厢数9

七、体会心得10

八、源代码11

一、需求分析

1、问题描述:

假设停在铁路调度站(如教科书中图3.1(b)所示)入口处的车厢系列的编号依次为1,2,3,…n。

设计一个程序,求出所有可能由此输出的长度为n的车厢系列。

2、基本要求:

⑴设计一个程序,求出由一个编号依次为1,2,、、、,n的车厢序列可能产生的所有出栈系列。

⑵利用双向栈存储结构实现调度站和输出序列这两个栈的空间共享。

⑶对于每个输出序列演示出所有操作序列的变化过程。

3、问题分析

若实现车厢调度的基本要求,所以需要建立一个栈来实现。

栈的特性是先进后出,而根据栈的特性,进栈与出栈都有两种可能:

一个数进栈后,要么立刻出栈,要么进行下一个数的进栈;同样一个数出栈后,要么继续出栈(栈不空),要么继续下一个数的进栈。

输入一个车厢长度,从而得到由此输出长度为n的车厢序列,并定义一个二维数组来保存所有的输出序列。

 

二、概要设计

1.定义栈的抽象数据类型定义:

基本操作:

InitStack(&S)

操作结果:

构造一个空栈S。

StackEmpty(&S)

初始条件:

栈S已经存在

操作结果:

判断栈S是否为空栈

StackFull(&S)

初始条件:

栈S已经存在

操作结果:

判断栈S是否已满

Push(&S,x)

初始条件:

栈S已经存在

操作结果:

在栈S的栈顶插入栈顶元素x

Pop(&S,&x)

初始条件:

栈S已经存在

操作结果:

删除栈顶元素,并赋给x

2.定义一个一维数组来保存所有的输出序列

structpathss{

intpaths[30]intnumber;

}AllPath;

3、定义全局变量

intn;

intpath[30];

三、详细设计

(1)菜单显示voidmessage()

主要功能就是显示主菜单:

请输入车厢数(2—30):

(2)调度过程voidAttemper(intpos,intpath[],intcur)

入栈时,输入一个数i,判断是否小于n(全局变量),如果小于n,则一个数进栈后,要么立刻出栈,要么进行下一个数的进栈;

同样,出栈时,首先判断栈是否为空,如果不为空,则一个数出栈后,要么继续出栈(栈不空),要么继续下一个数的进栈。

每个数根据以上的两种出栈入、栈选择,将产生所有可能的车厢序列,然后在运用一个二维数组,把每种序列保存在二维数组里。

1、序列输出voidPrint()

根据栈的特性输出所有可能长度为n的车厢序列。

2、变化过程voidDisplayOnly(intk,intOutput,intInput)

实现对于每个输出序列印出操作序列或状态变化过程。

运行程序时,输入一个序列号,然后按一下回车键,就会显示与序列号相对应的车厢序列,然后每按一次回车,就有一次变化,直到演化完毕为止。

3、显示操作序列的状态的变化过程voidDisplayOnly(intk,intOutput,intInput)

在运行程序时显示操作序列的状态的变化

 

 

 

四、调试分析

1.分析描述

此车厢调度的基本要求比较简单,只要掌握好栈的基本特性和基本操作,一般都能顺利完成。

2.调试思路

此系统需要运用递归算法,所以还必须对整个系统有个清晰的认识和思路,这样才能更好的掌握运行的详细过程与结果。

每个步骤都有两种可能,那怎样解决操作问题呢?

我决定先以入栈为主,先入先入,操作完毕后恢复至分步时的状态,再进行出栈的操作,这样两种可能就都完成了。

数据存储是用了一个数组,便于存储。

五、用户手册

1.程序运行环境

为DOS操作系统,执行文件为车厢调度.exe

2.进入操作页面

可以根据页面上的提示继续操作(如下图)。

六、测试结果

1.输入车厢数

假设车厢长度n=4

 

(以上便是程序运行过程中的一些截图)

7、体会心得

在经过三天的课设之后感觉到做东西要细心,一步一步来,不能急躁,不然什么都弄不好。

在课设的过程当中当看到程序运行成功感觉努力没有白费。

希望在以后的学习当中能够做的更好。

在编排方面要先有个大概编排然后在进行修改。

这样会舍得编排更加完善。

不会有什么错误。

希望以后会更好。

八、源代码

#include

#include

#defineSTACK_INI_SIZE30

#defineSTACKINEMENT10

#defineNULL0

typedefstruct

{

int*base;

int*top;

intstacksize;

intlength;

}stack;

main()

{

voidinitlist(stack*s);

voidoperation(stack*s);

stacks;

initlist(&s);

operation(&s);

}

voidinitlist(stack*s)

{

s->base=s->top=(int*)malloc(STACK_INI_SIZE*sizeof(int));

if(!

s->base)

{

printf("开辟失败");

exit

(1);

}

s->length=0;

s->stacksize=STACK_INI_SIZE;

}

voidpush(stack*s,inti)

{

if(s->length==s->stacksize)

{

s->base=(int*)realloc(s->base,(STACK_INI_SIZE+STACKINEMENT)*sizeof(int));

s->length=STACK_INI_SIZE;

s->stacksize+=STACKINEMENT;

}

*(s->top)=i;

s->length++;

s->top++;

}

voidpop(stack*s)

{

if(s->top==s->base)

{

printf("栈空无法删除错误");

exit

(1);

}

s->top--;

printf("%d",*(s->top));

*(s->top)=NULL;

s->length--;

}

voidoperation(stack*s)

{

inta[60],i,j,k,m,n,l,z,y,flag1=1,flag2=1;

charch;

printf("请输入车厢数(2-30)\n");

while(flag1)/*此循环是输入一个正确的车厢数假如在此输入的是4*/

{

scanf("%d",&i);

if(2>i&&i>30)

printf("输入错误请重新输入\n");

else

flag1=0;

}

flag1=1;

for(j=0;j

{

a[j++]=1;

a[j]=0;

}

while(flag1)/*总循环,输出所有满足条件的车厢调度*/

{

l=1,k=0;

for(j=0;j

{

if(a[j]==1)

push(s,l++);

elseif(a[j]==0)

pop(s);

}

printf("\n");

for(j=0;j

if(a[j]==1)

k++;

if(k==i)

flag1=0;

a[i*2-1]++;/*尾数自加1*/

while(flag2&&flag1)

{

z=1,m=0,n=0,y=1;

for(j=i*2-1;j>=0&&z;j--)/*假如自加之后是2的话,前一位自加1,本位为0*/

if(a[j]!

=2)

z=0;

else

{

a[j]=0;

a[j-1]++;

}

for(j=0;j

{

if(a[j]==1)

m++;

elseif(a[j]==0)

n++;

else

printf("错误\n");

if(n>m)

y=0;/*判断输出的时候栈是否为空,比如11000110*/

}

if(m==i&&n==i&&a[0]==1&&a[i*2-1]==0&&y==1)

flag2=0;

else

a[i*2-1]++;

}

flag2=1;

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1