件名の説明:
問題1:
固定サイズのスタック構造のアレイによって実現
問題解決のアイデア:
ポインタを考えると実現することができます。
コードの実装:
1 クラスArrayToStack 2 { 3 公共: 4 ArrayToStack(int型のサイズ= 3 ) 5 { 6 本 - >サイズ= サイズ。 7 } 8 9 ボイドプッシュ(のconst int型A) 10 { 11 であれば(PTR < サイズ) 12の ARR [++ PTR] = 。 13 他の 14 coutの<< " エラー:スタックがいっぱいです!" <<endl; 15 } 16 17 INT トップ() 18 { 19 であれば(PTR> 0 ) 20 リターン ARR [ptr- 1 ]。 21 他の 22 coutの<< " エラー:!スタックが空である" << てendl; 23 リターン - 1 。 24 } 25 26 ボイドポップ() 27 { 28 であれば(PTR> 0 ) 29 ptr-- 。 30 他の 31 coutの<< " エラー:!スタックが空である" << てendl; 32 } 33 34 プライベート: 35 のint サイズ; 36 INT * ARR = 新しい INT [サイズ]。 37 INT PTR = 0 。 38 }。
Problem2:
配列とキューを使用して
問題解決のアイデア:
キューに2つのフロントとテールポインタポイントの使用:
コードの実装:
1 クラスArrayToQueue 2 { 3 公共: 4 ArrayToQueue(int型のサイズ= 3 )N(サイズ){} 5 6 ボイドプッシュ(INT A) 7 { 8 であれば(サイズ< N) 9 { 10 であれば(PTR1> = N) 11 PTR1 = 0 。 12 ARR [PTR1 ++] = 。 13 サイズ++ 。 14 } 15 他 16 COUTは<< " エラー:キューがいっぱいです!" << てendl; 17 } 18 19 INT トップ() 20 { 21 であれば(サイズ> 0 ) 22 リターン[PTR0] ARR。 23 他の 24 coutの<< " エラー:!キューが空である" << てendl; 25 リターン - 1 。 26 } 27 28 空隙ポップ() 29 { 30 もし(サイズ> 0 ) 31 { 32 であれば(PTR0> = N) 33 PTR0 = 0 。 34 PTR0 ++ ; 35 size-- 。 36 } 37 、他 38 COUTは<< " エラー:キューが空である!" << てendl; 39 } 40 41 プライベート: 42 INT N。 43 INT PTR0 = 0、PTR1 = 0、サイズ=0 ; 44 INT * ARR = 新しい INT [N]。 45 46 }。
テストコード:
1つの ボイド試験() 2 { 3 ArrayToStack S(5 )。 4 s.Pop(); 5 COUT << s.Top()<< ENDL。 6 裁判所未満<< " **************** " << てendl; 7 s.Push(1 )。 8 s.Push(2 )。 9 s.Push(3 )。 10 s.Push(4 )。 11 s.Push(5 )。 12 s.Push(6 )。 13 裁判所未満<< " **************** " << てendl; 14 COUT << s.Top()<< ENDL。 15 s.Pop()。 16 COUT << s.Top()<< ENDL。 17 18 19 COUT << " ========================== " << ENDL。 20 裁判所未満<< " ========================== " << てendl; 21 裁判所未満<< " ========================== " << てendl; 22 ArrayToQueue Q(5 )。 23 COUT << q.Top()<< ENDL。 24 q.Pop()。 25 26 q.Push(1 )。 27 q.Push(2 )。 28 q.Push(3 )。 29 q.Push(4 )。 30 q.Push(5 )。 31 q.Push(6 )。 32 33 COUT << q.Top()<< ENDL。 34 q.Pop()。 35 COUT << q.Top()<< ENDL。 36 37 q.Push(6 )。 38 COUT << q.Top()<< ENDL。 39 40 }