データ構造 - チェーン・スタックC ++

スタックの最後のアウトの最も基本的な特性は、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 }

 

おすすめ

転載: www.cnblogs.com/yang901112/p/11815044.html