データ構造のスタックのpushとpop操作(シーケンス記憶構造のc実装)

1947 ワード

スタック(stack)は、テーブルの最後にのみ挿入および削除操作を行う線形テーブルを限定する.
#include 
#include 
//        ,       

#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE 0
#define MAXSIZE 10
typedef int Status;
typedef int ElemType;
typedef struct {
    ElemType data[MAXSIZE];
    int top;//    
}Stack;
//1.    
Status InitStack(Stack *S){
    int i;
    for(i=0;idata[i]=NULL;
    S->top=-1;
    return OK;
}
//2.        n   
Status CreateStack(Stack *S,int n){
    if(n>MAXSIZE || n<1){
        printf("      !
"); return ERROR; } srand(time(0)); int i; for(i=0;idata[i]=rand()%100+1; } S->top=n-1; return OK; } //3. Status push(Stack *S,ElemType e){ if(MAXSIZE-1==S->top){ printf("
"); return ERROR; } // ++(S->top); S->data[S->top]=e; return OK; } //4. Status pop(Stack *S,ElemType *e){ // , e if(-1==S->top){ printf(" !
"); return ERROR; } *e=S->data[S->top]; --(S->top); return OK; } int main() { Stack S; int i,n,e; if(OK!=InitStack(&S)){ printf(" !"); return ERROR; } printf(" n="); scanf("%d",&n); if(OK==CreateStack(&S,n)){ for(i=0;i<=S.top;i++){ printf("%d\t",S.data[i]); } } printf("
"); while(1==scanf("%d",&e)){ if(ERROR==push(&S,e)){ break; }else{ for(i=0;i<=S.top;i++) printf("%d\t",S.data[i]); } } printf("

"); while(OK==pop(&S,&e)){ getchar(); printf("%d\t",e); } return 0; }