定义

只允许在一端进行插入或删除操作的线性表

注:考试中用结构体声明,不用结构体指针。
S.top=-1时栈为空

结构体

typedef struct{
    int data[50];
    int top;
}SqStack;

入栈

先加1,再做运算

S.top=S.top+1;
S.data[S.top]=1;

出栈

后减减

x=S.data[S.top];
S.top=S.top-1;

实现

定义结构体

栈中可设为含数据和栈顶的位置标记两种元素,因此有:

#define MaxSize 50
typedef int ElemType;
typedef struct{
    ElemType data[MaxSize];
    int top;    //指向栈顶
}SqStack;

声明并初始化栈

main中申明,后创建并调用初始化函数。初始化函数如下:

void InitStack(SqStack &S){
    S.top=-1;       //栈为空
}

判断栈是否为空

main中调用,判断函数如下:

bool StackEmpty(SqStack S){
    if(-1==S.top){
        return true;
    }else{
        return false;
    }
}

数据入栈

先判断数据是否塞满了,没有则自加再添加数据

bool Push(SqStack &S,ElemType x){
    if(S.top==MaxSize-1){
        return false;
    }
    S.data[++S.top]=x;
    return true;
}

获取栈顶元素

先判断栈是否空,再取值

bool GetTop(SqStack S,ElemType &x){
    if(StackEmpty(S)){
        return false;
    }else{
        x=S.data[S.top];
        return true;
    }
}

弹栈

先判断栈是否空,取出后S.top再减1

bool Pop(SqStack &S,ElemType &x){
    if(StackEmpty(S)){
        return false;
    }else{
        x=S.data[S.top--];
        return true;
    }
}