2数据结构 实验报告二(栈和队列及其应用)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2数据结构实验报告二(栈和队列及其应用)
2数据结构-实验报告二(栈和队列及其应用)
实验二堆栈和队列及其应用1。
实验目的
1.掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正确选用它们。
2.掌握栈型的两种实现方法。
3.熟练掌握循环队列和链队列的基本操作实现算法。
二、实验内容
用队列解决迷宫问题[问题描述]
以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和墙壁。
设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
[基本要求]
实现了一种具有顺序存储结构的队列类型,然后编写了一个非递归程序来求解迷宫。
获得的路径以三元组(I,J,pre)的形式输出,其中:(I,J)表示迷宫中的坐标,pre
表示队列中路径中最后一个块的下标。
[测试数据]由学生任意指定。
三、源代码
#include#definem5#definen5
//行//列
//队最多元素个数
//迷宫应该由一个{1,1,
#definemaxsize100intmg[m+2][n+2]={{1,1,1,1,1,1,1},{1,0,0,0,0,0,1},{1,0,1,0,0,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}};
typedefstruct{inti,j;intpre;}box;
typedefstruct{
boxdata[maxsize];intfront,rear;
}qutype;
voidmgpath1(intxi,intyi,intxe,intye)//搜索路径为:(xi,yi)
{voidprint(qutypequ,intfront);
->(xe,ye)
inti,j,find=0,di;
qutypequ;//定义序列队列qu.front=qu.rear=-1;qu.rear++;
qu.data[qu.rear].i=xi;//(xi,yi)进队
qu.data[qu.rear].j=yi;qu.data[qu.rear].pre=-1;mg[xi][yi]=-1;
而(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;
印刷品(曲式,曲式正面);
2
}对于(di=0;di<4;di++)
{switch(di){case0:i=qu.data[qu.front].i-1;j=qu.data[qu.front].j;break;
案例
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;打破案例
3:i=qu.data[qu.front].i;j=qu.data[qu.front].j-1;break;}
如果(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;}
}
}}
voidprint(qutypequ,intfront){intk=front,j,ns=0;printf(\
do
三
{j=k;
k=qu.data[k]。
之前;qu.data[j]。
pre=-1;}
while(k!=0);
Printf(\迷宫路径如下:\\n\k=0;
while(kprintf(\if(ns%5==0)printf(\}k++;}printf(\}voidmain(){mgpath1(1,1,m,n);p rintf(\迷宫所有路径如下:\\n\}四、测试结果:4五、心得体会做实验首先要掌握大量的理论知识,然后认真去完成实验。
做实验过程会碰见较大的困难,这就要需要我们的毅力。
小小的迷宫隐藏大大的奥秘。
5。