配列は、2つのスタックを保存します

運動中のアルゴリズムは、第10章の概要に、2つのスタックを用いてストレージアレイを達成するために、そのプッシュように、各時間はO(1)でスタックをポップ

  1  DOUBLESTACK_H #ifndefの
   2  の#define DOUBLESTACK_H
   3  
  4  の#define   TOTAL 10
   5  
  6テンプレート< クラス T>
   7  クラスdouble_stack
   8  {
   9      Tのm_array [ 20 ]。
10      int型m_top1、m_end1。
11      int型m_top2、m_end2。
12  公衆13      double_stack()。
14      ボイドプッシュ(INT stack_num、T&データ)。
15      ボイドポップ(int型stack_num);
16      ボイドプリント();
17  }。
18  
19  / * ********************************************** **
 20  機能:// double_stack
 21  説明://构造函数
 22  入力://无
 23  戻る://无
 24  ********************** ************************** * / 
25テンプレート< クラス T> 
 26 double_stack <T> :: double_stack()
 27  {
 28      m_top1 = 0 ;
29      TOTAL m_top2 = - 1;
 30      m_end1 = 0 ;
 31である      m_end2 TOTAL = -は1。;
 32  }
 33は、 
34である / * ******************************* *****************
 35  機能:プッシュ//
 36  の説明://プッシュ機能
 37 [  入力://はstack_num:スタック番号にプッシュ
 38は                 // T:圧力データスタック
 39  戻る://なし
 40  ***************************************** ******* * / 
41であるテンプレート< クラス T>
 42があり 、ボイド double_stack <T> ::プッシュ(int型stack_num、T&データ)
 43  {
 44      であれば(m_end2> = m_end1)
 45      {
 46          スイッチ(stack_num)
 47          {
 48          ケース 1 49              m_array [m_end1 ++] = データ。
50              ブレーク;
51          ケース 2 52              m_array [m_end2--] = データ。
53          デフォルト54              休憩55          }    
 56      }
 57      
58     {
 59          COUT << " オーバーフロー" << ENDL;
 60      }
 61れる }
 62が 
63である * / ************************************************************ ******************
 64  機能://プッシュ
 65を 説明://スタック機能
 66  入力:// stack_num:いいえがスタックに押されて
 67  戻る://なし
 68  **************************** * / 
69テンプレート< クラス T>
 70  空隙 double_stack <T> :: POP(INT stack_num)
 71です {
72      スイッチ(stack_num)
 73      {
 74      ケース 1 75          であれば(m_end1> m_top1)
 76          {
 77              COUT << m_arrayの[ - m_end1] << ENDL。
78          }
 79          他の
80          {
 81              COUT << " 下降流" << ENDL。
82          }
 83          ブレーク84      ケース 2 85          であれば(m_end2 < m_top2)
 86         {
 87              COUT << m_array [++ m_end2] << ENDL。
88          }
 89          他の
90          {
 91              COUT << " 下降流" << ENDL。
92          }
 93          ブレーク94      デフォルト95          休憩96      }
 97  }
 98  
99  / * ****************************************** ******
 100  機能://プッシュ
 101  説明://出栈函数
 102 入力:// stack_num:いいえスタックにプッシュされて
 103  に戻る://なし
 104  ******************************** ********************************************************* * / 
105テンプレート< クラス T>
 106  ボイド double_stack <T> ::プリント()
 107  {
 108      のためのint型 I = 0 ; IはTOTAL <; I ++ 109      {
 110          COUT << m_array [I] << "  " ;
 111      }
 112      COUT << ENDL;
 113  }
 114  #ENDIF

 

ます。https://www.cnblogs.com/liuxg/archive/2013/03/28/2986343.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34391445/article/details/93433652