一、基本概念
栈是只能在一端进行插入和删除的线性表,栈具有后进先出或先进后出的特性。插入和删除的一端称为栈顶,另一端称为栈底。常见的栈操作入栈和出栈。本文主要介绍我在系统中使用的C操作栈的简易版本
二、栈的运算
1、初始化栈
#define pt_stack(T,size) \
struct{
\
T buf[size];\
int top;\
}
#define pt_stack_init() \
{
.top = -1;}\
2、判断栈的长度
#define pt_stack_len(s) (sizeof((s)->buf)/sizeof((s)->buf[0]))
3、判断栈的数量
#define pt_stack_cap(s) ((s)->top + 1)
4、判断栈是否为空
#define pt_stack_empty(s) ((s)->top == -1)
5、判读栈是否满
#define pt_stack_full(s) ((s)->top == pt_stack_len(s) - 1)
6、复位栈
#define pt_stack_reset(s) ((s)->top = -1)
7、入栈
#define pt_stack_push(s,el)\
(!pt_stack_full(s) && ((s)->buf[++(s)->top] = el