- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
初始条件:栈S已存在。
操作结果:从栈底到栈顶依次对S中的每个元素调用函数visit()。
} ADT Stack
2、设定迷宫的抽象数据类型
ADT maze{
数据对象:
{ai,j|ai,j∈{ ' ',‘0’,‘1’},0<=i<=m+1,0<=j<=n+1,m,n<=15}
数据关系:R={ROW,COL}
p=S;
4、各模块之间的调用关系………………………………5
3、详细设计…………………………………………5
坐标位置类型………………………………………………6
栈类型………………………………………………………6
栈的基本操作设置…………………………………………6
求解迷宫路径的函数算法…………………………………7
创建迷宫……………………………………………………9
主函数………………………………………………………10
四、设计和调试分析…………………………………10
五、用户手册…………………………………………11
六、测试结果…………………………………………12
七、设计心得…………………………………………15
八、参考文献…………………………………………15
九、附录………………………………………………16
坐标位置类型
struct mark //定义迷宫内点的坐标类型
{
int x;
int y;
};
栈类型
struct Element
{
int x,y; //x行,y列
int d; //d下一步的方向
};
typedef struct LStack //链栈
{
Element elem;
struct LStack *next;
操作结果:构造一个空栈S。
DestroyStack(&S)
初始条件:栈S已存在。
操作结果:销毁栈S。
ClearStack(&S)
初始条件:栈S已存在。
操作结果:将S清为空栈。
StackLength(S)
初始条件:栈S已存在。
操作结果:返回栈S的长度。
StackEmpty(S)
初始条件:栈S已存在。
操作结果:若S为空栈,则返回TRUE,否则返回FALSE。
《数据结构》
课程设计报告
学院(系):
班级:
学生学号:姓名:
指导教师:
2012年6月15日
一、需求分析…………………………………………3
二、概要设计…………………………………………3
1、设计栈的抽象数据类型………………………………3
2、设计迷宫的抽象数据类型……………………………4
3、本程序包含四个模块………………………ຫໍສະໝຸດ Baidu………5
}*PLStack;
栈的基本操作设置
int InitStack(PLStack &S)//构造空栈
{
S=NULL;
return 1;
}
int StackEmpty(PLStack S)//判断栈是否为空
{
if(S==NULL)
return 1;
else
return 0;
}
int Push(PLStack &S, Element e)//压入新数据元素
基本操作:
InitMaze(&M,a,row,col)
初始条件:二维数组a[row+2][col+2]已存在,其中自第1行至第row+1行,每行中自第1列至第col+1列的元素已有值,并且以值0表示通路,以值1表示障碍。
操作结果:构成迷宫的字符型数组,以空白字符表示通路,以字符‘1’表示障碍,并在迷宫四周加上一圈障碍。
(1) 栈模块——实现栈抽象数据类型
(2) 迷宫模块——实现迷宫抽象数据类型
(3) 主程序模块:
void mian()
{
}
4、各模块之间的调用关系
主模块程序→迷宫模块→栈模块
3、详细设计:
迷宫问题算法设计:
走迷宫的过程可以模拟为一个搜索的过程:每到一处,总让它按东、东南、南、西南、西、西北、北、东北个方向顺序试探下一个位置;如果某方向可以通过,并且不曾到达,则前进一步,在新位置上继续进行搜索;如果个方向都走不通或曾经到达过,则退回一步,在原来的位置上继续试探下一位置。每前进或后退一步,都要进行判断:若前进到了出口处,则说明找到了一条通路;若退回到了入口处,则说明不存在通路。用一个字符类型的二维数组表示迷宫,数组中每个元素取值“0”(表示通路)或“1”(表示墙壁)。迷宫的入口点在位置(1,1)处,出口点在位置(m,m)处。这个算法,为其寻找一条从入口点到出口点的通路。
{
PLStack p;
p=(PLStack)malloc(sizeof(LStack));
p->elem=e;
p->next=S;
S=p;
return 1;
}
int Pop(PLStack &S,Element &e) //栈顶元素出栈
{
PLStack p;
if(!StackEmpty(S))
{
e=S->elem;
3、程序执行的命令为:1,创建迷宫;2,求解迷宫;3,输出迷宫的解。
2、概要设计:
1、设定栈的抽象数据类型定义
ADT Stack {
数据对象:D={ai| ai∈CharSet,i=1,2…n,n>=0}
数据关系:R1={<ai-1, ai >| ai-1, ai∈D,i=2,…n}
基本操作:
InitStack(&S)
MazePath(&M)
初始条件:迷宫M已被赋值。
操作结果:若迷宫M中存在一条通路,则按以下规定改变迷宫M的状态:以字符’0’表示路径上的位置,字符‘1’表示“死胡同”,否则迷宫的状态不变。
PrintMaze(M)
初始条件:迷宫M已存在。
操作结果:以字符形式输出迷宫。
} ADT maze
3、本程序包含三个模块
迷宫问题
1、需求分析:
1、以一个m*m的方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通道,或得出没有通路的结论。
2、用户需用文件的形式输入迷宫的数据:文件中第一行的数据为迷宫的行数m和列数n;下面用0,1输入整个迷宫,每两个数字之间需加一个空格。
GetTop(S,&e)
初始条件:栈S已存在。
操作结果:若栈S不空,则以e返回栈顶元素。
Push(&S, e)
初始条件:栈S已存在。
操作结果:在栈S的栈顶插入新的栈顶元素e。
Pop(&S,&e)
初始条件:栈S已存在。
操作结果:删除S的栈顶元素,并以e返回其值。
StackTraverse(S,visit())