栈(C语言)

栈是一种数据结构。

栈可以用来存放数字,这些数字有前后顺序,先进入栈的数字在前,后进入的数字在后。

每次从栈里获得的数字一定是最后一个放到栈里的数字(也就是最后的数字)。

这种获得数字的顺序叫后进先出。

实现栈的时候需要提供一个叫做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;
}









猜你喜欢

转载自blog.csdn.net/uperficialyu/article/details/79027353