• 剑指Offer19 包含min函数的栈


     1 /*************************************************************************
     2     > File Name: 19_MinInStack.cpp
     3     > Author: Juntaran
     4     > Mail: JuntaranMail@gmail.com
     5     > Created Time: 2016年08月30日 星期二 19时29分48秒
     6  ************************************************************************/
     7 
     8 #include <stdio.h>
     9 #include <bits/stdc++.h>
    10 
    11 using namespace std;
    12 
    13 template<class T>
    14 class minStack
    15 {
    16 private:
    17     stack<T> stack_data;
    18     stack<T> stack_min;
    19     
    20 public:
    21 
    22     void push(T &value)
    23     {
    24         // 新元素入栈
    25         stack_data.push(value);
    26         
    27         // 新元素比之前最小元素小的时候,新元素进入辅助栈
    28         // 否则把之前最小元素重复插入辅助栈
    29         if (stack_min.size()==0 || value<stack_min.top())
    30             stack_min.push(value);
    31         else
    32             stack_min.push(stack_min.top());
    33     }
    34     T pop()
    35     {
    36         assert(stack_data.size()>0 && stack_min.size()>0);
    37         stack_data.pop();
    38         stack_min.pop();
    39         return stack_data.top();
    40     }
    41     T min()
    42     {
    43         assert(stack_data.size()>0 && stack_min.size()>0);
    44         return stack_min.top();
    45     }
    46 };
    47 
    48 int main()
    49 {
    50     minStack<int> mStack;
    51     for (int i = 0; i < 5; i++)
    52     {
    53         cout << i << " push" << endl;
    54         mStack.push(i);
    55     }
    56     cout << "min is " << mStack.min() << endl;
    57     for (int i = 1; i < 3; i++)
    58     {
    59         cout << mStack.pop() << " pop" << endl;
    60     }
    61     cout << "min is " << mStack.min() << endl;
    62     for (int i = 5; i < 7; i++)
    63     {
    64         cout << i << " push" << endl;
    65         mStack.push(i);
    66     }
    67     cout << "min is " << mStack.min() << endl;
    68     for (int i = 1; i < 3; i++)
    69     {
    70         cout << mStack.pop() << " pop" << endl;
    71     }
    72     int k = -1;
    73     mStack.push(k);
    74     cout << "min is " << mStack.min() << endl;
    75     cout << endl;
    76 }
  • 相关阅读:
    java实现向有序数组中插入一个元素
    java实现向有序数组中插入一个元素
    java实现向有序数组中插入一个元素
    java实现字符逆序输出
    java实现字符逆序输出
    java实现字符逆序输出
    将博客搬至CSDN
    sql server链接查询
    sql server模糊查询、分组
    sql server简单查询
  • 原文地址:https://www.cnblogs.com/Juntaran/p/5823511.html
Copyright © 2020-2023  润新知