包含min的栈
来源:互联网 发布:反查域名 编辑:程序博客网 时间:2024/06/18 04:00
/***************************************************************题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是O(1)***************************************************************/#include<iostream>#include<stack>#include<assert.h>using namespace std;template<typename T>class minStack{public:void push(const T& data);void pop();const T& min();private:stack<T> m_stackData;stack<T> m_stackMin;};template<typename T>void minStack<T>::push(const T& data){m_stackData.push(data);if(m_stackMin.empty())m_stackMin.push(data);else{if(data<=m_stackMin.top())m_stackMin.push(data);}}template<typename T>void minStack<T>::pop(){assert(!m_stackData.empty() && !m_stackMin.empty());if(m_stackData.top() == m_stackMin.top())m_stackMin.pop();m_stackData.pop();}template<typename T>const T& minStack<T>::min(){assert(!m_stackData.empty() && !m_stackMin.empty());return m_stackMin.top();}void test(){minStack<int> intMinStack;intMinStack.push(5);printf("%d\n",intMinStack.min());intMinStack.push(2);printf("%d\n",intMinStack.min());intMinStack.push(6);printf("%d\n",intMinStack.min());intMinStack.push(7);printf("%d\n",intMinStack.min());intMinStack.push(1);printf("%d\n",intMinStack.min());intMinStack.push(3);printf("%d\n",intMinStack.min());intMinStack.pop();printf("%d\n",intMinStack.min());intMinStack.pop();printf("%d\n",intMinStack.min());intMinStack.pop();printf("%d\n",intMinStack.min());intMinStack.pop();printf("%d\n",intMinStack.min());intMinStack.pop();printf("%d\n",intMinStack.min());intMinStack.pop();}int main(){test();return 0;}
用两个栈来实现包含min函数的栈,一个栈存储数据,另一个存储最小数据集。
template<typename T>class StackWithMin{public:const T& min() const;void push(const T& data);void pop();private:stack<T> dataStack;stack<T> minStack;};template<typename T>const T& StackWithMin<T>::min() const{return minStack.top();}template<typename T>void StackWithMin<T>::push(const T& data){dataStack.push(data);if(minStack.empty() || data <= minStack.top())//这里||前后两个条件的顺序不能改变{minStack.push(data);}}template<typename T>void StackWithMin<T>::pop(){assert(!minStack.empty() && !minStack.empty());if(!minStack.empty()){if(dataStack.top() == minStack.top())minStack.pop();}if(!dataStack.empty())dataStack.pop();}
0 0
- 包含min的栈
- 包含min的栈
- 包含min的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min操作的栈
- 包含min函数的栈
- 包含min 函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min函数的栈
- 包含min方法的栈
- android周边游app的技术memo
- java Volatile关键字介绍
- 进程和线程的区别与联系
- ANDROID垃圾回收器机制和强引用、软引用、弱引用、虚引用
- 我的第一个LiveCode安卓应用诞生啦Screen Test
- 包含min的栈
- 岁月忽已晚
- Android应用性能优化之使用SparseArray替代HashMap
- Target runtime Apache Tomcat v6.0 is not defined.错误解决方法
- javamail 发送邮件实例
- iOS - Xcode升级到5.1& iOS升级到iOS7.1问题:
- 线程安全的单例模式
- Android客户端与PC服务器实现Socket通信(wifi)
- linux比较两目录的差异文件