C言語学習(12)スタックとキュー

スタック

スタックは、一方の端でのみ操作できる特殊な線形リストです。

スタックの最上位: 操作を許可する端。

スタックの一番下: 操作が許可されない端

1. スタック: 挿入および削除操作をテーブルの最後までに制限する線形テーブルであり、後入れ先出し線形テーブルとも呼ばれます。LIFO構造。      

スタックの最上位: 挿入と削除が可能な端。      

スタックの一番下: もう一方の端。

2. 空のスタック: データ要素のないスタック; top=-1; 3. スタック操作:    

スタックにプッシュ、スタックにプッシュ、スタックにプッシュ: スタックの挿入操作。    

Pop、pop: スタック削除操作。    

スタックに要素がある場合、top=0;

注: top は配列内のスタックの最上位要素の位置であり、下付き文字 0 の末尾はスタックの最下位です。 

チェーンスタック

スタックは、挿入および削除操作のスタックの先頭にすぎません。では、リンクされたリストの先頭または末尾をスタックの先頭にする必要がありますか?        

単一リンクリストには先頭ノードがあるため、スタックにも先頭ノードが必要です。そのため、2 つを 1 つに結合すると、リンクリストの先頭がスタックの先頭として使用されるため、リンクリストの先頭ノードが省略可能です。次に、チェーン スタックが空の場合、top=NULL になります。

列  

a. キューは、一方の端では挿入操作、もう一方の端では削除操作のみを許可する線形リストです。    

先入れ先出し線形テーブル、FIFO。    

チームのリーダー: 削除が許可されるエンド。  

キューの末尾: 挿入を許可する末尾。    

 

c. 循環キュー:    

1. キュー注文ストレージの欠点:

(1) キュー要素はキューの先頭、つまり添字 0 の位置でデキューされます。これは、キューがリストされた後、キューの先頭が空にならないように、すべての要素が 1 つ前に移動することを意味します。ただし、チームのリーダーがインデックス 0 の位置にいるとは限りません。

(2) 要素が 1 つしかない場合にキューの先頭と末尾が重なる問題を回避するために、キューの先頭要素を指すようにfrontを導入し、末尾要素の次の位置を指すようにrearを導入します。 =rear、キューには要素が 1 つも残っていないが、空のキューです。

(3) フロントが配列の i 番目の位置を指しているとき、リアはすでに配列の終わりを指していますが、フロントの前には引き続き格納できる空の位置がまだあります。したがって、キューの末尾の要素は引き続き配列の最初の i 位置に格納されます。

2. 循環キューの定義: 先頭から末尾までつながった順次記憶構造を循環キューと呼びますが、循環キュー配列が満杯の場合、前=後が空のキューの状態と矛盾するため、要素空間を満杯として確保します。条件、つまり、キューがいっぱいの場合でも、空きユニットがまだ 1 つあります。     

キューが満杯と判断する条件:(rear+1)%QueueSize==front;         

フロント = 0、リア + 1 = SIZE + フロントがいっぱいの場合         

fornt !=0 の場合、リア + 1 = フロントがいっぱいです    

キューの長さを計算するための一般的な式は次のとおりです。(rear-front+QueueSize)%QueueSize;         

リア>フロントの場合、長さ=リア-フロント         

リア < フロントの場合、長さ = SIZE - フロント + リア    

キューのリンクされたストレージは、テールインとヘッドアウトしかできないことを除けば、実際には線形リストの単一リンク リストです。        

操作を容易にするために、キューの先頭ポインタはチェーン キューの先頭ノードを指し、末尾ポインタは終端ノードを指します。キューが空の場合、両方ともヘッド ノードを指します。    

おすすめ

転載: blog.csdn.net/ls_dashang/article/details/81488375