84 lines
1.5 KiB
C
84 lines
1.5 KiB
C
//
|
|
// Created by ricardo on 2022/10/25.
|
|
//
|
|
|
|
#ifndef MAZE_STACK_H
|
|
#define MAZE_STACK_H
|
|
|
|
#include "cstdlib"
|
|
#include "maze_node.h"
|
|
|
|
// 默认的栈大小
|
|
#define DEFAULT_STACK_LENGTH 200
|
|
|
|
// 由于将迷宫中的所有节点都储存在数组中
|
|
// 存储路径的栈就不用存储节点的指针
|
|
// 而是直接存储节点在数组中的索引
|
|
struct stack {
|
|
int* top;
|
|
int* base;
|
|
int stack_size;
|
|
};
|
|
|
|
typedef struct stack stack_t;
|
|
typedef struct stack* stack_p;
|
|
|
|
/**
|
|
* 初始化栈空间
|
|
* @param s 栈结构体的引用
|
|
* @return 栈是否创建成功
|
|
*/
|
|
bool init_stack(stack_t& s);
|
|
|
|
/**
|
|
* 判断栈是否为空
|
|
* @param s 对于栈结构体的引用
|
|
* @return
|
|
*/
|
|
bool stack_is_empty(const stack_t& s);
|
|
|
|
/**
|
|
* 判断栈是否已满
|
|
* @param s 对于结构体的引用
|
|
* @return
|
|
*/
|
|
bool stack_is_full(const stack_t& s);
|
|
|
|
/**
|
|
* 在栈中压入元素
|
|
* @param s 栈引用
|
|
* @param value 被压入栈的值
|
|
* @return 压入栈是否成功
|
|
*/
|
|
bool stack_push(stack_t& s, int index);
|
|
|
|
/**
|
|
* 在栈中弹出元素
|
|
* @param s 栈引用
|
|
* @param value 被弹出栈的值
|
|
* @return 弹出栈是否成功
|
|
*/
|
|
bool stack_pop(stack_t& s, int* index);
|
|
|
|
/**
|
|
* 获得栈底的元素
|
|
* @param s 栈引用
|
|
* @return
|
|
*/
|
|
int stack_get_bottom(const stack_t& s);
|
|
|
|
/**
|
|
* 获得栈顶的元素
|
|
* @param s 栈引用
|
|
* @return
|
|
*/
|
|
int stack_get_top(const stack_t& s);
|
|
|
|
/**
|
|
* 释放栈所占用的空间
|
|
* @param s 栈引用
|
|
*/
|
|
void stack_free(stack_t& s);
|
|
|
|
#endif //MAZE_STACK_H
|