#include <stdio.h>
#include <stdlib.h>
typedef struct stack{
int *arr; // 栈首地址
int cap; // 栈容量
int top; // 栈顶
}stack_t;
/*
初始化栈,传入栈结构体指针和 cap, 使用 calloc 给 arr 分配空间
*/
void stack_init(stack_t *stack ,int cap)
{
stack->arr = (int *)calloc(cap, sizeof(int));
stack->cap = cap;
stack->top = 0;
}
void stack_deinit(stack_t *stack)
{
free(stack->arr);
stack->arr = NULL;
stack->cap = 0;
stack->top = 0;
}
/*
栈满条件为 top = cap
*/
int stack_full(stack_t *stack)
{
return stack->top >= stack->cap;
}
/*
栈空条件为 top = 0
*/
int stack_empty(stack_t *stack)
{
return !stack->top;
}
/*
入栈操作,将数据放入arr[top], top+1
*/
void stack_push(stack_t *stack ,int data)
{
stack->arr[stack->top++] = data;
}
/*
出栈操作,top-1,并返回 arr[top]
*/
int stack_pop(stack_t *stack)
{
return stack->arr[--stack->top];
}
/*
获取栈顶数据,返回 arr[top-1]
*/
int stack_top(stack_t *stack)
{
return stack->arr[stack->top-1];
}
/*
获取栈中元素个数,返回 top
*/
int stack_size(stack_t *stack)
{
return stack->top;
}
int main(int argc ,char *argv[])
{
stack_t stack;
stack_init(&stack ,10);
printf("%s " ,stack_full(&stack) ? "满" :"不满");
printf("%s\n" ,stack_empty(&stack) ? "空" :"不空");
int i = 250;
while(!stack_full(&stack))
stack_push(&stack ,i++);
printf("%s\n" ,stack_full(&stack) ? "满" :"不满");
printf("栈顶的值为%d\n" ,stack_top(&stack));
printf("栈的大小为%d\n" ,stack_size(&stack));
printf("出栈:");
while(!stack_empty(&stack))
printf("%d " ,stack_pop(&stack));
printf("\n");
printf("%s\n" ,stack_empty(&stack) ? "空" :"不空");
stack_deinit(&stack);
return 0;
}
数据结构—栈
于 2021-09-24 08:54:21 首次发布