栈是一种数据结构。
栈可以用来存放数字,这些数字有前后顺序,先进入栈的数字在前,后进入的数字在后。
每次从栈里获得的数字一定是最后一个放到栈里的数字(也就是最后的数字)。
这种获得数字的顺序叫后进先出。
实现栈的时候需要提供一个叫做push的函数,这个函数负责向栈里加入数字。
实现栈的时候还需要提供一个叫做pop的函数,这个函数负责从栈里获得数字。
/*
* 栈stack.h
* */
#ifndef __STACK_H__
#define __STACK_H__
typedef struct
{
int arr[SIZE];
int num;
} stack;
//栈的初始化函数
void stack_init(stack *);
//栈的清理函数
void stack_deinit(stack *);
//计算有效数字个数的函数
int stack_size(const stack *);
//判断栈是否空的函数
int stack_empty(const stack *);
//判断栈是否满的函数
int stack_full(const stack *);
//向栈里加入数字的函数
void stack_push(stack *, int );
//从栈里获得数字的函数(同时删除这个数字)
int stack_pop(stack *, int *);
//从栈里获得数字的函数(不会删除数字)
int stack_top(const stack *, int *);
#endif //__STACK_H__
/*
* 栈stack.c
* */
#include "stack.h"
//栈的初始化函数
void stack_init(stack *p_stack)
{
p_stack->num = 0;
}
//栈的清理函数
void stack_deinit(stack *p_stack)
{
p_stack->num = 0;
}
//计算有效数字个数的函数
int stack_size(const stack *p_stack)
{
return p_stack->num;
}
//判断栈是否空的函数
int stack_empty(const stack *p_stack)
{
return !(p_stack->num);
}
//判断栈是否满的函数
int stack_full(const stack *p_stack)
{
return p_stack->num >= SIZE;
}
//向栈里加入数字的函数
void stack_push(stack *p_stack, int val)
{
if (p_stack->num >= SIZE)
{
return ;
}
p_stack->arr[p_stack->num] = val;
p_stack->num++;
}
//从栈里获得数字的函数(同时删除这个数字)
int stack_pop(stack *p_stack, int *p_num)
{
if (!(p_stack->num))
{
return 0;
}
p_stack->num--;
*p_num = p_stack->arr[p_stack->num];
return 1;
}
//从栈里获得数字的函数(不会删除数字)
int stack_top(const stack *p_stack, int *p_num)
{
if (!(p_stack->num))
{
return 0;
}
*p_num = p_stack->arr[p_stack->num - 1];
return 1;
}
/*
* 栈main.c
* */
#include <stdio.h>
#include "stack.h"
int main()
{
int num = 0;
stack stk = {0};
stack_init(&stk);
printf("判断空的结果是%d\n", stack_empty(&stk));
printf("判断满的结果是%d\n", stack_full(&stk));
printf("有效数字个数是%d\n", stack_size(&stk));
stack_push(&stk, 6);
stack_push(&stk, 9);
stack_push(&stk, 11);
stack_push(&stk, 17);
stack_push(&stk, 23);
printf("判断空的结果是%d\n", stack_empty(&stk));
printf("判断满的结果是%d\n", stack_full(&stk));
printf("有效数字个数是%d\n", stack_size(&stk));
stack_top(&stk, &num);
printf("最后一个数字是%d\n", num);
stack_pop(&stk, &num);
printf("%d ", num);
stack_pop(&stk, &num);
printf("%d ", num);
stack_pop(&stk, &num);
printf("%d ", num);
stack_pop(&stk, &num);
printf("%d ", num);
stack_pop(&stk, &num);
printf("%d ", num);
printf("\n");
printf("判断空的结果是%d\n", stack_empty(&stk));
printf("判断满的结果是%d\n", stack_full(&stk));
printf("有效数字个数是%d\n", stack_size(&stk));
stack_deinit(&stk);
return 0;
}