#include <stdio.h>
#include <stdlib.h>
#define MAX 15
#define BOTTOM -1
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 = -1,POP_NO = -2};
void creat_stack(Stack ** stack); //创建栈
void init_stack(Stack * stack); //初始化栈
int push_stack(Stack * stack, int num); //入栈
int is_full(Stack * stack); //判断栈是否满
int pop_stack(Stack * stack); //出栈
int is_empty(Stack * stack); //判断栈是否空
int main()
{
Stack * stack;
int i,flag,n;
creat_stack(&stack);
init_stack(stack);
printf("入栈:\n");
for (i = 0;i < 20;i++) //入栈操作
{
flag = push_stack(stack,i); //flag用于存放入栈的结果信息
if (flag == PUSH_OK)
printf("push ok :%d\n",stack->stack[stack->top]);
else
printf("push fail\n");
}
printf("出栈\n");
for (i = MAX;i > 0;i--) //出栈操作
{
n = pop_stack(stack); //n有两种取值,第一是出栈失败标志,第二种是出栈成功后,取得的元素值
if(n != POP_NO)
printf("pop ok :%d\n",n);
}
free(stack); //释放空间
return 0;
}
void creat_stack(Stack ** stack)
{
*stack = (Stack *)malloc(sizeof(Stack));
if (NULL == *stack)
{
printf("malloc eror!\n");
exit(-1);
}
}
void init_stack(Stack * stack)
{
stack->top = BOTTOM;
}
int push_stack(Stack * stack,int num)
{
if (is_full(stack) == FULL_OK)
return PUSH_NO;
stack->top++;
stack->stack[stack->top] = num;
return PUSH_OK;
}
int is_full(Stack * stack)
{
if (stack->top >= MAX-1)
{
printf("stack is full\n");
return FULL_OK;
}
return FULL_NO;
}
int pop_stack(Stack * stack)
{
int n;
if (is_empty(stack) == EMPTY_OK)
return POP_NO;
n = stack->stack[stack->top];
stack->top--;
return n;
}
int is_empty(Stack * stack)
{
if (stack->top < BOTTOM+1)
{
printf("stack is empty\n");
return EMPTY_OK;
}
else
return EMPTY_NO;
}
Cclass6——数组实现的栈操作
最新推荐文章于 2020-07-29 21:47:04 发布