基本的なアルゴリズム・スタック

まず、簡単な
スタックはINSERT INTOテーブルの最後に定義された又は線状の動作を削除します。従って、スタックのために、テーブルの後端部は、その特別な意味を有するスタック(トップ)の上面になり、それぞれ、ヘッダスタック下端部(底部)と呼ばれます。

無料の要素空のスタックと呼ばれる空のリスト。スタックはLIFOの原理に従って変更され、したがって、また、リニア表LIFOスタックと呼ばれます。

 

スタックの第二に、概略図

 

第三に、基本的な操作

図1に示すように、スタックの初期化:InitStack(&S)
2、頂部要素が挿入される:プッシュ(&S、&E)
。3、トップ要素が取得:getTop(&S、&E)
。4、上部エレメントは削除ポップ(&S、&E)
。5 、スタックの長さ:StackLength(S)
6、スタック文空:StackEmpty(S)
アクセス7、スタック要素:StackTraverse(S、訪問())
8、スタックが空である:。ClearStack(&S)
。9、スタック破壊:DestroyStack(&S)

 

第四に、スタックは、実現のために保存されています

// ---------- ---------スタックを順次格納する
の#define STACK_INIT_SIZE 100; // ストレージ空間の初期割り当て
の#define STACKINCREMENT 10;   // メモリ空間の割り当てインクリメント
typedefは構造体{ 
    SElemType * ベース ; // 前のスタックの構築と破壊後、基本値NULL 
    SElemType *トップ;   // スタックポインタ
    のint ; STACKSIZE    // 現在の単位要素に割り当てられたストレージスペース 
SqStack}。
// ----------関数プロトタイプ宣言の基本的な動作は-------- 
ステータスInitStack(SqStack&S)は;     // 空のスタックはS構築 
ステータスDestroyStack(SqStack&S); // 破壊S、Sがもう存在しないスタックしません 
。ステータスClearStack(SqStack&S)を    // 空のスタックにS、 
ステータスStackEmpty(SqStack&S);    // スタックSが空のスタックがTRUEを返している場合、それ以外の場合はFALSEを返す
int型 StackLength(SqStack&Sを);      // Sのスタックの、すなわち長さの要素の数を返し 
、ステータスgetTop(SqStack&S、&SElemType eを)// スタックSが空でない場合、S eの先頭要素への復帰をし、OKを返し、それ以外の場合はエラー 
ステータスプッシュ(SqStack&S、SElemType&E);    // スタックの新しいトップのための要素eを挿入 
ステータスポップ(SqStack&S、SElemType&E);     // スタックSが空でない場合は、先頭の要素E Sを削除し、eだけOK、それ以外の場合はエラーを返し、その値を返します
StackTraverseステータス(S、訪問(SElemType E));         // 今度は関数訪問()を呼び出しスタックの先頭にスタックからの各要素について。訪問は()が失敗したら、その操作は失敗します
// --------説明したアルゴリズムの----------基本動作 
ステータスInitStack(SqStack&S){ 
    S. ベース =(SElemType *)はmalloc(* STACK_INIT_SIZE はsizeof (SElemType))
     IF(S.!ベース出口(OVERFLOW)); // メモリ割り当ての失敗 
    S.top = S. ベース; 
    S.stacksize = STACK_INIT_SIZE;
     戻ります。[OK]を
} 

ステータスDestroyStack(SqStackS){
     無料(S. ベース)。
    S. ベース = NULL; 
    S.top = NULL;
    S.stacksize = 0 ;
    返却OK。
} 

ステータスClearStack(SqStackS){ 
    S.top = S.の塩基;
    返却OK。
} 

ステータスStackEmpty(SqStackS){
     場合(S.top =エス・ベースを返すTRUE。
    返すFALSE; 
} 

int型 StackLength(SqStack&S){
     戻り S.topを- S.の塩基を
} 

ステータスGetTop(SqStack&S、SElemType&E){
     場合(S.top = S.ベース戻りERROR; 
    E = *(S.top - 1。);
     戻りOKを; 
} 

ステータスをプッシュ(SqStack&S、SElemType&E){
     IF(S.top - S. 基地 > = S.stacksize){   // スタック完全な、追加の記憶スペース 
        S. ベース =(SElemType *)のrealloc(S. ベース、(+ S.stacksize STACKINCREMENT)* はsizeof (SElemType));
         IF(S!ベース出口(オーバフロー)); // メモリ割り当て障害 
        S. = S.top ベース + S.stacksize。
        S.stacksize + = STACKINCREMENT。
    }
     * S.top ++ = E。
    返却OK。
} 

ステータスポップ(SqStack&S、SElemType&E){
     場合(S.top = S. ベースリターンエラー。
    E = * - S.top。
    返却OK。
} 

ステータスStackTraverse(S、訪問()){ 
    一方(S.top> S. 塩基
        訪問( * S。塩基 ++ )。
    返却OK。
} 
ステータス訪問(SElemType電子)
{ 
    のprintf("%のD "、E);
    返却OK。
}

 

おすすめ

転載: www.cnblogs.com/XYQ-208910/p/11442392.html