STL测试
poj1363 Rails(栈模拟)
#include<stdio.h> #include<stack> using namespace std; int main() { int n; int num[100];//出栈顺序 int num2[100];//入栈顺序 scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&num[i]); } stack <int> s; for(int i=0;i<n;i++) { scanf("%d",&num2[i]); } int j=0; for(int i=0;i<n;i++) { s.push(num2[i]); while(j<n&&(!s.empty())&&(s.top()==num[j])) { printf("pop %d i = %d j = %d\n",s.top(),i,j); s.pop(); j++; } } if(s.empty()) { printf("yes\n"); } else { printf("no\n"); } return 0; } /* 5 3 2 5 4 1 1 2 3 4 5 5 3 1 2 4 5 1 2 3 4 5 */
155. 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) -- 将元素 x 推入栈中。
pop() -- 删除栈顶的元素。
top() -- 获取栈顶元素。
getMin() -- 检索栈中的最小元素。
示例:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> 返回 -3.
minStack.pop();
minStack.top(); --> 返回 0.
minStack.getMin(); --> 返回 -2.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/min-stack
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class MinStack { private: stack <int> _data; stack <int> _min; public: /** initialize your data structure here. */ MinStack() { } void push(int x) { _data.push(x); if(_min.empty()) { _min.push(x); } else { if(_data.top()>_min.top()) { _min.push(_min.top()); } else { _min.push(x); } } } void pop() { int temp = _data.top(); _data.pop(); _min.pop(); return temp; } int top() { return _data.top(); } int getMin() { return _min.top(); } }; /** * Your MinStack object will be instantiated and called as such: * MinStack* obj = new MinStack(); * obj->push(x); * obj->pop(); * int param_3 = obj->top(); * int param_4 = obj->getMin(); */
232. 用栈实现队列
使用栈实现队列的下列操作:
push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。
示例:
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // 返回 1
queue.pop(); // 返回 1
queue.empty(); // 返回 false
说明:
你只能使用标准的栈操作 -- 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的语言也许不支持栈。你可以使用 list 或者 deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。
假设所有操作都是有效的 (例如,一个空的队列不会调用 pop 或者 peek 操作)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-queue-using-stacks
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class MyQueue { public: stack <int> s; /** Initialize your data structure here. */ MyQueue() { } /** Push element x to the back of queue. */ void push(int x) { stack <int> t; while(!s.empty()) { t.push(s.top()); s.pop(); } s.push(x); while(!t.empty()) { s.push(t.top()); t.pop(); } } /** Removes the element from in front of queue and returns that element. */ int pop() { int te=s.top(); s.pop(); return te; } /** Get the front element. */ int peek() { return s.top(); } /** Returns whether the queue is empty. */ bool empty() { return s.empty(); } };
用队列模仿栈
LEETCODE 225
使用队列实现栈的下列操作:
push(x) -- 元素 x 入栈
pop() -- 移除栈顶元素
top() -- 获取栈顶元素
empty() -- 返回栈是否为空
注意:
你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-stack-using-queues
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
1 class MyStack { 2 public: 3 queue <int> q; 4 /** Initialize your data structure here. */ 5 MyStack() { 6 7 8 } 9 10 /** Push element x onto stack. */ 11 void push(int x) { 12 int size =q.size(); 13 q.push(x); 14 while(size--) 15 { 16 int temp = q.front(); 17 q.pop(); 18 q.push(temp); 19 20 } 21 } 22 23 /** Removes the element on top of the stack and returns that element. */ 24 int pop() { 25 int temp =q.front(); 26 q.pop(); 27 return temp; 28 29 } 30 31 /** Get the top element. */ 32 int top() { 33 return q.front(); 34 } 35 36 /** Returns whether the stack is empty. */ 37 bool empty() { 38 return q.empty(); 39 } 40 }; 41 42 /** 43 * Your MyStack object will be instantiated and called as such: 44 * MyStack* obj = new MyStack(); 45 * obj->push(x); 46 * int param_2 = obj->pop(); 47 * int param_3 = obj->top(); 48 * bool param_4 = obj->empty(); 49 */
posted on 2020-01-16 15:46 KID_XiaoYuan 阅读(182) 评论(0) 编辑 收藏 举报