#include<stdio.h>
#include<stdlib.h>
#define STACK_SIZE 20//定义栈的空间大小
struct Stack
{
int datas[STACK_SIZE];//栈数据保存区
int top;//栈顶部位置标识
//空栈时top=-1
};
//初始化
void initStack(struct Stack* stack)
{
stack->top = -1;
}
//清空栈
int isEmpty(struct Stack* stack)
{
return (stack->top == -1) ? 1 : 0;
}
//判断栈是否满
int isFull(struct Stack* stack)
{
return (stack->top == STACK_SIZE - 1) ? 1 : 0;
}
//入栈
int push(struct Stack* stack,int data)
{
if (isFull(stack))
{
return 0;
}
stack->datas[++stack->top] = data;
return 1;
}
//出栈
void pop(struct Stack* stack, int * retVale)
{
//判断栈是否为空
if (isEmpty(stack))
{
return 0;
}
*retVale = stack->datas[stack->top--];
return 1;
}
//读栈
int getTop(struct Stack* stack, int * retValue)
{
if (isEmpty(stack))
{
return 0;
}
*retValue = stack->datas[stack->top];
return 1;
}
void printStack(struct Stack* stack)
{
if (isEmpty(stack)) {
printf("当前栈是个空栈!\n");
return;
}
printf("当前栈中的内容如下:\n");
for (int i = stack->top; i > -1; i--)
{
printf("[%d]:%d \n", i, stack->datas[i]);
}
}
int main()
{
//初始化栈
struct Stack stack;
initStack(&stack);
//压栈
//for (int i = 0; i <= 29; i++)超出STACK_SIZE
for(int i=0;i<20;i++)
{
push(&stack, i);
}
printStack(&stack);
//出栈
int retValue;
for (int i = 0; i < 10; i++)
{
pop(&stack, &retValue);
}
printStack(&stack);
return 0;
}