用队列实现栈(简单)
2020年5月31日
题目来源:力扣
解题
这道题跟最小栈类似,但需要用到队列,队列知识放在最后。
队列是先进先出的特点,栈是后进先出的特点,用队列实现栈的话,主要就是要改变队列内的元素位置。
如果队列内的元素摆放跟栈一致,那使用poll()就相等于栈的pop(),使用peek()就相等于top(),isEmpty()是通用的。
我们会想到在元素入队列的时候,像是入栈一样。
举个例子
当2入队列时
把1移到2的后面去
当3入队列时,做同样的操作
class MyStack {
public Queue<Integer> q;
/** Initialize your data structure here. */
public MyStack() {
q=new LinkedList<Integer>();
}
/** Push element x onto stack. */
public void push(int x) {
q.add(x);
int size=q.size();
while(size>1){
q.add(q.remove());
size--;
}
}
/** Removes the element on top of the stack and returns that element. */
public int pop() {
return q.poll();
}
/** Get the top element. */
public int top() {
return q.peek();
}
/** Returns whether the stack is empty. */
public boolean empty() {
return q.isEmpty();
}
}
/**
* Your MyStack object will be instantiated and called as such:
* MyStack obj = new MyStack();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.top();
* boolean param_4 = obj.empty();
*/
概念理解
有界队列:即队列中的元素个数有限制
无界队列:即队列中的元素个数无限制
1.向队列中添加元素
add():向有界队列中添加元素的时候,如果元素的数量超过临界值,会抛出异常java.lang.IllegalStateException: Queue full
offer():向有界队列中添加元素的时候,如果元素的数量超过临界值,会添加失败,但不会抛出异常。
2.获取队列中的头部元素并删除
remove():当队列中没有可获取的元素时,会抛出异常 java.util.NoSuchElementException
poll():当队列中没有可获取的元素时,会返回null
3.获取队列中的头部元素但不删除
element():当队列中没有可获取的元素时,会抛出异常 java.util.NoSuchElementException
peek():当队列中没有可获取的元素时,会返回null