#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
#define MALLOC_OK 1
#define MALLOC_NO 0
#define CREATE_OK 1
#define CREATE_NO 0
enum ret_val{FULL_OK=100,FULL_NO,EMPTY_OK,EMPTY_NO,PUSH_OK,PUSH_NO,POP_OK,POP_NO }; //枚举类型{枚举常量}
//结构体类型,不可以赋值
struct stack_node
{
int stack_data[SIZE];
int top;
}; //分号别忘
typedef struct stack_node Stack;
//创建(顺序栈)
void create_stack(Stack ** stack)
{
*stack = (Stack *)malloc(sizeof(Stack));
}
//初始化top
void init_stack(Stack * stack)
{
stack->top= -1;
}
//判断是否满栈
int is_full(Stack * stack)
{
if(stack->top >= SIZE-1)
{
return FULL_OK;
}
return FULL_NO;
}
//判断是否空栈
int is_empty(Stack * stack)
{
if(stack->top == -1)
{
return EMPTY_OK;
}
return EMPTY_NO;
}
//进栈
int push_stack(Stack *stack,int num)
{
if(FULL_NO == is_full(stack))
{
/*
stack->top++;
stack->stack_data[top]=num;
*/
stack->stack_data[++stack->top]=num; //等价于上面
return PUSH_OK;
}
printf("stack is full!\n");
return PUSH_NO;
}
//出栈
int pop_stack(Stack *stack)
{
if(EMPTY_NO == is_empty(stack))
{
return stack->stack_data[stack->top--];
}
return POP_NO;
}
//取栈顶
int gettop_stack(Stack *stack,int num)
//置空栈
void empty_stack(Stack *stack)
int main()
{
Stack * stack;
int i;
int num;
create_stack(&stack);
init_stack(stack);
for(i=0;i<10;i++)
{
if(PUSH_OK == push_stack(stack,i+1))
{
printf("%4d",i);
}
else
{
printf("push stack fail!\n");
}
}
printf("\n");
for(i=0;i<10;i++)
{
num = pop_stack(stack);
if(POP_NO != num)
{
printf("%4d",num);
}
else
{
printf("pop stack fail!\n");
}
}
printf("\n");
free(stack);
return 0;
}