用数组实现堆栈的一些操作。
#include <stdio.h>
#include <stdlib.h>
#define BOTTOM -1
#define MAX 10
struct stack_data
{
int top;
int stack[MAX];
};
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)//创建栈
{
*stack = (Stack *)malloc(sizeof(Stack));
if((*stack) == NULL)
{
printf("malloc error!\n");
exit(-1);
}
}
void init_stack( Stack * stack)//初始化栈
{
stack->top = BOTTOM;
}
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 is_empty(Stack * stack)//判断栈是否为空
{
if(stack->top == BOTTOM)
{
return EMPTY_OK;
}
return EMPTY_NO;
}
int pop_stack(Stack * stack, int num)//出栈操作
{
if(is_empty(stack) == EMPTY_OK)
{
printf("stack is empty!\n");
return POP_NO;
}
stack->top--;
stack->stack[stack->top] = num;
return POP_OK;
}
int main()
{
Stack * stack;
int i;
create_stack(&stack);
init_stack(stack);
for(i=0;i<13;i++)//压栈
{
if(push_stack(stack,i+1) == PUSH_OK)
{
printf("%-5d",i+1);
printf("push ok %d!\n",i+1);
}
}
for(i= stack->top; i>=-3; i--)//出栈
{
if(pop_stack(stack,i+1) == POP_OK)
{
printf("%-5d",i+1);
printf("pop ok %d!\n",i+1);
}
}
free(stack);//释放堆栈
return 0;
}