编程题:包含min函数的栈

来源:互联网 发布:黑客帝国文字矩阵 编辑:程序博客网 时间:2024/06/02 00:05

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。

剑指offer给出的思路:
我们可能想使用一个变量min来存放最小的元素。每次压入栈中一个元素的时候,如果新元素比这个变量min中保存的元素小,那么就将用新元素给min赋值,即更新min的值。但是,这样存在一个问题,那就是当当前最小的元素被弹出栈了,怎么得到栈中剩余元素的最小的元素呢?
因此,可以借助一个辅助栈,用来存放每次栈操作时(包括入栈和出栈)栈中最小元素。
代码

class Solution {public:    stack<int> st, minSt;//st表示存储元素的栈,minSt保存每次栈操作时,保存栈中最小元素    void push(int value) {        st.push(value);        if (minSt.empty()){            minSt.push(value);        }        else {            if (value < minSt.top()){                minSt.push(value);            }            else {                minSt.push(minSt.top());            }        }        return;    }    void pop() {        if (!st.empty()) {            st.pop();            minSt.pop();        }        return;    }    int top() {        if (!st.empty()){            return st.top();        }        return 0;    }    int min() {        if (!minSt.empty()) {            return minSt.top();        }        return 0;    }};