C语言版数据结构课程设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
------------------------实现文件(部分)--------------------------本部分是主控函数,函数的调用以及菜单的选择:
main.cpp
主函数
void main() { int path[MaxLen]; int m; char ch; printf(" \n\n\n ---------------------------- \n"); printf(" || \n"); printf(" |数据结构课程设计|\n"); printf(" | |\n"); printf(" | 铁路调度站模拟 |\n"); printf(" | |\n"); printf(" | 09 级通信工程|\n"); printf(" || \n"); printf(" ----------------------------\n"); printf(" 按任意键继续 \n"); if(ch=getch()); do { // system("cls"); //停顿 printf("\n\n\n ************************* \n"); printf(" * 1:请输入火车的长度: *\n"); printf(" * *\n");
VII
VIII
printf("\n"); } } 3.本程序包含 6 个模块
1)
主程序模块: int main() { 主菜单函数, 实现时间循环. return 0; }//主函数 栈模块----实现栈抽象数据类型 递归模块----实现调度迷宫抽象数据类型 选择生成模块----用户自定义菜单的生成 调度模块----实现车站的模拟
学生 班 学 成
姓名 级 号 绩 通 信 092 班
指 导 教 师 (签 字 )
III
IV
计算机与通信学院(部) 年 月 日
湖南工业大学课程设计情况分析表
课程设计名称 学院(部) 指导教师 学生专业、班级 数据结构 计算机与通信学院 文志诚 通信工程 0901 设计周数 系(教研室) 17 周 通信工程系
四:调试分析
1. 本次作业比较简单 , 只是刚开始写的代码中虽然用到了递归去求解函数, 但是不能很好的输完整结果,但是栈的相关操作是正确的,后来发现是由于
XI
XII
调度递归算法中元素出栈后没有继续让其进栈。经改后恢复正常。
2. 在设计调度初始化函数的时候,参数的传递出现错误,主要是对指针和引用 的理解出现混淆,通过查阅相关资料, 弄清楚了两者之间的区别,指针是用 于指向一个变量的地址,而引用只是对一个已存在变量的一个重命名. 3.用 printf 函数输出标志信息跟踪函数调用,收到了显著的效果,大大提高了调 试效率, 有利于以后的代码调试. 3. 使用了小部分的 win32 API,发现使用局部句柄时,调用的 winAPI 不能正常运 行,改成全局后问题解决. 4. 在实现调度功能时发现,每次调用 system("cls")函数时都进行清屏操作,屏 幕只出现当前的操作目标,一目了然。用户进入系统只需按要求进行,操作 时简洁清晰. 代码中的主要算法://输出一种可能的 for(i=0;i<curp;i++)的时间复杂度 为 O( n ). 5. 经验体会: 参考书本的代码进行改进,使用模块化操作易于代码的调试和修 改,而且易于阅读.在设计实现过程中虽然遇到了很多问题,但是在解决这些问题 的过程中,巩固和加深了我们对已学知识的理解,对团队合作有了一个比较基础的 认识,为以后的工作实践打下了基础,同时也增加了我们对这门课的认识.
3. 功能函数设计
………………………………XI
4. 调试分析
……………………………………XIX
5. 用户手册
……………………………………XXI
6. 测试结果
……………………………………XIV
V
VI
7. 附录 完整的程序清单 一、题目:
编制一个车厢调度的程序.
…………………… XV
扩展:
增加清屏函数;; 增选择的功能; 可显示所有的运行结果.
VI
VII
初始条件 : 栈 s 以存在 操作结果 : 删除栈顶元素,并删除 e 值 StackEmpty(SqStack s) 初始条件 : 栈 s 以存在 操作结果 : 判断栈是否为空 ClearStack(SqStack &s) 初始条件 : 栈 s 以存在 操作结果 : 将栈置为空栈 } ADT SqStack; 2. 设定车厢调度的抽象数据类型 ADT MazeType{ 数据对象 : D={ai,j|ai,j∈{‘ ’, ‘#’、 ‘@’ 、 ‘*’ }, 0<=i<=m+1, 0<=j<=n+1,m,n<=10} 数据关系 : R={M,N} M={<a i-1,j,ai,j>|ai-1,j,ai,j∈D,i=1,……,m+1,j=0,……,n+1} N={<a i-1,j,ai,j>|ai-1,j,ai,j∈D,i=1,……,m+1,j=0,……,n+1} 基本操作 : void process(int pos,int path[],int curp)//当前处理位置 pos 的元素 { 定一两个变量 if(pos<n)//编号进栈递归 { push(pos+1);//当前元素进栈后下一个元素继续进栈 process(pos+1,path,curp); //处理下一个元素, 返回表明下一个元素进栈的情况 处理完了 pop(); //下一个元素处理完后,pop 掉,准备处理直接出栈 } if(!Emptys())//递归处理出栈 { m=pop(); path[curp]=m; //数组存放出栈元素 curp++; process(pos,path,curp);//出栈后处理下一个素继续进栈 push(m); } if(pos==n&&Emptys())//输出一种可能的方案 { for(i=0;i<curp;i++) printf("%2d",path[i]);
需求分析
( 1 )在教材书 3.1.2 节中提供的栈的顺序存储结构 SqStack 之上实现栈的基本操作,即实现栈类 型。 ( 2 )程序对任何栈的任何存取(即更改、读取和状态判别等操作)必须借助于基本操作执行。 ( 3 ) 用户可以自己输入调度的大小 , 然后由程序自动生成结果.
二、概要设计
1. 设定栈的抽象数据类型定义 : ADT Stack { 数据对象 : D={ai|ai∈ADT MazeType , i = 0,1,2……n , n≥0} 数据关系 : R1={ <ai-1,ai> | ai-1,ai ∈D,i=2,……n } 基本操作 : InitStack(SqStack &s) 操作结果 : 构造一个空栈 GetTop(SqStack s,SElemType &e) 初始条件 : 栈 s 以存在 操作结果 : 获取栈顶元素 Push(SqStack &s,SElemType &e) 初始条件 : 栈 s 以存在 操作结果 : 在栈顶插入新元素 Pop(SqStack &s,SElemType &e)
录
称
清
单
资料数量 1 1 1 张 备 注
课程设计任务书 课程设计说明书 课程设计图纸
1
II
课程设计任务书
2009 —2010 学年第 二 学期
计算机与通信
学院(系、部) 数据结构
通信工程
专业
092
班级
课程名称: 设计题目:
编制一个车厢调度的程序 2010 年 7 月 10 日共 一 周
完成期限:自 2010 年 6 月 28 日至
X
XI
printf(" printf(" printf(" printf(" printf("
* 2:输出所有可能序列: *\n"); * *\n"); * 3:退出本程序: *\n"); ************************ \n"); 请你根据需要选择序号\n");
scanf("%d",&m); if(m==1) { printf("请输入Biblioteka Baidu厢长度:\n"); scanf("%d",&n); printf("车厢长度已输入!\n"); getchar();//停止 getchar(); } if(m==2) { Initstack(); push(1); printf("所有输出序列:\n"); process(1,path,0); //从 1 开始,递归处理所有元素 getchar();//停止 getchar(); } if(m==3) printf("欢迎退出!\n"); printf("\n"); if(m!=1&&m!=2&&m!=3) { printf("\n 输入有误!请重新输入!"); getchar();//停止 getchar(); } }while(m!=3); }
IX
X
s.top++; s.data[s.top]=q; } int pop()//出栈 { int temp; temp=s.data[s.top]; s.top--; return temp; } int Emptys()//判断栈空 { if(s.top==-1) return 1; else return 0; }
2) 3) 4) 5)
各模块之间的调用如下:
主程序模块
选择模块
递归模块
栈模块
调度模块
4.求解调度通路的伪码算法:
VIII
IX
设定当前位置的初值为入口位置; Do { 若当前位置可通,按任意键进行,同时选择你需要的功能 if(m==1) { 输入你的你的车厢长度 } if(m==2) { 调用递归函数,输出所有可能的序列 } if(m==3) { 欢迎你使用,系统 } }while ( 栈不空 ); { 栈空说明没有路径存在 }
车厢调度 选题
优 成绩分布 学生数 百分比
良
中
及格
不及格
学生课程设计存在 的主要问题
改进措施及建议
指导教师(签字) : 系(教研室)主任(签字) :
年 年
月 月
日 日
备注:本表在课程设计完成后由指导教师填写,与课程设计资料一起存档。
IV
V
目录
1. 题目……………………………………………
VI
2. 概要设计 ………………………………………VII
I
数据结构课程设计
资
课程名称 学生姓名 题 成 目 绩 数据结构 指导教师 通信工程
料
二 职称 学号 博士
袋
学期
计算机与通信 学院(系、部)2009 ~ 2010 学年第
专业班级
编制车厢调度的程序
起止日期 2010 年 6 月 28 日~ 2010 年 7 月 10 日
目
序号 1 2 3 4 5 6 材 料 名
三、功能函数设计
本系统主要是考虑对栈的使用,循环队列和双向链表的运用。
--------------------------头文件设计(部分)--------------------本部分是讲述栈的相关操作: #include"stdlib.h" #include"stdafx.h" #include <windows.h> #include"stdio.h" #include <conio.h> #define MaxLen 100 struct Stack_node { int data[MaxLen]; int top; }s; //定义一个栈指针 int n;//定义输入序列总个数 //----------------栈的基本操作---------------void Initstack() { s.top=-1; } void push(int q)//元素 n 进栈 {
一、设计的主要技术参数 使用栈机制模拟迷宫的寻路过程, 图的 DFS 自动生成随机迷宫地图。
内 容 及 任 务
二、设计任务 使用 C 语言实现各个模块的功能。 三、设计工作量 王灿阳负责对栈的基本操作,我实现车厢的调度的进和出,以及状态的变化。
起止日期 进 度 安 排
2010-6-28 2010-6-30 2010-7-6 2010-7-7 设计本程序思路 实现子程序模块函数
工作内容
将子程序和主程序构建成完整的 C 源程序,并且进行相关编译 调试 数据测试、形成文档
指 导 教 师 (签字) :
年
月
日
系 ( 教 研 室 ) 主 任 ( 签字) :
年
月
日
2
III
数据结构
设计说明书
数据结构课程设计
编制一个车厢调度的程序
起止日期:
2010 年 6 月 28 日 至
2010 年 7 月 10 日