题目:
Implement the following operations of a queue using stacks.
- push(x) -- Push element x to the back of queue.
- pop() -- Removes the element from in front of queue.
- peek() -- Get the front element.
- empty() -- Return whether the queue is empty.
Notes:
- You must use only standard operations of a stack -- which means only
push
,
to toppeek/pop from top
,size
,
andis empty
operations are valid. - Depending on your language, stack may not be supported natively. You may simulate a stack by using a list or deque (double-ended queue), as long as you use only standard operations of a stack.
- You may assume that all operations are valid (for example, no pop or peek operations will be called on an empty queue).
解题:
用栈实现队列,这个比用队列实现栈要麻烦一些,这里用到两个栈,两种思路,第一种就是在进栈的时候,把栈逆序放在另外一个栈,出的时候直接出另外一个栈就可以了。第二种思路,进栈的时候不做任何处理,出栈的时候把栈逆序放在另外一个栈,出另外一个栈。下面就是两种的代码实现。
在进栈的时候进行处理:
class MyQueue { // Push element x to the back of queue. Stack<Integer> stack=new Stack<>(); Stack<Integer> stack2=new Stack<>(); public void push(int x) { while(!stack.isEmpty()) { stack2.push(stack.pop()); } stack2.push(x); while(!stack2.isEmpty()) { stack.push(stack2.pop()); } } // Removes the element from in front of queue. public void pop() { stack.pop(); } // Get the front element. public int peek() { return stack.peek(); } // Return whether the queue is empty. public boolean empty() { return stack.isEmpty(); } }
在出栈的时候进行处理:
class MyQueue2 { // Push element x to the back of queue. Stack<Integer> stack=new Stack<>(); Stack<Integer> stack2=new Stack<>(); public void push(int x) { while(!stack2.isEmpty()) stack.push(stack2.pop()); stack.push(x); } // Removes the element from in front of queue. public void pop() { while(!stack.isEmpty()) stack2.push(stack.pop()); stack2.pop(); } // Get the front element. public int peek() { while(!stack.isEmpty()) stack2.push(stack.pop()); return stack2.peek(); } // Return whether the queue is empty. public boolean empty() { while(!stack2.isEmpty()) stack.push(stack2.pop()); return stack.isEmpty(); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-10 04:12:39