用两个栈实现一个队列的功能?要求给出算法和思路!答案:设2个栈为A,B, 一开始均为空. 入队: 将新元素push入栈A; 出队: (1)判断栈B是否为空; (2)如果不为空,则将栈A中所有元素依次pop出并push到栈B; (3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O(1), 比上面的几种...
以下是用两个栈实现队列的伪代码: // 定义两个栈Stack A, B; // 入队操作void enqueue(int x) { push(A, x); // 元素压入栈A} // 出队操作int dequeue() { int x; if (is_empty(B)) { // 如果栈B为空,则将栈A中的元素全部移到栈B中 while (!is_empty(A)) { x = pop(A); pus...
解析 答案:设2个栈为A,B,一开始均为空.入队:将新元素push入栈A;出队:(1)判断栈B是否为空;(2)如果不为空,则将栈A中所有元素依次pop出并push到栈B;(3)将栈B的栈顶元素pop出;这样实现的队列入队和出队的平摊复杂度都还是O(1),比上面的几种方法要好。