運動中のアルゴリズムは、第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で再現