[학습 점적 - 데이터 구조 - 스 택 & 대기 열] 순서 스 택 의 구축, 스 택 에 들 어가 고 스 택 을 나 가 며 빈 칸 을 판단 합 니 다.

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>

//         
#define STACK_MAX_SIZE 100

//       
#define INCREAMENT 10

//     
#define ERROR 0
#define OK 1
#define SOVERFLOW -1 
#define YES 1
#define NO 0 


typedef int Status,SElemType,ElemType;
typedef struct{
    SElemType *base;
    SElemType *top;
    int stackSize;//         ,         。          
}sqStack;

Status InitStack(sqStack &S){
     //      ,     
     S.base = (SElemType *)malloc(STACK_MAX_SIZE * sizeof(ElemType));
     if(!S.base){
          exit(SOVERFLOW);                   
     }
     S.top = S.base;
     S.stackSize = STACK_MAX_SIZE;
     return OK;  
}


//     , e         OK。      。 
Status GetTop(sqStack S,SElemType &e){
    if(S.top == S.base){
         return ERROR;
    } 
    e = *(S.top - 1);
    return OK;  
}

/*
 * Push(S,e)  S     e。        :
 * 1.    ,      。          ,   。
 * 2.   。     ,        。 
 **/
Status Push(sqStack &S,SElemType e){
    if((S.top - S.base) >= S.stackSize){
         S.base = (ElemType*)realloc(S.base,(S.stackSize + INCREAMENT) * sizeof(ElemType));
         if(!S.base){
             exit(SOVERFLOW);                  
         }
         S.top = S.base + S.stackSize;
         S.stackSize += INCREAMENT;  
    }
    //     ,      。      
    *S.top = e;
    S.top ++; 
    return OK;      
}

/*
 *        。      :
 *  1.   。      ,          e。 
 *  2.    ,    。 
 */ 
Status Pop(sqStack &S,ElemType &e){
    if(S.top == S.base){
        return ERROR;              
    }
    //     ,      。 
    S.top --;
    e = *S.top; 
    return OK;   
}

Status isEmpty(sqStack S){
    if(S.top == S.base){
        return YES;         
    }
    return NO;   
} 

int main(){
    sqStack S;
    InitStack(S);
    int rands,top,rest; 
    printf("  :"); 
    for(int i = 0;i<100;i++){
         rands = rand()%100;
         Push(S,rands);
         GetTop(S,top);
         printf("%d ",top);     
    }
    
    printf("
:"); while(!isEmpty(S)){ Pop(S,rest); printf("%d ",rest); } printf("
"); system("pause"); return 0; }

좋은 웹페이지 즐겨찾기