1.スタックとキューの定義と特性
スタック:スタック(スタック)は、スタックとも呼ばれ、テーブルの一方の端での挿入および削除操作に制限された線形テーブル(後入れ先出し)です。この端はスタックの最上部と呼ばれ、もう一方の端はスタックの最下部と呼ばれます。要素のない空のリストは、空のスタックと呼ばれます。
キュー:スタックとは対照的に、キューは先入れ先出しの線形リストです。テーブルのフロントエンドでの削除操作と、テーブルのバックエンドでの挿入操作のみが許可されます。挿入できる端をリア、削除できる端をフロントと呼びます。
新しい要素をスタックに挿入することは、スタックにプッシュすることとも呼ばれ、スタックから要素を削除することは、スタックを作成することとも呼ばれます。キュー要素をキューに挿入することをキューイングと呼び、キュー要素をキューから削除することをデキューイングと呼びます。線形テーブルと同様に、スタックとキューのストレージ構造にもシーケンシャルとチェーンが含まれます。
元のリンク:https://blog.csdn.net/qq_41117236/article/details/80764231
概要:スタックとキューは基本的に線形テーブルですが、操作が制限されています。
2.スタックとキューの適用
ケースナンバーワン:
基数間の変換:10進数の161を8進数に変換するなど、トスとターンの除算方法をよく使用します。
ケース2。ブラケットのマッチング:
コードを作成するときは、ネストされた括弧を多く使用することが多く、コンピューターはスタックの特性を使用して一致させます。
ケース3。式の値:
たとえば、式(a + b)* c + e / f
コンピューターはスタックを使用して計算を実行し、最初に演算子スタックOPTRオペランドスタックOPNDを作成します
*番号をスキャンしてスタックOPNDにプッシュします。
オペレーターがスキャンされた場合、次のようになります。
演算子がスタックの最上位にあるOPTR演算子よりも優先度が高い場合、その演算子はスタックOPTRにプッシュされます(OPTRの先頭に要素がない場合、演算子は直接スタックにプッシュされます)。
演算子の優先度がOPTRスタックトップ演算子よりも低い場合は、OPNDスタックトップから2つの数値をポップして計算し、計算結果をOPNDスタックにプッシュします。
*終了文字が検出されるまで、現在の文字の処理を続行します
3.循環キュー
循環キューは、キュー記憶域スペースの最後の位置を最初の位置にラップして、キューがリサイクルするための論理リング・スペースを形成することです。
ここでは、循環キューのプログラム実装についてのみ説明します。他のシーケンシャルスタック、チェーンスタックなどについては、以前にシーケンスリストとリンクリストで紹介しましたが、ほとんど変更はありません。
循環スタックの代わりに循環キューがある理由は、キューが「先入れ先出し」であるため、スペースをリサイクルできるためです。MAXQSIZEがキューの長さであり、Q.rearが最後の要素の次の要素を指していると想定します。Q.frontは開始要素を指します。
最初にキューを作成します
#define MAXQSIZE 64 struct data { char name []; int年齢; }; struct Com { struct data arr [MAXQSIZE]; intリア= 0; int front = 0; }; int main { structComメンバー; 0を返します。 }
要素を挿入
void insert(struct Com member、struct data ele) { if((member.rear + 1)%MAXQSIZE == member.front) return; else { *(member.arr [member.front])= ele; member.rear =(member.rear + 1)%MAXQSIZE; } } //循環キューが%操作をマスターすることは難しくないことがわかります。