まず、簡単な
スタックは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(SqStack&S){ 無料(S. ベース)。 S. ベース = NULL; S.top = NULL; S.stacksize = 0 ; 返却OK。 } ステータスClearStack(SqStack&S){ S.top = S.の塩基; 返却OK。 } ステータスStackEmpty(SqStack&S){ 場合(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。 }