剑指Offer19 包含min函数的栈
2016-08-30 20:27
162 查看
/************************************************************************* > File Name: 19_MinInStack.cpp > Author: Juntaran > Mail: JuntaranMail@gmail.com > Created Time: 2016年08月30日 星期二 19时29分48秒 ************************************************************************/ #include <stdio.h> #include <bits/stdc++.h> using namespace std; template<class T> class minStack { private: stack<T> stack_data; stack<T> stack_min; public: void push(T &value) { // 新元素入栈 stack_data.push(value); // 新元素比之前最小元素小的时候,新元素进入辅助栈 // 否则把之前最小元素重复插入辅助栈 if (stack_min.size()==0 || value<stack_min.top()) stack_min.push(value); else stack_min.push(stack_min.top()); } T pop() { assert(stack_data.size()>0 && stack_min.size()>0); stack_data.pop(); stack_min.pop(); return stack_data.top(); } T min() { assert(stack_data.size()>0 && stack_min.size()>0); return stack_min.top(); } }; int main() { minStack<int> mStack; for (int i = 0; i < 5; i++) { cout << i << " push" << endl; mStack.push(i); } cout << "min is " << mStack.min() << endl; for (int i = 1; i < 3; i++) { cout << mStack.pop() << " pop" << endl; } cout << "min is " << mStack.min() << endl; for (int i = 5; i < 7; i++) { cout << i << " push" << endl; mStack.push(i); } cout << "min is " << mStack.min() << endl; for (int i = 1; i < 3; i++) { cout << mStack.pop() << " pop" << endl; } int k = -1; mStack.push(k); cout << "min is " << mStack.min() << endl; cout << endl; }
相关文章推荐
- 包含min函数的栈 (剑指Offer 第 19 题)
- 剑指Offer面试题:19.包含Min函数的栈
- 【剑指offer】数据结构 ——包含min函数的栈(C++)
- 剑指offer21:包含min函数的栈
- 剑指Offer学习总结-包含min函数的栈
- 剑指Offer题目1522:包含min函数的栈
- 剑指Offer---面试题21:包含min函数的栈
- 剑指offer 二叉树的深度 顺时针打印矩阵 包含min函数的栈 栈的压入、弹出序列
- 剑指Offer 21 包含min函数的栈
- 剑指offer面试题21:包含min函数的栈
- 剑指offer-算法题练习:part22 包含min函数的栈
- 剑指offer(22):包含min函数的栈
- 剑指offer 包含min函数的栈
- 剑指offer-包含min函数的栈
- 剑指offer 21 包含min函数的栈
- 剑指offer-第四章解决面试题的思路(包含min函数的栈)
- 【剑指offer】面试题21:包含min函数的栈
- 剑指offer-面试题21.包含min函数的栈
- 剑指offer-包含Min函数的栈
- (十四)剑指offer之栈的压入弹出序列及包含min函数的栈