顺序栈
功能被限制的表:
栈:把表结构限制为只有一个端口进出,元素先进后出FILO。 而栈内存正是使用了这种结构管理内存,所以才叫栈内存。
实现功能列表
// 创建栈
StackOrder* create_stack(int cal)
// 销毁栈
void destroy_stack(StackOrder* stack)
// 栈空
bool empty_stack(StackOrder* stack)
// 栈满
bool full_stack(StackOrder* stack)
// 入栈
bool push_stack(StackOrder* stack,TYPE val)
// 出栈
bool pop_stack(StackOrder* stack)
// 获取栈顶元素
TYPE top_stack(StackOrder* stack)
//判断是否是合法出入栈顺序
bool is_pop(int* in,int* out,size_t len)
代码
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define TYPE int
typedef struct StackOrder
{
TYPE* ptr;
int cal; //容量
int top; //栈顶
}StackOrder;
// 创建栈
StackOrder* create_stack(int cal)
{
StackOrder* stack = malloc(sizeof(StackOrder));
stack->ptr = malloc(sizeof(TYPE)*cal);
stack->cal = cal;
stack->top = -1;
/*
top = cal; 满减栈
top = cal-1; 空减栈
top = -1; 满增栈
top = 0; 空增栈
*/
return stack;
}
// 销毁栈
void destroy_stack(StackOrder* stack)
{
free(stack->ptr); //先释放内部
free(stack); //在释放结构体
}
// 栈空
bool empty_stack(StackOrder* stack)
{
return -1 == stack->top; //初始位置在-1说明空
}
// 栈满
bool full_stack(StackOrder* stack)
{
return stack->top >= stack->cal-1; //栈顶 大于等于 栈容量-1 说明满了 栈顶初始在-1
}
// 入栈
bool push_stack<