栈操做

#include <stdio.h>

#define MaxSize 10

typedef struct{
    int data[MaxSize];
    int top;
}Stack;

void InitStack(Stack &);    //初始化 
int StackEmpty(Stack);      //判断栈是否为空
bool Push(Stack & , int e);     //入栈 
int Pop(Stack & , int &);   //出栈 
int  TopData(Stack , int);  //读取栈顶数据 

int main(void){
    Stack s;
    InitStack(s);
    
    switch(StackEmpty(s)){
        case 0:
            printf("栈空.\n");
            break;
        case 1:
            printf("栈满.\n");
            break;
        case 2:
            printf("栈不为空且不满.\n");
    }
    
    Push(s,1);
    Push(s,2);
    Push(s,3);
    Push(s,4);
    
    int e = 0;
    printf("出栈的数据是:%d\n",Pop(s,e));
    printf("出栈的数据是:%d\n",Pop(s,e));
    
    printf("栈顶数据为:%d\n",TopData(s,e));
    return 0;
} 

//初始化 
void InitStack(Stack &s){
    s.top = -1;
}

//判断栈是否为空 
int StackEmpty(Stack s){
    if(s.top = -1){
        return 0;
    }else if(s.top == MaxSize - 1){
        s.top == MaxSize - 1;
        return 1;
    }else{
        return 2;
    }
} 

//入栈
bool Push(Stack &s , int e){
    if(s.top == MaxSize - 1){
        printf("栈满");
        return false;
    }
    s.data[++s.top] = e;
    return true;
} 

//出栈
int Pop(Stack &s , int &e){
    if(s.top == -1){
        printf("栈空");
        return 0;
    }
    e = s.data[s.top--];
    return e;
}

//读取栈顶数据 
int TopData(Stack s , int e){
    if(s.top == -1){
        printf("栈空");
        return 0;
    }
    e = s.data[s.top];
    return e;
}