顺序栈的 进栈 出栈 打印
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
#define BUTTOM -1
struct stack_date
{
int top;
int stack[MAX];
};
typedef struct stack_date 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)
{
*stack = (Stack *)malloc(sizeof(Stack));
if(NULL == *stack)
{
printf("Malloc error!\n");
exit(-1);
}
}
void init_stack(Stack * stack)
{
stack->top = BUTTOM;
}
int is_full(Stack * stack)
{
if(stack->top == MAX-1)
{
return FULL_OK;
}
else
{
return FULL_NO;
}
}
int push_stack(Stack * stack,int num)
{
if(is_full(stack) == FULL_OK)
{
printf("Stack is full.\n");
return PUSH_NO;
}
else
{
stack->top++;
stack->stack[stack->top] = num;
return PUSH_OK;
}
}
int is_empty(Stack * stack)
{
if(stack->top == -1)
{
return EMPTY_OK;
}
else
{
return EMPTY_NO;
}
}
void gettop_stack(Stack * stack)
{
int i;
if(is_empty(stack) == EMPTY_OK)
{
printf("Stack is empty.\n");
}
else
{
for(i = stack->top; i > -1; i--)
{
printf("num = %d\n",stack->stack[i]);
}
}
}
int pop_stack(Stack * stack)
{
int n;
if(is_empty(stack) == EMPTY_OK)
{
printf("Stack is empty.Pop fail.\n");
return POP_NO;
}
else
{
stack->top--;
n = stack->top + 1;
return stack->stack[n];
}
}
int main()
{
Stack * stack;
int i,n;
create_stack(&stack);
init_stack(stack);
for(i = 0; i < 13; i++)
{
if(push_stack(stack,i+1) == PUSH_OK)
{
printf("PUSH OK %d !\n",i+1);
}
}
gettop_stack(stack);
for(i = MAX; i > -3; i--)
{
n = pop_stack(stack);
if(n != POP_NO)
{
printf("POP OK %d.\n",n);
}
}
gettop_stack(stack);
free(stack);
return 0;
}