2数据结构实验报告二(栈和队列及其应用)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二 栈和队列及其应用
、实验目的
1. 掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正 确选用它们。
2. 熟练掌握栈类型的两种实现方法。
3. 熟练掌握循环队列和链队列的基本操作实现算法。
二、实验内容
用队列求解迷宫问题
[ 问题描述 ]
以一个M*N 的长方阵表示迷宫,0和1分别表示迷宫中的通路和墙壁。设计 一个程序, 对任意设定的迷宫, 求出一条从入口到出口的通路, 或得出没有通路 的结论。
[ 基本要求 ]
实现一个以顺序存储结构的队列类型, 然后编写一个求解迷宫的非递归程序。 求得的通 路以三元组(i ,j ,pre )的形式输出,其中:(i ,j )指示迷宫中的一个坐标,
径中上一个方块在队列中的下标。
三、源代码
# include
{1,1,1,1,1,1,1}, {1,0,0,0,0,0,1}, {1,0,1,0,0,1,1},
pre 表示本路
[ 测试数据 ] 由学生任意指定。
#define M 5
// #define N 5
// 行数 列数 #define MaxSize 100
// int mg[M+2][N+2]={
// 队最多元素个数 一个迷宫 , 其四周要加上均为 1 的外框 {1,1,
{1,0,1,0,0,1,1}, {1,0,1,0,1,0,1}, {1,0,0,0,0,0,
1},
{1,1,1,1,1,1,1} }; typedef struct {int
i,j;
int pre;}
Box; typedef struct
{
Box
data[MaxSize];
int front, rear;
}QuType;
void mgpath1(int xi,int yi,int
xe,int ye) // ->(xe,ye) { void print (QuType qu, int front );
搜索路径为:( xi ,yi ) int
i,j,find=0,d
i; QuType qu;
qu.front=qu.rear=-1; //
定义顺序队
qu.rear++; qu.data[qu.rear].i=xi; //(xi,yi) 进队
qu.data[qu.rear].j=y
i;
qu.data[qu.rear].pre
=-1;
mg[xi][yi]=-1;
while(qu.front!=qu.rear&&!find)
{qu.front++;
i=qu.data[qu.front].i;j=qu.data[qu
.front].j; if(i==xe&&j==ye
)
{find=1;
print(qu,qu.fro
nt);
} for
(di=0;di<4;di++) switch(di) case
0 :i=qu.data[qu.front].i-1;j=qu.data[qu.front].j;break;
case
1:i=qu.data[qu.front].i;j=qu.data[qu.front].j+1;break;
case
2:i=qu.data[qu.front].i+1;j=qu.data[qu.front].j+1;break;
case
3:i=qu.data[qu.front].i;j=qu.data[qu.front].j-1;break;
}
if(mg[i][j]==0)
{find=1;
qu.rear++;
qu.data[qu.rear].i=i; qu.data[qu.rear].j=j;
qu.data[qu.rear].pre=qu.front;
mg[i][j]=-1;
}
void print (QuType qu, int front )
{
int k=front,j,ns=0; printf("\n");
do
{j=k;
k=qu.data[k].pre;
qu.data[j].pre=-1;
}
while (k!=0);
printf(" 迷宫路径如下:\n");
k=0;
while(k { if(qu.data[k].pre==-1) { ns++; printf("\t(%d,%d)",qu.data[k].i,qu.data[k].j); if(ns%5==0)printf("\n"); } k++; } printf("\n"); } void main() { mgpath1(1,1,M,N); printf(" 迷宫所有路径如下:\n"); 四、测试结果: 文档来源为:从网络收集整理.word 版本可编辑.欢迎下载支持. 做实验首先要掌握大量的理论知识, 大的困难,这就要需要我们的毅力。小小的迷宫隐藏大大的奥秘。 然后认真去完成实验。做实验过程会碰见较