#include <stdio.h>
#define MaxSize 10
//定义bool型变量
#define true 1
#define false 0
#define bool int
//这里定义栈中的元素都是int类型
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int top;
}SqStack;
//初始化栈,S.top值初始位-1
void InitStack(SqStack* S){
S->top = -1;
}
//判断一个栈是否为空,若为空,返回true;不为空,返回false
bool StackEmpty(SqStack S) {
if (S.top == -1)
return true;
else
return false;
}
//向栈中插入元素e
bool Push(SqStack* S, ElemType e) {
//栈满,无法继续插入元素
if (S->top == MaxSize - 1)
return false;
S->top = S->top + 1;
S->data[S->top] = e;
return true;
}
//出栈操作,返回被删除的栈顶元素的值
bool Pop(SqStack* S, ElemType* e) { //e是一个指针变量,指向被删除的元素的值
//若栈为空,则无法删除,返回false
if (S->top == -1)
return false;
*e = S->data[S->top];
S->top = S->top - 1;
return true;
}
//读取栈顶元素
bool GetTop(SqStack S, ElemType* e) { //e是一个指针变量,指向栈顶元素
if (S.top == -1)
return false;
*e = S.data[S.top];
return true;
}
//main函数
int main() {
SqStack mystack;
InitStack(&mystack);
//判断是否为空
printf("栈是否为空:1:空;0:不空。%d\n",StackEmpty(mystack));
//依次向栈中插入1,3,4,6,7
Push(&mystack, 1);
Push(&mystack, 3);
Push(&mystack, 4);
Push(&mystack, 6);
Push(&mystack, 7);
//获取栈顶元素
ElemType x;
GetTop(mystack, &x);
printf("栈顶元素为:%d\n",x);
//删除栈顶元素
ElemType d;
Pop(&mystack, &d);
//重新获取栈顶元素
GetTop(mystack, &x);
printf("栈顶元素为:%d\n", x);
return 0;
}
执行结果: