栈 先进后出 FILO
stack.h
//stack.h 栈的头文件
#ifndef __STACK_H_
#define __STACK_H_
#include<stdio.h>
#include<stdlib.h>//malloc()
//定义结构体类型,表示栈
typedef struct stack{
int* arr;//数组首元素地址
int cap;//栈的容量
int top;//栈顶的位置
}stack_t;// struct stack s; stack_t s;
//栈的操作
//栈的初始化操作
//stack_t s;
//调用stack_init(&s,5);
void stack_init(stack_t* s,int cap);
//栈的释放
void stack_deinit(stack_t* s);
//栈满否 满1 非满0
int stack_full(stack_t* s);
//栈空否 空 1 非空0
int stack_empty(stack_t* s);
//压栈
void stack_push(stack_t* s,int data);
//弹栈
int stack_pop(stack_t* s);
#endif //__STACK_H_
stack.c
//stack.c 栈的实现
#include"stack.h"
//栈的初始化操作
// stack_t stack;
// stack_init(&stack,5);
void stack_init(stack_t* s,int cap){
s->arr = malloc(sizeof(int) * cap);
s->cap = cap;//容量
s->top = 0;//初始无数据,空栈
}
//栈的释放
void stack_deinit(stack_t* s){
free(s->arr);
s->arr = NULL;
s->cap = 0;
s->top = 0;
}
//栈满否
int stack_full(stack_t* s){
if( s->top == s->cap){
//满
return 1;
}else{
return 0;
}
}
//栈空否
int stack_empty(stack_t* s){
if(s->top == 0){
//空
return 1;
}else{
return 0;
}
}
//压栈
void stack_push(stack_t* s,int data){
//将参数锁接受的数据,存入以top做下标的数组元素
s->arr[s->top] = data;
//top的值加一,记录下一个位置
s->top++;
}
//弹栈
int stack_pop(stack_t* s){
return s->arr[--s->top];
}
main.c
//main.c 栈的测试
#include"stack.h"
int main(void){
//定义栈
stack_t stack;
//初始化
stack_init(&stack,5);
int data = 1;
//循环压栈,栈满为止
while(stack_full(&stack) != 1){
stack_push(&stack,data++);
}
printf("栈%s满\n",stack_full(&stack) ? "是" : "非");
//循环弹栈,栈空为止
while(stack_empty(&stack) != 1){
printf("%d\n",stack_pop(&stack));
}
printf("栈%s空\n",stack_empty(&stack) ? "是" : "非");
//栈的释放
stack_deinit(&stack);
return 0;
}