#include <stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 10
typedef int Status;
typedef int SelemType;
typedef struct
{
SelemType data[MAXSIZE];
int top;
} StackList;
//初始化栈
Status InitStack(StackList *stack)
{
stack->top = -1;
return OK;
}
//判断栈stack是否为空栈
Status StackEmpty(StackList stack)
{
if (stack.top == -1) return TRUE;
else return FALSE;
}
//将SelemType:e 做入栈操作
//初始化条件:栈stack非满
Status Push(StackList *stack,SelemType e)
{
if (stack->top >= MAXSIZE-1) return ERROR;
stack->top++;
stack->data[stack->top] = e;
return OK;
}
//出栈
Status Pop(StackList *stack,SelemType *e)
{
if (stack->top == -1) return FALSE;
*e = stack->data[stack->top];
stack->top--;
return OK;
}
//获取栈stack的元素个数
int StackLength(StackList stack)
{
return stack.top+1;
}
// 把S置为空栈
Status ClearStack(StackList *stack)
{
stack->top=-1;
return OK;
}
Status visit (SelemType e){
printf("%d\n",e);
return OK;
}
//从栈底到栈顶遍历每一个元素
Status StackTraver (StackList *stack,SelemType *e)
{
int i;
if (stack->top == -1) return ERROR;
for (i=0;i<=stack->top;i++)
{
visit(stack->data[i]);
}
return OK;
}
int main() {
StackList stack;
int i;
SelemType e ;
printf("初始化栈stack...:\n");
InitStack(&stack);
if (StackEmpty(stack))
printf("栈stack是空栈...\n");
printf("顺序将0,100,200,···500做入栈操作...\n");
for (i = 0;i<6;i++)
Push(&stack,i*100);
printf("做入栈操作后栈stack长度:%d\n",StackLength(stack));
printf("栈stack各元素为:\n");
StackTraver(&stack, &e);
printf("将栈顶元素做出栈操作...\n");
Pop(&stack, &e);
printf("栈顶元素:%d已经出栈\n",e);
printf("栈顶元素出栈之后:栈stack长度:%d\n",StackLength(stack));
printf("清空stack栈\n");
ClearStack(&stack);
return 0;
}