包含min函数的桟

来源:互联网 发布:生死狙击六子刷枪软件 编辑:程序博客网 时间:2024/06/05 15:03

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的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);elsem_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;}

0 0
原创粉丝点击