用两个栈模拟一个队列的操作
- 格式:doc
- 大小:107.00 KB
- 文档页数:8
一、实验目的通过本次实验,加深对堆栈和队列数据结构的理解,掌握堆栈的基本操作,并学会利用堆栈模拟队列的功能。
通过实验,培养学生的编程能力和问题解决能力。
二、实验内容1. 实现一个顺序堆栈,包括初始化、判断是否为空、入栈、出栈等基本操作。
2. 利用两个顺序堆栈实现队列的功能,包括入队、出队、判断队列是否为空等操作。
3. 通过实例验证模拟队列的正确性。
三、实验原理队列是一种先进先出(FIFO)的数据结构,而堆栈是一种后进先出(LIFO)的数据结构。
本实验通过两个堆栈来实现队列的功能。
当元素入队时,将其压入第一个堆栈(称为栈A);当元素出队时,先从栈A中依次弹出元素并压入第二个堆栈(称为栈B),直到弹出栈A中的第一个元素,即为队首元素。
四、实验步骤1. 定义堆栈的数据结构,包括堆栈的最大容量、当前元素个数、堆栈元素数组等。
2. 实现堆栈的基本操作,包括初始化、判断是否为空、入栈、出栈等。
3. 实现模拟队列的功能,包括入队、出队、判断队列是否为空等。
4. 编写主函数,创建两个堆栈,通过实例验证模拟队列的正确性。
五、实验代码```c#include <stdio.h>#include <stdlib.h>#define MAX_SIZE 100typedef struct {int data[MAX_SIZE];int top;} SeqStack;// 初始化堆栈void InitStack(SeqStack S) {S->top = -1;}// 判断堆栈是否为空int IsEmpty(SeqStack S) {return S->top == -1;}// 入栈int Push(SeqStack S, int x) {if (S->top == MAX_SIZE - 1) { return 0; // 堆栈已满}S->data[++S->top] = x;return 1;}// 出栈int Pop(SeqStack S, int x) {if (IsEmpty(S)) {return 0; // 堆栈为空}x = S->data[S->top--];return 1;}// 队列的入队操作void EnQueue(SeqStack S, SeqStack Q, int x) { Push(S, x);}// 队列的出队操作int DeQueue(SeqStack S, SeqStack Q, int x) { if (IsEmpty(Q)) {while (!IsEmpty(S)) {int temp;Pop(S, &temp);Push(Q, temp);}}if (IsEmpty(Q)) {return 0; // 队列为空}Pop(Q, x);return 1;}int main() {SeqStack S, Q;int x;InitStack(&S);InitStack(&Q);// 测试入队操作EnQueue(&S, &Q, 1);EnQueue(&S, &Q, 2);EnQueue(&S, &Q, 3);// 测试出队操作while (DeQueue(&S, &Q, &x)) {printf("%d ", x);}return 0;}```六、实验结果与分析1. 通过实例验证,模拟队列的入队和出队操作均正确实现了队列的先进先出特性。
数据结构简答题和论述题1、试描述数据结构和抽象数据类型的概念与程序设计语⾔中数据类型概念的区别。
【解答】数据结构是指相互之间存在⼀定关系的数据元素的集合。
⽽抽象数据类型是指⼀个数据结构以及定义在该结构上的⼀组操作。
程序设计语⾔中的数据类型是⼀个值的集合和定义在这个值集上⼀组操作的总称。
抽象数据类型可以看成是对数据类型的⼀种抽象。
串:是零个或多个字符组成的有限序列。
串是⼀种特殊的线性表,它的每个结点仅由⼀个字符组成。
空串 :长度为零的串,它不包含任何字符。
空⽩串 :仅由⼀个或多个空格组成的串⼦串 :串中任意个连续字符组成的⼦序列称为该串的⼦串。
串变量和串常量通常在程序中使⽤的串可分为:串变量和串常量。
(1)串变量 :串变量和其它类型的变量⼀样,其取值是可以改变的。
(2)串常量 :串常量和整常数、实常数⼀样,在程序中只能被引⽤但不能改变其值。
即只能读不能写。
(1)树形图表⽰: 树形图表⽰是树结构的主要表⽰⽅法。
(2)树的其他表⽰法① 嵌套集合表⽰法:是⽤集合的包含关系来描述树结构。
② 凹⼊表表⽰法:类似于书的⽬录③ ⼴义表表⽰法:⽤⼴义表的形式表⽰的。
上图 (a)树的⼴义表表⽰法如下:(A(B(E,F(I,J)), C,D(G,H)))1.中序遍历的递归算法定义:若⼆叉树⾮空,则依次执⾏如下操作:(1)遍历左⼦树; (2)访问根结点; (3)遍历右⼦树。
2.先序遍历的递归算法定义:若⼆叉树⾮空,则依次执⾏如下操作:(1) 访问根结点; (2) 遍历左⼦树; (3) 遍历右⼦树。
3.后序遍历得递归算法定义:若⼆叉树⾮空,则依次执⾏如下操作:(1)遍历左⼦树; (2)遍历右⼦树; (3)访问根结点。
2、链表具有的特点是B 插⼊、删除不需要移动元素C 不必事先估计存储空间D 所需空间与线性表长度成正⽐顺序队列(1)队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。
(2) 顺序队列的表⽰①和顺序表⼀样顺序队列⽤⼀个向量空间存放当前队列中的元素。
算法(第四版)C#习题题解——1.3.49⽤6个栈实现⼀个O(1)队列因为这个解法有点复杂,因此单独开⼀贴介绍。
那么这⾥就使⽤六个栈来解决这个问题。
这个算法来⾃于。
原⽂⾥⽤的是 Pure Lisp,不过语法很简单,还是很容易看懂的。
先导知识——⽤两个栈模拟⼀个队列如何使⽤两个栈来模拟⼀个队列操作?这是⼀道很经典的题⽬,答案也有很多种,这⾥只介绍之后会⽤到的⼀种⽅法。
⾸先我们有两个栈,H 和 T,分别⽤作出队和⼊队⽤。
这样,⼊队操作等同于向 T 添加元素,T 的⼊栈操作只需要 O(1) 时间。
如果 H 不为空,出队操作等同于 H 弹栈,H 的弹栈操作也只需要 O(1) 时间。
但如果 H 为空,则需要将 T 中的元素依次弹出并压⼊到 H 中,这是⼀个 O(n) 的操作。
显然,这种⽅式中,出队操作的最坏时间复杂度是 O(n),并不满⾜题⽬要求。
分摊 O(n)那么,怎么解决这个问题呢?⼀个很⾃然的想法是,如果在栈 H 变为空之前,我们就能逐步将栈 T 的内容弹出并压⼊到另⼀个栈 H' 中,等到栈 H 为空时,直接交换 H 和 H' 即可。
假设⽬前的队列状态是这样,有三个元素等待出队,还有三个元素等待⼊队。
现在依次让三个元素出队,与此同时我们让栈 T 中的元素依次进⼊ H' 中。
每⼀次出队都执⾏两个操作,元素出队和元素复制(Pop & Push),时间复杂度 O(1) + O(1) + O(1) = O(1)。
第⼀次操作(出队)第⼆次操作(出队)第三次操作(出队)现在栈 H 和栈 T 都为空,下⼀次出队操作时,我们直接交换栈 H 和栈 H'(由于是交换引⽤,因此时间复杂度仍为 O(1))。
之后再进⾏出队操作。
这就是这个算法基本想法,在栈 H 变为空之前,分步将栈 T 中的内容分步复制到另⼀个栈中。
当栈 H 为空时直接⽤准备好的栈 H' 替代 H,保证时间复杂度为常数。
第1题单选题一个程序根据输入的年份和月份计算该年中该月的天数,输入参数包括年份(正整数)、月份(用1~12表示)。
若用等价类划分测试方法进行测试,则()不是一个合适的测试用例(分号后表示测试的输出)。
A.(2013,1,31)B.(0,1,‘错误’)C.(0,13,‘错误’)D.(2001,-1,‘错误’)【解析】正确答案:C。
测试用例编写一般原则:1、设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;2、设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
在本题中,C选项同时覆盖了两个无效等价类,所以不符合测试用例编写的一般原则。
第2题单选题下面关于栈和队列的叙述,错误的是()。
A.栈和队列都是操作受限的线性表B.队列采用单循环链表存储时,只需设置队尾指针就可使入队和出队操作的时间复杂度都为O(1)C.若队列的数据规模n可以确定,则采用顺序存储结构比链式存储结构效率更高D.利用两个栈可以模拟一个队列的操作,反之亦可【解析】正确答案:D。
第3题单选题若关系R、S如下图所示,则关系代数表达式π1,3,7 (σ3<6(R×S))与()等价。
A.π A,C,E(σ C<D (R×S))B. π A,R.C,E (σ R.C <S.D (R×S))C.πA,S.C,S.E(σR.C <S.D(R×S))D. πR.A,R.C,R.E(σR.C <S.D(R×S))【解析】正确答案:B。
本题考查关系代数运算方面的基础知识。
本题要求关系代数表达式π1,3,7 (σ3<6(R×S))的结果集,其中,R×S的属性列名分别为:R.A,R.B, R.C,R.D,S.C, S.D和S.E ,其结果如下表所示:σ3<6 (R×S)的含义是从R×S结果集中选取第个分量(R.C),小于第六个分量(S.D )的元组,故σ3<6 (R×S)与σ R.C<S.D (R×S)等价。
习题三栈和队列一单项选择题1. 在作进栈运算时,应先判别栈是否(①),在作退栈运算时应先判别栈是否(②)。
当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为(③)。
①, ②: A. 空 B. 满 C. 上溢 D. 下溢③: A. n-1 B. n C. n+1 D. n/22.若已知一个栈的进栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,...,pn,若p1=3,则p2为( )。
A 可能是2B 一定是2C 可能是1D 一定是13. 有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列()A. 5 4 3 6 1 2B. 4 5 3 1 2 6C. 3 4 6 5 2 1D. 2 3 4 1 5 64.设有一顺序栈S,元素s1,s2,s3,s4,s5,s6依次进栈,如果6个元素出栈的顺序是s2,s3,s4, s6 , s5,s1,则栈的容量至少应该是()B. 3C. 55. 若栈采用顺序存储方式存储,现两栈共享空间V[1..m],top[i]代表第i个栈( i =1,2)栈顶,栈1的底在v[1],栈2的底在V[m],则栈满的条件是()。
A. |top[2]-top[1]|=0B. top[1]+1=top[2]C. top[1]+top[2]=mD. top[1]=top[2]6. 执行完下列语句段后,i值为:()int f(int x){ return ((x>0) x* f(x-1):2);}int i ;i =f(f(1));A.2 B. 4 C. 8 D. 无限递归7. 表达式3* 2^(4+2*2-6*3)-5求值过程中当扫描到6时,对象栈和算符栈为(),其中^为乘幂。
A. 3,2,4,1,1;(*^(+*-B. 3,2,8;(*^-C. 3,2,4,2,2;(*^(-D. 3,2,8;(*^(-8. 用链接方式存储的队列,在进行删除运算时()。
第 3 章特殊线性表——栈、队列和串(2005-07-14) -第 3 章特殊线性表——栈、队列和串课后习题讲解1. 填空⑴设有一个空栈,栈顶指针为1000H,现有输入序列为1、2、3、4、5,经过push,push,pop,push,pop,push,push后,输出序列是(),栈顶指针为()。
【解答】23,1003H⑵栈通常采用的两种存储结构是();其判定栈空的条件分别是(),判定栈满的条件分别是()。
【解答】顺序存储结构和链接存储结构(或顺序栈和链栈),栈顶指针top= -1和top=NULL,栈顶指针top等于数组的长度和内存无可用空间⑶()可作为实现递归函数调用的一种数据结构。
【解答】栈【分析】递归函数的调用和返回正好符合后进先出性。
⑷表达式a*(b+c)-d的后缀表达式是()。
【解答】abc+*d-【分析】将中缀表达式变为后缀表达式有一个技巧:将操作数依次写下来,再将算符插在它的两个操作数的后面。
⑸栈和队列是两种特殊的线性表,栈的操作特性是(),队列的操作特性是(),栈和队列的主要区别在于()。
【解答】后进先出,先进先出,对插入和删除操作限定的位置不同⑹循环队列的引入是为了克服()。
【解答】假溢出⑺数组Q[n]用来表示一个循环队列,front为队头元素的前一个位置,rear为队尾元素的位置,计算队列中元素个数的公式为()。
page: 2The Home of jetmambo - 第 3 章特殊线性表——栈、队列和串【解答】(rear-front+n)% n【分析】也可以是(rear-front)% n,但rear-front的结果可能是负整数,而对一个负整数求模,其结果在不同的编译器环境下可能会有所不同。
⑻用循环链表表示的队列长度为n,若只设头指针,则出队和入队的时间复杂度分别是()和()。
【解答】O(1),O(n)【分析】在带头指针的循环链表中,出队即是删除开始结点,这只需修改相应指针;入队即是在终端结点的后面插入一个结点,这需要从头指针开始查找终端结点的地址。
栈出队列是指用栈实现队列的功能。
队列是一种先进先出(FIFO)的数据结构,而栈是一种后进先出(LIFO)的数据结构。
因此,要实现栈出队列,需要使用两个栈。
栈出队列公式如下:front = top1rear = top2其中,front 表示队列的队头元素,rear 表示队列的队尾元素,top1 表示栈1的栈顶元素,top2 表示栈2的栈顶元素。
栈出队列的实现步骤如下:1. 将元素入队时,先将元素压入栈1。
2. 当需要出队时,先将栈1中的元素弹出并压入栈2。
3. 然后将栈2中的元素弹出并返回。
栈出队列的时间复杂度为 O(n),其中 n 是队列中的元素个数。
栈出队列的优点是实现简单,并且不需要额外的数据结构。
栈出队列的缺点是时间复杂度较高,并且在队尾元素入队时需要将栈1中的元素弹出并压入栈2,这可能会导致栈1的栈顶元素丢失。
栈出队列的应用场景包括:* 实现队列数据结构。
* 实现优先级队列数据结构。
* 实现深度优先搜索算法。
* 实现广度优先搜索算法。
示例以下是一个使用栈实现队列的 Python 代码示例:pythonclass Queue:def __init__(self):self.stack1 = []self.stack2 = []def enqueue(self, item):self.stack1.append(item)def dequeue(self):if not self.stack2:while self.stack1:self.stack2.append(self.stack1.pop()) return self.stack2.pop()def is_empty(self):return not self.stack1 and not self.stack2def size(self):return len(self.stack1) + len(self.stack2)def __str__(self):return str(self.stack1) + str(self.stack2)Test the Queue classqueue = Queue()queue.enqueue(1)queue.enqueue(2)queue.enqueue(3)print(queue) [1, 2, 3]print(queue.dequeue()) 1print(queue) [2, 3]print(queue.size()) 2print(queue.is_empty()) False 输出结果:[1, 2, 3]1[2, 3]2False。
常见算法面试题及答案1. 数组中重复的数字题目:在一个长度为n的数组中,存在一个数字出现两次,而其他数字均出现一次,请找出这个重复的数字。
答案:可以使用哈希表来解决这个问题,遍历数组,将每个数字作为键,出现次数作为值,如果出现次数大于1,则该数字就是重复的数字。
2. 旋转数组的最小数字题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。
答案:可以使用二分查找法。
首先判断数组是否有序,如果有序,则直接返回第一个元素。
如果无序,找到中间元素,比较中间元素和两端元素,如果中间元素小于右边元素,则左边有序,否则右边有序。
在有序的一侧使用二分查找法找到最小值。
3. 斐波那契数列题目:斐波那契数列的第n项是多少?答案:可以使用递归、动态规划或者公式法来解决。
递归方法简单但效率低,动态规划通过构建一个数组来存储已计算的值,公式法通过矩阵快速幂来计算。
4. 二叉树的镜像题目:请完成一个函数,实现二叉树的镜像。
答案:可以使用递归或者迭代的方法。
递归方法是遍历到每个节点,交换其左右子节点。
迭代方法可以使用栈来模拟递归过程。
5. 寻找数组中第k大的元素题目:在未排序的数组中找到第k大的元素。
答案:可以使用快速排序的分区算法,每次分区后找到第k大的元素。
也可以使用大顶堆,将数组元素全部加入堆中,然后重复k-1次弹出堆顶元素。
6. 合并两个有序链表题目:将两个有序链表合并为一个新的有序链表并返回。
答案:可以使用双指针的方法,分别指向两个链表的当前节点,比较节点值,将较小的节点添加到新链表中,然后移动指针,直到一个链表为空。
7. 字符串的排列题目:输入一个字符串,打印出该字符串中字符的所有排列。
答案:可以使用回溯法。
创建一个递归函数,每次选择一个字符作为排列的第一个字符,然后递归排列剩下的字符。
8. 两个栈实现队列题目:用两个栈实现一个队列。
队列的声明是先入先出,栈是后入先出。
算法与数据结构C语⾔版课后习题答案(机械⼯业出版社)第3,4章习题参考答案第3章栈和队列⼀、基础知识题3.1有五个数依次进栈:1,2,3,4,5。
在各种出栈的序列中,以3,4先出的序列有哪⼏个。
(3在4之前出栈)。
【解答】34215 ,34251,345213.2铁路进⾏列车调度时,常把站台设计成栈式结构,若进站的六辆列车顺序为:1,2,3,4,5,6,那么是否能够得到435612, 325641, 154623和135426的出站序列,如果不能,说明为什么不能;如果能,说明如何得到(即写出"进栈"或"出栈"的序列)。
【解答】输⼊序列为123456,不能得出435612和154623。
不能得到435612的理由是,输出序列最后两元素是12,前⾯4个元素(4356)得到后,栈中元素剩12,且2在栈顶,不可能让栈底元素1在栈顶元素2之前出栈。
不能得到154623的理由类似,当栈中元素只剩23,且3在栈顶,2不可能先于3出栈。
得到325641的过程如下:1 2 3顺序⼊栈,32出栈,得到部分输出序列32;然后45⼊栈,5出栈,部分输出序列变为325;接着6⼊栈并退栈,部分输出序列变为3256;最后41退栈,得最终结果325641。
得到135426的过程如下:1⼊栈并出栈,得到部分输出序列1;然后2和3⼊栈,3出栈,部分输出序列变为13;接着4和5⼊栈,5,4和2依次出栈,部分输出序列变为13542;最后6⼊栈并退栈,得最终结果135426。
3.3若⽤⼀个⼤⼩为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除⼀个元素,再加⼊两个元素后,rear和front的值分别为多少?【解答】2和43.4设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,⼀个元素出栈后即进队列Q,若6个元素出队的序列是e3,e5,e4,e6,e2,e1,则栈S的容量⾄少应该是多少?【解答】43.5循环队列的优点是什么,如何判断“空”和“满”。
《数据结构》实验报告◎实验题目: 用两个栈模拟一个队列的操作◎实验目的:1.了解栈与队列的操作规则;2.熟悉栈的基本操作;3.掌握使用visual c++6.0上机调试程序的基本方法。
◎实验内容:用两个栈模拟一个队列的操作。
一、需求分析说明程序设计的任务,强调的是程序要做什么,明确规定:1、入队值均为整型元素;2、当队空时输出“队空”,当队满时输出“队满”,其他情况输出均为整型元素;3、程序所能达到的功能:通过两个栈中元素的出栈与进栈来模拟队中元素的操作规则;4、测试数据:本程序中先为选择部分,选择j代表有元素要入队,选择c代表有元素要出队,e代表结束,其他时为选择错误:(1)选择f,下一步需要输入需要进队的元素,本实验要求队中元素均为整型元素,按回车键,则会输出现有队中元素,均为整型元素;(2)选择c,然后选择出栈元素个数,则会输出出栈的元素及队中剩余元素;(3)选择e,则退出模拟操作;(4)选择其他,则要求重新选择。
二概要设计1.定义栈;2.初始化栈函数;3.判断栈空函数;4.判断栈满函数;5.进栈函数让元素进栈;6.出队函数{if(栈空) return 0;else {return 出栈元素};}9.输出队中元素函数{if(栈1非空){将栈1元素全部倒入栈2;将栈2元素逐个实现出栈,输出,压入栈1操作;}else{将栈2元素逐个实现出栈,输出,压入栈1操作;}}8.入队函数{if(栈2非空) 将栈2中元素全部压入栈1;要入队元素压入栈1;else 直接将要入队元素压入栈1;}9.出队函数{if(栈2非空) 让栈2栈顶元素出栈并输出;else{if(栈1为空) 则队空;else{将栈1元素全部压入栈2;栈2栈顶元素出栈;}}输出队中元素;}10.主函数{定义两个栈s1,s2;初始化栈1,栈2;输入选择;当不选择结束时{if(选择入队){输入要入队元素个数;输入要入队元素;元素入队并输出;}if(选择出队){选择出队元素个数;元素出队并输出;判断队空;}输入选择;}}三详细设计1.数据类型:选择元素类型为字符型,队中元素均为整型;2. 定义栈typedef struct{int data[MAXSIZE];int top;}SeqStack;初始化栈函数;void initstack(SeqStack &s) //初始化顺序栈{s.top=-1;}判断栈空函数;int StackEmpty(SeqStack &s) //判断栈是否为空{if(s.top==-1)return 1;elsereturn 0;}判断栈满函数;int StackFull(SeqStack &s) //判断栈是否为满{if(s.top==MAXSIZE-1)return 1;elsereturn 0;}入栈函数;void push(SeqStack &s,int x) //入栈{s.top++;s.data[s.top]=x;}出栈函数;int pop(SeqStack &s) //出栈{if(StackEmpty(s))return 0;else{return s.data[s.top--];}}输出队中元素函数;void output(SeqStack &s1,SeqStack &s2) //输出队中元素{int n;printf("此时队中元素为:");if(!StackEmpty(s1)){while(!StackEmpty(s1)){n=pop(s1);push(s2,n);}while(!StackEmpty(s2)){n=pop(s2);printf("%d ",n);push(s1,n);}printf("\n");}else{if(!StackEmpty(s2)){while(!StackEmpty(s2)){n=pop(s2);printf("%d ",n);push(s1,n);}printf("\n");}}printf("\n");}进队函数;void enter(SeqStack &s1,SeqStack &s2,int x) //入队{int n;if(!StackEmpty(s2)){while(s2.top!=-1){n=pop(s2);push(s1,n);}push(s1,x);}else{push(s1,x);}}出队函数;int getout(SeqStack &s1,SeqStack &s2) //出队{int n;if(!StackEmpty(s2)){n=pop(s2);return n;}else if(StackEmpty(s2)){if(StackEmpty(s1)){return 0;}else{while(!StackEmpty(s1)){n=pop(s1);push(s2,n);}n=pop(s2);return n;}}}主函数;int main(){int p,n,i=0,out;char ch;SeqStack s1,s2;initstack(s1);initstack(s2);printf("j代表有元素要入队,c代表有元素要出队,e代表结束!\n\n");printf("请选择:");scanf("%c",&ch);while(ch!='e'){if(ch=='j'){printf("请输入进队元素个数:");scanf("%d",&n);printf("请输入进队元素,以空格分隔:");while(i<n&&!StackFull(s1)){scanf("%d",&p);enter(s1,s2,p);i++;}if(i<n) printf("队满!\n");i=0;output(s1,s2);}if(ch=='c'){printf("请输入出队元素个数:");scanf("%d",&n);printf("出队元素为:");while(i<n&&(!StackEmpty(s1)||!StackEmpty(s2))){out=getout(s1,s2);printf("%d ",out);i++;}if(i<n) printf("队已空!");i=0;printf("\n");output(s1,s2);printf("\n");}if(ch!='j'&&ch!='c'&&ch!='e'){printf("请重新选择!\n\n");}ch='0';printf("请选择:");scanf("%s",&ch);}printf("谢谢使用!\n");return 0;}四 使用说明、测试分析及结果1、本程序操作界面友好,按提示操作即可;2、测试结果完全符合预计目标;4、运行界面。
五、实验总结本次试验刚编出的程序每次只能进或出队1个元素,操作极不方便,后经助教老师指导,改出了可以实现一次进出多个元素的队列操作。
总之,通过这次试验,让我对栈和队列的基本操作有了更进一步了解。
教师评语:实验成绩:指导教师签名:批阅日期:。