代码:
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
#define BOTTON -1
struct stack_data
{
int stack[MAX];
int top;
};
typedef struct stack_data Stack;
enum return_result{FULL_OK,FULL_NO,EMPTY_OK,EMPTY_NO,PUSH_OK,PUSH_NO,POP_OK,POP_NO};
void create_stack(Stack ** stack)//创建栈
{
// do
// {
*stack = (Stack *)malloc(sizeof(Stack));
// }while(*stack == NULL);
if(NULL == *stack)
{
printf("malloc error\n");
exit(-1);
}
}
void init_stack(Stack * stack)//初始化栈
{
stack->top = BOTTON;
}
int is_full(Stack *stack)//判断栈满
{
if(stack->top == MAX-1 )
{
return FULL_OK;
}
return FULL_NO;
}
int push_stack(Stack *stack , int num)//入栈
{
if(is_full(stack) == FULL_OK)
{
printf("stack is full\n");
return PUSH_NO;
}
stack->top++;
stack->stack[stack->top] = num;
return PUSH_OK;
}
int pop_stack(Stack *stack)//出栈
{
if(is_full(stack) == FULL_OK)
{
while(stack->top != BOTTON)
{
printf("stack = %d\n",stack->stack[stack->top]);
stack->top--;
}
return POP_OK;
}
else
{
return POP_NO;
}
}
int if_empty(Stack *stack)//判断栈是否为空
{
if(stack->top <= BOTTON)
{
printf("stack is empty\n");
return EMPTY_OK;
}
else
{
return EMPTY_NO;
}
}
int get_top(Stack *stack)//得到栈顶元素
{
if(if_empty(stack) == EMPTY_OK)
{
return 0;
}
else
{
printf("top = %d\n",stack->stack[stack->top]);
return 1;
}
}
int main()
{
Stack * stack;
create_stack(&stack);
init_stack(stack);
int i;
for(i = 0;i < 13;i++)
{
if(push_stack(stack , i + 1) == PUSH_OK)
{
printf("push ok %d !\n",i+1);
}
}
get_top(stack);
pop_stack(stack);
if_empty(stack);
get_top(stack);
free(stack);
return 0;
}
结果: