1、栈与队列 实 验 报 告实验课程名称 数据结构与算法 实验项目名称 栈与队列 年 级 2010级 专 业 信息与计算机科学 学生姓名张胜(1007010162)郭小兵(1007010210) 潘曦(1007010211) 理 学 院实验时间: 2012 年 10 月 13 日学生实验室守则一、按教学安排准时到实验室上实验课,不得迟到、早退和旷课。二、进入实验室必须遵守实验室的各项规章制度,保持室内安静、整洁,不准在室内打闹、喧哗、吸烟、吃食物、随地吐痰、乱扔杂物,不准做与实验内容无关的事,非实验用品一律不准带进实验室。三、实验前必须做好预习(或按要求写好预习报告),未做预习者不准参加实验。四、
2、实验必须服从教师的安排和指导,认真按规程操作,未经教师允许不得擅自动用仪器设备,特别是与本实验无关的仪器设备和设施,如擅自动用或违反操作规程造成损坏,应按规定赔偿,严重者给予纪律处分。五、实验中要节约水、电、气及其它消耗材料。六、细心观察、如实记录实验现象和结果,不得抄袭或随意更改原始记录和数据,不得擅离操作岗位和干扰他人实验。七、使用易燃、易爆、腐蚀性、有毒有害物品或接触带电设备进行实验,应特别注意规范操作,注意防护;若发生意外,要保持冷静,并及时向指导教师和管理人员报告,不得自行处理。仪器设备发生故障和损坏,应立即停止实验,并主动向指导教师报告,不得自行拆卸查看和拼装。八、实验完毕,应清理
3、好实验仪器设备并放回原位,清扫好实验现场,经指导教师检查认可并将实验记录交指导教师检查签字后方可离去。九、无故不参加实验者,应写出检查,提出申请并缴纳相应的实验费及材料消耗费,经批准后,方可补做。十、自选实验,应事先预约,拟订出实验方案,经实验室主任同意后,在指导教师或实验技术人员的指导下进行。十一、实验室内一切物品未经允许严禁带出室外,确需带出,必须经过批准并办理手续。学生所在学院:理学院 专业:信息与计算机科学 班级:信计101班姓 名郭小兵学 号1007010210实验组1实验时间2012-10-10指导教师彭长根成 绩实验项目名称 栈与队列实验目的及要求:目的:通过编程实现多项式的运算
4、,复习数组和c语言的相关知识; 要求:画出流程图,在计算机上实现整个算法。实验硬件及软件平台:PC机,vc+6.0,。实验(或算法)原理:栈的逻辑结构和我们先前学过的线性表相同,如果它是非空的,则有且只有一个开始结点,有且只能有一个终端结点,其它的结点前后所相邻的也只能是一个结点(直接前趋和直接后继),但是栈的运算规则与线性表相比有更多的限制,栈(Stack)是仅限制在表的一端进行插入和删除运算的线性表,通常称插入、删除这一端为栈顶,另一端称为栈底。表中无元素时为空栈。栈的修改是按后进先出的原则进行的,我们又称栈为LIFO表(Last In First Out). 队列(Queue,念Q音)也
5、是一种运算受限的线性表,它的运算限制与栈不同,是两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端称为队头 (Front) ,队列的操作原则是先进先出的,所以队列又称作FIFO表(First In First Out)。实验步骤:1根据算法事先写出相应程序。2启动PC机,进入vc集成环境,输入代码。3编译调试。4调试通过,计算出正确结果。实验内容(包括实验具体内容、算法分析、源代码等等):#include#include#include#define stack_init_size 200#define
6、stack_increment 10#define OVERFLOW 0#define OK 1#define ERROE 0#define TRUE 1#define FALSE 0typedef int Status;typedef struct int x; int y;PosType;typedef struct int ord; / 通道块在路径上的序号 PosType seat; /通道块在迷宫中的坐标位置 int di; /从此通道块走向下一通道块的方向SElemType;typedef struct SElemType *base; SElemType *top; int st
7、acksize;SqStack;int mg2020;void Random() int i,j,k; srand(time(NULL); mg10=mg11=mg1819=0; /将入口、出口设置为0即可通过for(j=0;j20;j+) mg0j=mg19j=1; /*设置迷宫外围不可走,保证只有一个出口和入口*/ for(i=2;i19;i+) mgi0=mgi-119=1; /*设置迷宫外围不可走,保证只有一个出口和入口*/ for(i=1;i19;i+) for(j=1;j=s.stacksize) s.base=(SElemType *)realloc(s.base,(s.stac
8、ksize+stack_increment) *sizeof(SElemType); if(!s.base)exit(OVERFLOW); s.top=s.base+s.stacksize; s.stacksize+=stack_increment; *s.top+=e; return OK;/出栈Status Pop(SqStack &s,SElemType &e) if(s.top=s.base) return ERROE; e=*-s.top; return OK;/下一步PosType NextPos(PosType &e,int dir) PosType E; switch(dir)
9、 case 1:E.x=e.x; /向下 E.y=e.y+1; break; case 2:E.x=e.x+1; /向右E.y=e.y; break; case 3:E.x=e.x; /向上 E.y=e.y-1; break; case 4:E.x=e.x-1; /向左 E.y=e.y; break; return E;/是否空栈Status StackEmpty(SqStack s) if (s.top=s.base) return OK; return OVERFLOW; /留下不能通过的足迹Status MarkPrint(PosType e) mge.xe.y=3; return OK
10、;/迷宫函数/ 若迷宫maze中从入口 start到出口 end的通道,则求得一条存放在栈中/ (从栈底到栈顶),并返回TRUE;否则返回FALSEStatus MazePath(int mg,PosType start,PosType end,SqStack &s) PosType curpos; InitStack(s); SElemType e; int curstep; curpos=start; / 设定当前位置为入口位置curstep=1; / 探索第一步 do if(Pass(curpos) / 当前位置可通过,即是未曾走到过的通道块 FootPrint(curpos); / 留
11、下足迹 e.di =1; e.ord = curstep; e.seat= curpos; Push(s,e); / 加入路径 if(curpos.x=end.x&curpos.y=end.y) printf(nn0_0 能到达终点!); return TRUE; curpos=NextPos(curpos,1); / 下一位置是当前位置的东邻 curstep+; / 探索下一步 else / 当前位置不能通过 if(!StackEmpty(s) Pop(s,e); while(e.di=4&!StackEmpty(s) MarkPrint(e.seat); Pop(s,e); if(e.di
12、4) e.di+; Push(s,e); / 留下不能通过的标记,并退回一步 curpos=NextPos(e.seat,e.di); /* 当前位置设为新方向的相邻块*/ /if /if /else while(!StackEmpty(s); printf(nn囧 ! 不能到达终点!); return FALSE;/打印迷宫void PrintMaze() int i,j; printf(运行路径:nn); for(i=0;i20;i+) for(j=0;j20;j+) if(mgij=0)printf( ); else if(mgij=1) printf(); /迷宫的墙 else if(
13、mgij=3) printf(); /不通的路 else if(mgij=7)printf(); /通过的路径 printf(n); printf(n);void main() SqStack S; PosType start,end; start.x=1;start.y=0; /起点坐标 end.x=18;end.y=19; /终点坐标 printf(n=迷宫游戏=); printf(n说明:不能走的区域t走不通的区域); printf(n 空格代表未到过的区域); printf(n 代表能通过的路径,指向终点); printf(n=); Random(); printf(nnTest 1:); MazePath(mg2020,start,end,S); PrintMaze(); system(pause); Random();printf(nTest 2:); MazePath(mg2020,start,end,S); PrintMaze(); system(pause); Random(); printf(nTest 3:); MazePath(mg2020,start,end,S); PrintMaze(); printf(n=程序退出,感谢使用!=n);实验结果与讨论:在做本实验的过程中,顺利完成实验的各个过程!指导教师意见:签名: 年 月 日
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1