兩個棧實現隊列——優化版

這個是一個很常見的算法,在劍指offer中有詳細的講解,在這裏提供一種優化的實現。該實現的優勢是不須要每次在數據出列時,將數據copy到另外一個堆棧中。並寫了其對應的單元測試java

主要思想

主要實現是在類中定義了兩個全局變量,標明當前隊列中兩個棧的狀態,git

  • isMain 表示如今數據存儲在哪一個棧中。
  • inOrder 表示如今最先加入隊列的元素是否在棧頂。

在向對列中添加順序時,若是inOrder = false 則能夠直接添加,不然就要將數據導到另外一個棧中,而後將數據添加到有數據的棧中。在從隊列中移除數據時,若是inOrder=true 則存儲數據的棧直接將數據彈出便可,不然將數據導入到另外一個棧再將數據彈出。github

優勢

  • 在連續從隊列中移除數據時,不須要頻繁的將數據在兩個棧之間導來導去。

PS:代碼在超連接中。算法

相關文章
相關標籤/搜索