文档详情

数据结构栈与队列报告.doc

发布:2017-08-24约6.4千字共10页下载文档
文本预览下载声明
栈和队列上机实习 1、实验目的: (1)熟练掌握栈的逻辑结构和操作规则,能在相应的实际问题中正确选用该结构。 (2)熟练掌握栈的2种存储结构实现方法(顺序栈和链栈),两种存储结构和基本运算的实 现算法,注意栈空盒满的判断条件及它们的描述方法。 (3)熟练掌握队列的逻辑结构和操作规范,能在相应的实际问题中正确选用该结构。 (4)掌握循环队列与链队列两种存储结构的实现,熟练掌握各种队列基本运算的实现。 2、实验要求: (1)顺序栈的插入、删除,栈顶数据元素的读取。 (2)链栈的插入、删除,栈顶数据元素的读取。 (3)循环队列的插入、删除。 (4)链队列的插入、删除。 实验内容: 栈 (1)抽象数据类型定义 typedef struct { ElemType data[MaxSize]; //栈的空间大小为MaxSize int top; //设置栈顶指针 }SqStack; //栈的结构定义 在本次实验中,首先建立一个空栈,进入主程序后首先初始化栈为其分配空间,然后进入菜单选择界面,通过不同的数字输入,实现入栈,出栈,读取栈顶元素,显示栈的所有元素,栈的长度,释放栈等操作。 (2)存储结构定义及算法思想 在栈结构体的定义中,typedef int Typeelem 为整型,存储结构(入栈)如下: cina; s-top++; //在入栈是首先将栈顶指针向上加1 s-data[s-top]=a; //与数组赋值一样,直接赋值 //其他存储与此类似,都是直接赋值与数组的某一位 退栈函数模块: void Pop(SqStack * s){ //对指针的引用 if(s-top ==-1){ cout栈是空栈,不能退栈endl; //首先判断是否为空栈,若为空,则退出 return ; } cout退栈的元素为:s-data[s-top]endl; //显示退栈元素 s-top--; //栈顶元素减1,指向实际栈的最上面 } 显示栈所有元素函数模块: void DispStack (SqStack *s) { //从栈顶到栈底顺序显示所有元素 int i; cout栈的元素分别为:endl; for(i=s-top;i=0;i--){ couts-data[i] ; //同过循环实现实现从栈顶元素到栈底元素的遍历以输出 } coutendl; } 栈结构的入栈和退栈是两个相反的过程,先进后出,入栈是先让栈顶指针加1,指向未被赋值位置,然后进行赋值,退栈是先取出退栈元素,然后栈顶元素减1,指向推展后的实际栈顶。诸如读取栈顶元素,显示栈的元素,读取栈的长度,都是用过对栈顶指针实现相关操作。 实验结果与分析 循环队列 抽象数据类型定义 typedef struct { ElemType elem[Maxqsize]; //循环队列的长度为MaxSize int front,rear; //设置队列的头指针和尾指针 }SqQueue; //循环队列的结构体定义 在本次实验中,首先建立一个空队列,进入主程序后首先初始化队列为其分配空间,然后进入菜单选择界面,通过不同的数字输入,实现入队,出队,显示队列的所有元素,队列的长度,释放队列等操作。 (2)存储结构定义及算法思想 在队列结构体的定义中,typedef int Typeelem 为整型,存储(入队)结构如下: q-rear=(q-rear+1)%Maxqsize; //尾指针加1 q-elem[q-rear]=a; //将入队元素装到新的空尾部 在此队列的存储结构的实现:先让队尾指针进1,再将新的元素加入到队尾指针所指示的位置,因此,队尾指针指示实际的队尾位置,队头指针指示实际队头的前一位置,要想退出队头元素,必须先让队头指针进1,才能取出队头元素。 退队函数模块如下: void deQueue(SqQueue *q){ //对指针的引
显示全部
相似文档