//栈 stack.h
#ifndef __STAXK_H__
#define __STAXK_H__
//结构体类型,表示栈
typedef struct stack{
int* arr;//记录存储区首地址
int top;//元素下标
int cap;//容量
} stack_t;
//栈的操作
//栈的初始化 stack_t s s.arr s.top s.cap
void stack_init(int cap,stack_t* s);
//栈的释放
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
#include<stdio.h>
#include<stdlib.h>
#include"stack.h"
//栈的初始化
void stack_init(int cap, stack_t *s){
s->arr = malloc(sizeof(int) * cap);
s->top = 0;
s->cap = cap;
}
//栈的释放
void stack_deinit(stack_t* s){
free(s->arr);
s->arr = NULL;
s->top = 0;
s->cap = 0;
}
//判满
int stack_full(stack_t *s){
return (s->top == s->cap ? 1 : 0);
}
//判空
int stack_empty(stack_t *s){
return (s->top == 0 ? 1 : 0);
}
//压栈
void stack_push(stack_t *s, int data){
s->arr[s->top]= data;
s->top++;
}
//弹栈
int stack_pop(stack_t *s){
return s->arr[--(s->top)];
}
#include<stdio.h>
#include"stack.h"
int main(){
stack_t sk;
//初始化
stack_init(5,&sk);
//压栈
int data=1;
while(stack_full(&sk) != 1){
stack_push(&sk,data);
data++;
}
//弹栈
while(stack_empty(&sk) != 1){
printf("%d",stack_pop(&sk));
}
printf("\n");
//释放
stack_deinit(&sk);
return 0;
}