#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
enum ret_vla{MALLOC_OK = 100, MALLOC_NO, CREATE_OK, CREATE_NO, FULL_OK, 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;
//判断是否分配成功
int is_malloc_ok(Stack *stack)
{
if(stack == NULL)
{
return MALLOC_OK;
}
return MALLOC_NO;
}
//判断栈是否满
int is_full(Stack *stack)
{
if(stack->top < SIZE - 1)
{
return FULL_NO;
}
return FULL_OK;
}
//判断栈是否空
int is_empty(Stack *stack)
{
if(stack->top == -1)
{
return EMPTY_OK;
}
return EMPTY_NO;
}
//创建栈
int create_stack(Stack **stack)
{
*stack = (Stack*)malloc(sizeof(Stack)); //给栈分配空间
if(MALLOC_OK == is_malloc_ok(*stack))
{
return CREATE_OK;
}
return CREATE_NO;
}
//初始化top
void init_stack(Stack *stack)
{
stack->top = -1; //初始化top指向,指向-1
}
//进栈
int push_stack(Stack *stack, int num)
{
if(FULL_NO == is_full(stack))
{
stack->top++;
stack->stack_data[stack->top] = num;
return PUSH_OK;
}
printf("stack is full!");
return PUSH_NO;
}
//出栈
int pop_stack(Stack *stack)
{
if(EMPTY_NO == is_empty(stack))
{
printf("%d\n",stack->stack_data[stack->top]);
stack->stack_data[stack->top--];
return POP_OK;
// return stack->stack_data[stack->top--];
}
else
{
printf("stack is empty!");
return POP_NO;
}
}
//输出栈元素,清空
void display_stack(Stack *stack)
{
// while(stack->top != -1)
// {
// printf("%4d",stack->stack_data[stack->top--]);//逆序输出
// }
if(stack->top == -1)
{
printf("stack is empty!\n");
}
else
{
printf("%4d",stack->stack_data[stack->top]);//逆序输出
}
}
int main(int argc, char **argv)
{
Stack *stack = NULL; //定义结构体指针类型
int i;
create_stack(&stack); //创建栈
init_stack(stack); //初始化栈
//进栈
printf("数据进栈:\n");
for(i = 0; i < 10; i++)
{
if(PUSH_OK == push_stack(stack, i+1))
{
display_stack(stack);
printf("\n");
printf("push stack is success!\n");
}
else
{
printf("push stack is fail!\n");
}
// display_stack(stack);
}
//出栈
printf("数据出栈:\n");
for(i = 0; i < 10; i++)
{
if(POP_OK == pop_stack(stack))
{
printf("pop is success!\n");
}
else
{
printf("pop is fail!\n");
}
}
display_stack(stack);
free(stack);
return 0;
}
带头结点的顺序栈
最新推荐文章于 2023-07-28 15:00:25 发布