Implement the following operations of a stack using queues.
- push(x) -- Push element x onto stack.
- pop() -- Removes the element on top of the stack.
- top() -- Get the top element.
- empty() -- Return whether the stack is empty.
- You must use only standard operations of a queue -- which means only
push to back
,peek/pop from front
,size
, andis empty
operations are valid. - Depending on your language, queue may not be supported natively. You may simulate a queue by using a list or deque (double-ended queue), as long as you use only standard operations of a queue.
- You may assume that all operations are valid (for example, no pop or top operations will be called on an empty stack).
Solution:
Easy one, but when implementing pop(), need to take care of how you count the position of your index. Since pop from queue will temporarily make the size of your queue minus 1.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Stack { | |
public: | |
// Push element x onto stack. | |
void push(int x) { | |
myQ.push(x); | |
} | |
// Removes the element on top of the stack. | |
void pop() { | |
int origSize=myQ.size(); | |
for(int i=0; i<myQ.size(); i++){ | |
int front=myQ.front(); | |
myQ.pop(); | |
if(i!=origSize-1) | |
myQ.push(front); | |
} | |
} | |
// Get the top element. | |
int top() { | |
int t=0; | |
for(int i=0; i<myQ.size(); i++){ | |
int front=myQ.front(); | |
myQ.pop(); | |
myQ.push(front); | |
t=i==myQ.size()-1? front:t; | |
} | |
return t; | |
} | |
// Return whether the stack is empty. | |
bool empty() { | |
return myQ.empty(); | |
} | |
queue<int> myQ; | |
}; |
No comments:
Post a Comment