1. 程式人生 > >c++實現棧的push、pop、min

c++實現棧的push、pop、min

其實push和pop較為簡單,可以用陣列實現,但是要兼顧到min,所以得另找個簡單的方法。

思路是用兩個棧實現,一個為資料棧,一個是存放最小資料的棧,且先叫小數棧,小數棧為空或者插入的資料小於當前小數棧頂資料時,將當前插入資料插入小數棧,否則將小數棧頂資料繼續插入小數棧,這樣做的目的可以保證就算刪除資料時也可保證小數棧頂為當前最小資料。

class Stack{
      public:
          void push(int value)
          {   
              data.push(value);
              if(min.empty()||value<min.top())//小數棧為空或者插入元素是最小值,插入
                  min.push(value);
              else
                  min.push(min.top());//否則繼續插入小數棧頂元素
          }   
          void pop()
          {   
              if(!data.empty() && !min.empty())//若是棧非空,則刪除棧頂元素
              {   
                  data.pop();
                  min.pop();
              }   
          }   
          int Min()
          {   
              if(min.empty())
                  return 0;
              else 
                  return min.top();
          }   
      private:
          stack<int> data;
          stack<int> min;//小數棧元素數目與資料棧相同,棧頂為當前最小值,就算刪除也可保證棧頂為當前最小資料
  };