棧(C語言)
阿新 • • 發佈:2019-01-05
棧是一種資料結構。
棧可以用來存放數字,這些數字有前後順序,先進入棧的數字在前,後進入的數字在後。
每次從棧裡獲得的數字一定是最後一個放到棧裡的數字(也就是最後的數字)。
這種獲得數字的順序叫後進先出。
實現棧的時候需要提供一個叫做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;
}