利用两个栈S1和S2模拟一个队列,如何利用栈的运算实现队列的插入和删除操作,请简述算法思想。
简答题查看答案
请利用两个栈S1和S2来模拟一个队列。已知栈的三个运算定义如下:PUSH(ST,X):元素X入ST栈;POP(ST,X):ST栈顶元素出栈,赋给变量X;Sempty(ST):判ST栈空否。那么如何用栈的运算来实现该队列的三个运算:enqueue:插入一个元素入队列;dequeue:删除一个元素出队列;queue_empty:判队列为空。(请写明算法的思想及必要的注释)
简答题查看答案
已知Q是一个非空队列,S是一个空栈。编写算法,仅用队列和栈的ADT函数和少量工作变量,将队列Q的所有元素逆置。栈的ADT函数有:voidmakeEmpty(SqStacks);置空栈voidpush(SqStacks,ElemTypee);元素e入栈ElemTypepop(SqStacks);出栈,返回栈顶元素intisEmpty(SqStacks);判断栈空队列的ADT函数有:voidenQueue(Queueq,ElemTypee);元素e入队ElemTypedeQueue(Queueq);出队,返回队头元素intisEmpty(Queueq);判断队空
填空题查看答案
假定利用数组a[m]顺序存储一个栈,用top表示栈顶指针,用top= =0表示栈满,该数组所能存储的栈的最大长度为m,当()时,再做退栈运算会发生“下溢”。
单选题查看答案
假定利用数组a[m]顺序存储一个栈,用top表示栈顶指针,用top= =-1表示空,该数组所能存储的栈的最大长度为m,当()时,再做进栈运算会发生“上溢”。
单选题查看答案
36、对于一个栈做进栈运算时,应先判断栈是否为(),做出栈运算时,应先判断别栈是否(),当栈中元素为m时,做栈运算时发生上溢,则说明栈的可用最大容量为()。为了增加内存空间的利用率和减少发生上溢的可能性,由两个栈共享一片连续的内存空间时,应将两栈的()分别设在这片内存空间的两端,这样只有当()时才发生上溢。
填空题查看答案
在作进栈运算时,应先判别栈是否(),在作退栈运算时应先判别栈是否()。当栈中元素为n个,作进栈运算时发生上溢,则说明该栈的最大容量为()。为了增加内存空间的利用率和减少溢出的可能性,由两个栈共享一片连续的内存空间时,应将两栈的()分别设在这片内存空间的两端,这样,当()时,才产生上溢。
填空题查看答案
假定利用数组a[n]顺序存储一个栈,用top表示栈顶指针,用top==n+l表示栈空,该数组所能存储的栈的最大长度为n,则表示栈满的条件是()
单选题查看答案
假定利用数组a[N]顺序存储一个栈,用top表示栈顶元素的下标位置,用top= =-1表示栈空,用top= =N - 1表示栈满,则该数组所能存储的栈的最大长度为()
单选题查看答案