1. 程式人生 > >棧(C語言)

棧(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;
}