包含min函数的桟
2015-08-27 19:08
417 查看
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。#include <iostream> #include <stack> #include <assert.h> using namespace std; template<typename T> class StackWithMin { public: StackWithMin(void){} virtual ~StackWithMin(void){} T& top(void); const T& top(void) const; void push(const T& value); void pop (void); const T& min(void) const; bool empty() const; size_t size() const; private: stack<T> m_data; stack<T> m_min; }; template<typename T> void StackWithMin<T>::push(const T& value) { m_data.push(value); if(m_min.size() == 0 || m_min.top() > value) m_min.push(value); else m_min.push(m_min.top()); } template<typename T> void StackWithMin<T>::pop() { assert(m_min.size() > 0 && m_data.size() > 0); m_min.pop(); m_data.pop(); } template<typename T> const T& StackWithMin<T>::min() const { assert(m_min.size() > 0 && m_data.size() > 0); return m_min.top(); } template<typename T> T& StackWithMin<T>::top() { return m_data.top(); } template<typename T> const T& StackWithMin<T>::top() const { return m_data.top(); } template<typename T> bool StackWithMin<T>::empty() const { return m_data.empty(); } template<typename T> size_t StackWithMin<T>::size() const { return m_data.size(); }
void Test(char* testName, const StackWithMin<int>& stack, int expected) { if(testName != NULL) printf("%s begins: ", testName); if(stack.min() == expected) printf("Passed.\n"); else printf("Failed.\n"); } int main(int argc, char* argv[]) { StackWithMin<int> stack; stack.push(3); Test("Test1", stack, 3); stack.push(4); Test("Test2", stack, 3); stack.push(2); Test("Test3", stack, 2); stack.push(3); Test("Test4", stack, 2); stack.pop(); Test("Test5", stack, 2); stack.pop(); Test("Test6", stack, 3); stack.pop(); Test("Test7", stack, 3); stack.push(0); Test("Test8", stack, 0); return 0; }
相关文章推荐
- 网卡驱动程序设计
- oracle 10g 实例用localhost无法访问的处理
- oracle 10g 实例用localhost无法访问的处理
- css3用图片作边框
- 理解RESTful架构
- acm hdu p1002 A + B Problem II
- iOS中Schema调起APP
- php大力力 [028节] 如何下载js文件,网上一个*.js无法下载啊??????
- UVa_Live 3664(精度坑)
- 使用logrotate配置Nginx日志轮替
- UITableView的编辑
- 一个Hibernate小程序
- python 高级属性
- 程序员,请远离拖延症!
- CTR预估中GBDT与LR融合方案
- OC开发_整理笔记——友盟分享(社交化组件)
- wait和sleep
- ListView分组导航+挤压动画(二)
- window.onunload使用
- 求一个小于10的正整数的n次方,n很大