题目链接:实现队列
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )
示例 1:
输入:
[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”]
[[],[3],[],[]]
输出:[null,null,3,-1]
太简单了,直接贴代码:
class CQueue {
//两个栈,一个出栈,一个入栈
Stack<Integer> s1;
Stack<Integer> s2;
public CQueue() {
s1 = new Stack<>();
s2 = new Stack<>();
}
public void appendTail(int value) {
s1.push(value);
}
public int deleteHead() {
if(!s2.isEmpty()){
return s2.pop();
}else{
while(!s1.isEmpty()){
s2.push(s1.pop());
}
return s2.isEmpty() ? -1 : s2.pop();
}
}
}
补充: 队列实现栈
class MyStack {
public:
/** Initialize your data structure here. */
queue<int> q;
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
q.push(x);
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int size = q.size()-1;
for(int i=0;i<size;i++)
{
int data = q.front();
q.pop();
q.push(data);
}
int d = q.front();
q.pop();
return d;
}
/** Get the top element. */
int top() {
int size = q.size()-1;
for(int i=0;i<size;i++)
{
int data = q.front();
q.pop();
q.push(data);
}
int d = q.front();
q.pop();
q.push(d);
return d;
}
/** Returns whether the stack is empty. */
bool empty() {
if(!q.empty()){
return false;
}
else
{
return true;
}
}
};
/**
* 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();
* bool param_4 = obj.empty();
*/