栈
JAVA中栈类是继承了Vector实现的,基本特征是先入后出,并且只能在一侧进出
方法 | 作用 |
---|---|
empty() | 栈空返回真,否则返回假 |
peek() | 获取栈顶值,不出栈 |
pop() | 栈顶值出栈 |
push() | 入栈 |
队列
JAVA中队列是接口,继承了Collection类,先入先出。
方法 | 作用 |
---|---|
add() | 入队(若失败则抛出IllegalStateException异常) |
offer() | 将指定元素插入队列,成功返回true,否则返回false |
element() | 获取队头的值,但不出队(若队列为空则抛出异常NoSuchElementException) |
peek() | 获取队头的值,但不出队(若队列为空则返回null |
poll() | 获取并移除队头(若队列空则返回null) |
用栈实现队列
(leetcode.232)
class MyQueue {
Stack<Integer> in;
Stack<Integer> out;
public MyQueue() {
in = new Stack<Integer>();
out = new Stack<Integer>();
}
public void push(int x) {
in.push(x);
}
public int pop() {
transfer();
return out.pop();
}
public int peek() {
transfer();
return out.peek();
}
public boolean empty() {
return (in.isEmpty() && out.isEmpty());
}
public void transfer() {
if(! out.isEmpty()) return;
while(! in.isEmpty()) out.push(in.pop());
}
}
用队列实现栈
(leetcode.225)
class MyStack {
Queue<Integer> q1;
Queue<Integer> q2;
public MyStack() {
q1 = new LinkedList<Integer>();
q2 = new LinkedList<Integer>();
}
public void push(int x) {
if(q1.isEmpty()) {
q1.offer(x);
while(! q2.isEmpty()) q1.offer(q2.poll());
} else {
q2.offer(x);
while(! q1.isEmpty()) q2.offer(q1.poll());
}
}
public int pop() {
return (q1.isEmpty() ? q2 : q1).poll();
}
public int top() {
return (q1.isEmpty() ? q2 : q1).peek();
}
public boolean empty() {
return (q1.isEmpty() && q2.isEmpty());
}
}