【データ構造】−シーケンススタック(初期化スタックトップポインタは−1)

15810 ワード

シーケンススタック-初期化スタックトップポインタは-1です.
  • 1.ヘッダファイルおよびタイプ定義
  • .シーケンススタックタイプ定義
  • .関数宣言
  • .基本動作
  • 4.1初期化シーケンススタック
  • 4.2判定空
  • 4.3スタック
  • 4.4出庫
  • 4.5スタックトップ要素
  • を読みだします.
  • 4.6 main関数
  • .小結
  • 1.ヘッダファイルとタイプ定義
    #include<stdio.h>
    #define MaxSize 10			//             
    #define ElemType int			
    
    2.シーケンススタックタイプ定義
    typedef struct {		
    	ElemType data[MaxSize];		//          
    	int top;					//    ,           
    }SeqStack;
    
    3.関数宣言
    /*    */
    void InitStack(SeqStack& S);				//1.      
    bool StackEmpty(SeqStack S);				//2.  
    bool Push(SeqStack& S, ElemType x);			//3.  
    bool Pop(SeqStack& S, ElemType& x);			//4.  
    bool GetTop(SeqStack S, ElemType& x);		//5.      
    
    4.基本操作
    4.1イニシャルシーケンススタック
    //1.    
    void InitStack(SeqStack& S) {
    	S.top = -1;		//        -1
    }
    
    4.2空判定
    //2.  
    bool StackEmpty(SeqStack S) {
    	return (S.top == -1);
    }
    
    4.3倉庫に入る
    //3.    :     (    )
    bool Push(SeqStack& S, ElemType x) {
    	if (S.top == MaxSize - 1)		//  ,  
    		return false;
    	S.top++;		//      1
    	S.data[S.top] = x;	//      :           x
    	/*
    		         :S.data[++S.top] = x;
    		    ++S.top,   S.top++
    	*/
    	return true;
    }
    
    4.4倉庫から出す
    //4.    :      (    )-             ,          
    bool Pop(SeqStack& S, ElemType &x) {
    	if (S.top == -1)		//  ,  
    		return false;
    	x = S.data[S.top];		//       :        x
    	S.top--;				//      1
    	/*
    		         :x = S.data[S.top--];
    		    S.top--,   --S.top,            
    	*/
    	return true;
    }
    
    4.5スタックトップ要素を読み出す
    //5.        
    bool GetTop(SeqStack S, ElemType &x) {
    	if (S.top == -1)		//  ,  
    		return false;
    	x = S.data[S.top];		//          :       ,       1
    	return true;
    }
    
    4.6 main関数
    int main() {
    	SeqStack S;		//       (      )
    
    	/*1、    */
    	InitStack(S);	
    
    	/*2、  */
    	if (StackEmpty(S))
    		printf("    !
    "
    ); else printf(" !
    "
    ); /*3、 */ ElemType e1; printf(" :"); scanf("%d", &e1); if (Push(S, e1)) printf(" !
    "
    ); else printf(" , !
    "
    ); /*4、 */ ElemType e2 = -1; if (GetTop(S, e2)) printf(" , :%d
    "
    , e2); else printf(" , !
    "
    ); /*5、 */ ElemType e3 = -1; if (Pop(S, e3)) printf(" , :%d
    "
    , e3); else printf(" , !
    "
    ); /*6、 */ ElemType e4 = -1; if (GetTop(S, e4)) printf(" , :%d
    "
    , e4); else printf(" , !
    "
    ); return 0; }
    5.まとめ
  • スタックの定義および操作特性(1)スタックの本質は依然として線形テーブルであり、一方の端だけで挿入または削除動作が可能である.線形表と同様に、順序記憶とチェーン記憶もあります.次の文章で議論を続けます.(2)スタックの動作特性は後進先出(LIFO,Last In First Out)
  • である.
  • スタックの基本的な動作は、動作が制限されているので、スタックの動作は、線形テーブルに比べても少ない.一般的には、(1)初期化(2)空判定(3)スタック出(4)スタック出(5)スタックトップ要素
  • を取得する.
  • は、本明細書ではまず、スタックの順序格納、すなわちシーケンススタックを説明する.シーケンススタックは配列によって実現されるので、配列の下付きとスタックトップポインタの関係に注意して動作します.また、i++(先に使ってプラス)と+i(先にプラスして使う)の違いに注意します.