C语言数据结构之栈
/*栈的演示*/
#include <stdio.h>
#include <stdlib.h> //为了用malloc函数
/*声明结构体数据类型,用于描述栈的属性*/
typedef struct stack {
int *arr; //栈的首地址
int cap; //栈的容量
int top; //栈顶,便于入栈和出栈
}stack_t;
/*定义初始化栈的函数*/
void stack_init(stack_t *stack, int cap){
stack->arr = (int *)malloc(cap * sizeof(int)); //分配10个数的内存
stack->cap = cap; //指定容量为10个数
stack->top = 0; //一开始为空栈
}
/*定义释放栈内存资源函数*/
void stack_del(stack_t *stack){
free(stack->arr); //释放内存
stack->cap = 0;
stack->top = 0;
}
/*定义判断栈满的函数*/
int stack_full(stack_t *stack){
return stack->top >= stack->cap; //满返回1,不满返回0
}
/*定义判断栈空的函数*/
int stack_empty(stack_t *stack) {
return !stack->top; //空(top=0)返回1,不空返回0
}
/*定义入栈函数,将数据保存到栈中*/
void stack_push(stack_t *stack, int data){
stack->arr[stack->top++] = data;
}
/*定义出栈函数,从栈中取出数据*/
int stack_pop(stack_t *stack) {
return stack->arr[--stack->top];
}
int main(void){
//1.定义栈
stack_t stack;
//2.初始化栈
stack_init(&stack, 10); //栈的容量为10个数
//3.判断栈满和栈空
int ret = 0;
ret = stack_full(&stack);
printf("%s\n", ret ?"满":"不满");
ret = stack_empty(&stack);
printf("%s\n", ret ?"空":"不空");
//4.向栈中保存10个数据
int i = 250;
while(!stack_full(&stack)) {
stack_push(&stack, i++);
}
//5.从栈中取出数据并且打印
while(!stack_empty(&stack)) {
printf("%d\n", stack_pop(&stack));
}
//释放栈
stack_del(&stack);
return 0;
}
流程解析: