1 / 5
文档名称:

数据结构试验报告-栈和队列的基本操作.doc

格式:doc   大小:27KB   页数:5页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数据结构试验报告-栈和队列的基本操作.doc

上传人:zxwziyou8 2022/5/31 文件大小:27 KB

下载得到文件列表

数据结构试验报告-栈和队列的基本操作.doc

相关文档

文档介绍

文档介绍:实验二栈和队列的基本操作及其应用
一、实验目的
1、掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用。
2、掌握栈和队列的特点,即后进先出和先进先出的原则。
3、掌握栈和队列的基本运算,如:入栈与出栈,入队与出队等indow. There are n integers in the second line.
Output
There are two lines in the output. The first line gives the minimum values in the window at each position, from left to right, respectively. The second line gives the maximum values.
Sample Input
8 3
1 3 -1 -3 5 3 6 7
Sample Output
-1 -3 -3 -3 3 3
3 3 5 5 6 7
三、设计思路
首先,先做一下自我批评,这次在实验题目的选择上,我太自不量力了。以我自己的想法根本不可太可能完成,因为实在想不出才上网搜后发现自己的思路是错的。我的思路的确上是通过网上搜索后才打开的,这一点我是必须承认的。
解决这个问题,原数据可以用一个数组来存放,然后需要用到两个队列,当窗口移动时,这两个队列分别记录(也可以说是暂时存放)当前窗口的最大数和最小数。
原所有数据用数组存放,入下:
QElemType ns[10000];
为了便于操作,数组的下标从一开始,完全抛弃了0;
队列的结构与节点设计如下:
typedef struct QNode{
QElemType data;
int index; //下标,来源于数组
struct QNode *next; //下一个
struct QNode *last; //上一个
//设前后两个指针就是为了能在队列在两头出队
}QNode,*QueuePtr;
//节点
typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
以存放最小数的队列来说(存放大数的队列类似于小数队列,此处不再累赘),它应该具备两头都能出队的功能,此时这队列我不知道还能不能叫队列,当然了,抛弃数据结构这堂课所谓入队、出对的约束,只单纯的说用结构体,两个指针就可以搞定所有问题,只是那样没了效率,就称不上算法了。当要插入一个数据时e时,先在队列的尾部数据进行判断。方法是这样的:如果尾部数据小于e,则直接插入e;如果尾部数据不小于e,则把尾部数据删除,然后再用e与新的尾部进行比较。就这样循环比较判断下去,直到队列为空跳出循环。
最后再插入e。在判断之前还有一项必须要做的操作就是看队列头部数据的下标是否已经小于当前窗口的左边位置,如果是小于,则说明当前这个所谓的窗口内最小数据已经“过时”,所以必须把它删除掉。这样在进行判断。最后插入的e无论在任何位置,此时队列的数据和数据的下标一定都是递增的(队列的节点数0<Ne<=K),这样,只要每次插入数据后即窗口每移动一格后都读一次队头元素,就可得到所