スタックの最後のアウトの最も基本的な特性は、Cはこの簡単な紹介は、チェーンスタックを書く++
ヘッダ
1 #ifndefのLINKEDSTACK_H 2 の#define LINKEDSTACK_H 。3 。4テンプレート< クラス T> クラスLinkedStack; 5。 6。テンプレート< クラス T> 7。 クラスChainNode 8。 { 9。 フレンドクラス LinkedStack <T> ; 10 プライベート: 11。 ChainNode(CONST T&thedata、ChainNode * = N 0 ) 12である :データ(thedata)、リンク(N){} // 新しいノードを作成し、「リンク(N)」は接合点を表すスタックにプッシュされた 13である Tデータ。 14 ChainNode <T> * リンク; 15 }; 16 17。テンプレート< クラス T> 18である クラスLinkedStack 19。 { 20は 公衆: 21である LinkedStack():TOP(0){} //は空のノードの上部にスタックポインタを初期化する 22 〜 LinkedStack(){MakeEmpty();} // デストラクタは、空のスタック 23は、 BOOLのisEmpty()のconst ; //は、スタックが空であるか否かを判断する 24 T&トップ()のconst ; // リターンスタックノードデータフィールド 25 ボイドプッシュ(のconstE&T); // スタックからノードを追加し 26は、 無効ポップ(); // スタックからノードを削除するために 27 のボイド MakeEmptyを(); //は、スタックが空になるまでスタックからノードを削除し続ける 28 プライベート: 29 ChainNode <T> * トップ; 30 }; 31である 32テンプレート< クラス T> 33である BOOL LinkedStack <T> ::のisEmpty()constの 34である { 35 リターントップ== 0 ; 36 } 37 38であるテンプレート< クラス T> 39 空隙(LinkedStack <T> ::プッシュconstの T&E) 40 { 41が トップ= 新しい新しい ChainNode <T>(E、トップ); // 新しいノード"12行"だけスタックトップとなり、接合点がありましたスタックノード 42である } 43である 44であるテンプレート< クラス T> 45 T&LinkedStack <T> ::トップ()constの 46である { 47 IF(これ - > のisEmpty()) 48は、 スロー" スタックが空です。" ; 49 リターン TOP- > データ; 50 } 51は、 52であるテンプレート< クラス> T 53がされ 、ボイド LinkedStack <T> ::ポップ() 54である { 55 IF(この - > のisEmpty()) 56は、 スロー" 空削除しないでスタック缶... " ; 57はある ChainNode <T> * delNode =トップ; // で削除するノードに格納されたスタックポインタ、調製する削除ノードのトップ 58 トップ= TOP-> ;リンク 59 削除 delNode; // 一番上のノードは削除ポインタによって削除される見つける 60 } 61は、 62であるテンプレート< クラス T> 63は 空隙 LinkedStack <T> :: MakeEmpty() 64 { 65 しばらく(!のisEmpty()) 66 ポップ(); 67 } 68 #endifの
ソースファイル、テスト
1の#include <iostreamの> 2の#include " linkedstack.h " 3 4 使用して 名前空間STDを、 5 6 INT )(メイン 7 { 8 COUT << " 测试链式栈" << ENDL。 9 10 LinkedStack < INT > stack1。 11 stack1.Push(5 )。 12 COUT << stack1.Top()<< ENDL。 13 stack1.Push(15 )。 14 COUT << stack1.Top()<<endl; 15 stack1.Push(25 )。 16 COUT << stack1.Top()<< ENDL。 17 stack1.Pop()。 18 COUT << stack1.Top()<< ENDL。 19 20 戻り 0 ; 21 }