数据结构与算法实验——利用栈逆置 队列 元素资料

上传人:w****i 文档编号:92506388 上传时间:2019-07-10 格式:DOC 页数:8 大小:183.50KB
返回 下载 相关 举报
数据结构与算法实验——利用栈逆置 队列 元素资料_第1页
第1页 / 共8页
数据结构与算法实验——利用栈逆置 队列 元素资料_第2页
第2页 / 共8页
数据结构与算法实验——利用栈逆置 队列 元素资料_第3页
第3页 / 共8页
数据结构与算法实验——利用栈逆置 队列 元素资料_第4页
第4页 / 共8页
数据结构与算法实验——利用栈逆置 队列 元素资料_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《数据结构与算法实验——利用栈逆置 队列 元素资料》由会员分享,可在线阅读,更多相关《数据结构与算法实验——利用栈逆置 队列 元素资料(8页珍藏版)》请在金锄头文库上搜索。

1、班级:通信1204班 学号:0909123001姓名:谢崇赟利用栈逆置队列元素实验报告利用栈逆置队列元素实验报告通信1204班 谢崇赟实验名称利用堆栈将队列中的元素逆置实验目的1 会定义顺序栈和链栈的结点类型。2 掌握栈的插入和删除结点在操作上的特点。3 熟悉对栈的一些基本操作和具体的函数定义。4 会定义顺序队列和链队列的结点类型。实验内容编制一个能实现“利用堆栈将队列中的元素逆置”的程序。问题描述该程序的功能是实现用堆栈将队列中的元素逆置。该程序包括定义的栈结构类型、队列结构类型以及对每一种栈、每一种队列操作的具体的函数定义和主函数。问题分析该实验是基于堆栈和队列知识的基本功能实现。但相较于

2、简单的顺序栈和队列的定义及操作来说,该实验需要进行一定的算法设计,更加考验实习者的实践应用能力。为了程序的可观性,我选用了栈和队列的基本定义和操作函数(栈和队列的定义、出栈和入栈函数、出队和入队函数)进行程序设计。首先,我建立了一个初始队列,将队列的元素逐个出队并逐个压入预先定义好的栈中,然后再定义一个新队列,将栈中的元素逐个出栈并逐个插入新队列中,最后将初始队列和栈释放空间,至此,程序就可以完成了。实验步骤1需求分析 本演示程序用VC+编写,完成栈的初始化、入栈、出栈,队列的初始化、入队、出队等功能。输入的形式和输入值的范围:插入元素时需要输入插入的位置和元素的值;删除元素时输入删除元素的位

3、置。在所有输入中,元素的值都是整数输出的形式:在所有三种操作中都显示操作是否正确以及操作后栈的内容。其中删除操作后显示删除的元素的值,查找操作后显示要查找元素的位置。程序所能达到的功能:栈的初始化、入栈、出栈、取栈顶元素、队列的初始化、取队头元素、入队、出队。测试数据:建立初始队列为1,2,3,4,5。2概要设计1、为了实现上述程序功能,需要定义单链表的抽象数据类型:typedef struct /*定义队列结构体类型*/ DataType dataMAXSIZE; int front,rear;Sequeue;/*定义DataType为int类型*/typedefintDataType;/*

4、栈的结点类型*/#defineMAXSIZE100typedef struct DataType dataMAXSIZE; int top;Seqstack;/*入队*/Sequeue *Enqueue(Sequeue *sq,int n)/*显示元素*/void Display(Sequeue *s,int n) /*取队列的头元素*/DataType Front(Sequeue *s)/*入栈:把队列内容入栈*/Seqstack *Push(Seqstack *p,Sequeue *s,int n)/*出栈*/ DataType Pop(Seqstack *q)2、本程序包含5个函数:(1

5、)主函数:main()(2)入栈函数:Seqstack *Push(Seqstack *p,Sequeue *s,int n)(3)出栈函数:DataType Pop(Seqstack *q)(4)取队头元素操作:DataType Front(Sequeue *s)(5)入队列操作:Sequeue *Enqueue(Sequeue *sq,int n)函数说明#include#include#define MAXSIZE 100typedef int DataType;/*队列结构*/typedef struct DataType dataMAXSIZE; int front,rear;Seq

6、ueue;/*栈结构*/typedef struct DataType dataMAXSIZE; int top;Seqstack;/*入队*/Sequeue *Enqueue(Sequeue *sq,int n) int x,i=1; printf(请输入队列中的元素:t); while(irear=(sq-rear+1)%MAXSIZE; sq-datasq-rear=x; i+; return sq;/*显示元素*/void Display(Sequeue *s,int n) /*显示时不要移动做出队处理*/ int i=1; int record=s-front; while(idat

7、arecord); i+; /*取队列的头元素*/DataType Front(Sequeue *s) int x; x=s-data(s-front+1)%MAXSIZE; s-front=(s-front+1)%MAXSIZE; return x;/*入栈:把队列内容入栈*/Seqstack *Push(Seqstack *p,Sequeue *s,int n) /* 这里要把队列指针传入*/ int a,i=1; while(itop+; p-datap-top=a; i+; return p;/*出栈*/ DataType Pop(Seqstack *q) int a; a=q-dat

8、aq-top; q-top-; return a;int main(void) int n,b,i=1; Sequeue *sq,*r; Seqstack *p,*q; printf(*n); printf(* *n); printf(* 利用堆栈逆置队列元素 *n); printf(* *n); printf(*n); printf(请输入队列的长度n:t); scanf(%d,&n); sq=(Sequeue *)malloc(sizeof(Sequeue); /*申请一个空间 ,队列*/ sq-front = sq-rear = 0;/*初始化 */ sq=Enqueue(sq,n);

9、printf(逆置前的队列为:t); Display(sq,n); p = (Seqstack *)malloc(sizeof(Seqstack); /*申请一个空间 ,栈 */ p-top =0;/*初始化 */ r = (Sequeue *)malloc(sizeof(Sequeue); /*申请一个空间 ,队列*/ r-front = r-rear = 0;/*初始化 */ q=Push(p,sq,n); r-front=MAXSIZE-1; r-rear=MAXSIZE-1; while(irear=(r-rear+1)%MAXSIZE; r-datar-rear=b; i+; pri

10、ntf(n逆置后的队列为:t); Display(r,n); free(sq);/*释放 */ free(p);/*释放 */printf(n); return 0;程序流程图调试报告因本次实验较为基础,加之平时知识掌握良好,除了在设计程序时花了一定的时间,但执行在程序过程中没有出现明显问题。使用说明心得体会本次实验相对而言比较简易,无需设计复杂算法。过程中涉及的入栈函数、出栈函数、取队头元素操作、入队列操作都是书本上学的,大部分程序仅用顺序语句即可实现,最复杂的也不过是运用了while循环语句,但老实说,循环语句也着实毫无必要,只需再添一个完整的函数以连接出栈和入队操作即可,那反而更简明。我想,在以后的编程中我会更加的出色,能够很快的完成作业!我永远坚信的一句话“长风破浪会有时,直挂云帆济沧海”。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号