一、栈和队列
其余Vector方法:
Vector类
栈:先进后出,是限制在表的一端进行插入和删除的线性表。允许插入、删除的这一端称为栈顶,另一个固定端称为栈底。
队列:先进先出,是运算受限制的线性表,插入在表的一端进行,称为队尾,删除在表的另一端进行,称为队头。
二、思路
入队:
由于栈先进后出和队列先进先出的特性,只考虑入队操作时,不用考虑出队的顺序,可以用一个栈1的进栈操作模拟入队操作。
出队:
队列的出队顺序与出栈顺序相反,可以想到,当栈中元素的入栈顺序与队列的入队顺序相反时,出栈顺序就与出队顺序一致。考虑栈的出栈顺序与入栈顺序相反,因此可以将栈1中的元素依次出栈并依次存入栈2中,此时栈2的出栈顺序就与队列的出队顺序相同了。
入队操作完全由栈1执行入栈操作不考虑栈2;出队操作需要先进行栈2是否为空的判断,当栈2不为空时,出队操作由栈2直接执行出栈操作;当栈2为空时,需要先将栈1数据出栈压入栈2,再由栈2进行出栈操作。
三、代码
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
Integer temp;
if(stack2.empty()){
while(!stack1.empty()){
temp = stack1.pop();
stack2.push(temp);
}
}
if (stack2.empty()){
return -1;
}
int head = stack2.pop();
return head;
}
}