首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

这样做有木有有关问题,栈常数时间取最小值

2012-10-21 
这样做有木有问题,栈常数时间取最小值想用常数时间,那就得用辅助栈编程之美的3.7节,和该博客http://zhedah

这样做有木有问题,栈常数时间取最小值
想用常数时间,那就得用辅助栈

编程之美的3.7节,和该博客http://zhedahht.blog.163.com/blog/static/25411174200712895228171/都用了和数据栈长度同步增长的辅助栈,我觉得没必要啊,辅助栈里只要存当前最小值即可,只有在最坏情况下(入栈数据降序),辅助栈大小等于数据栈,平均情况下辅助栈能节省不少空间的。而且流程上也比编程之美和那个博客简单

写了个小程序没什么问题,是不是我欠考虑?

我算法是弱项,没参加过ACM之类,为了应付互联网正在恶补

C/C++ code
#include <stack>#include <iostream>using namespace std;template <typename T>class MyStack{public:    void Push(const T &e);    T& Top();    const T& Top() const;    void Pop();    const T& Min();    bool Empty();private:    stack<T> m_stack;    stack<T> m_min;};template <typename T> void MyStack<T>::Push(const T &e){    m_stack.push(e);    if (m_min.empty())        m_min.push(e);    else if (e <= Min())        m_min.push(e);}template <typename T> T& MyStack<T>::Top(){    return m_stack.top();}template <typename T> const T& MyStack<T>::Top() const{    return m_stack.top();}template <typename T> void MyStack<T>::Pop(){    if (m_stack.top() == m_min.top())        m_min.pop();    m_stack.pop();}template <typename T> const T& MyStack<T>::Min(){    return m_min.top();}template <typename T> bool MyStack<T>::Empty(){    return m_stack.empty();}int main(){    MyStack<int> s;    s.Push(3);    cout << s.Min() << endl;    s.Push(4);    cout << s.Min() << endl;    s.Push(2);    cout << s.Min() << endl;    s.Push(1);    cout << s.Min() << endl;    s.Pop();    cout << s.Min() << endl;    s.Pop();    cout << s.Min() << endl;    s.Push(0);    cout << s.Min() << endl;    s.Pop();    cout << s.Min() << endl;    s.Pop();    cout << s.Min() << endl;    getchar();}


[解决办法]
你做的没啥问题吧?

热点排行