目录
[(2) 弹栈细分](#(2) 弹栈细分)
[4.1 初始化接口](#4.1 初始化接口)
[4.2 压栈](#4.2 压栈)
[4.3 弹栈](#4.3 弹栈)
[4.4 获取栈顶元素](#4.4 获取栈顶元素)
[4.5 判断栈是否为空](#4.5 判断栈是否为空)
[4.6 判断栈是否为满](#4.6 判断栈是否为满)
一、栈的类型
分满栈和空栈:满栈表示pos指向已有元素位置,空栈表示pos指向待插入位置
递增和递减:分别指 ↑ 和 ↓
1、typedef int element;
结构体定义:struct stack{
element data[10];
int pos;
};
2、struct stack k1;
k1.pos=0; // pos初始值依靠具体实现的栈类型决定
(1)压栈细分
递增空栈
k1.data[k1.pos] = e;
k1.pos++;
递增满栈
k1.pos++;
k1.data[k1.pos] = e;
递减空栈
k1.data[k1.pos] = e;
k1.pos--;
递减满栈
k1.pos--;
k1.data[k1.pos] = e;


(2) 弹栈细分
递增空栈
k1.pos--;
e = k1.data[k1.pos];
递增满栈
e = k1.data[k1.pos];
pos--;
递减空栈
k1.pos++;
e= k1.data[k1.pos];
递减满栈
e = k1.data[k1.pos];
k1.data++:


压栈、弹栈原理相同,记住增减方向,空说明指向待插入位置,满说明指向已有元素的位置,不能鸠占鹊巢的话,就识相些先挪窝再添新元素。
二、栈的结构体类型定义如下
C
#define MaxStackSize 5
typedef int Element;
typedef struct
{
Element data[MaxStackSize];
int top;
}ArrayStack;
三、栈的接口
栈满不能再放新元素,栈空无法弹栈
栈不提供遍历接口,都是根据栈的特性来的,栈的接口设计如下:
C
void initArraStack(ArrayStack *stack);
int pushArrayStack(ArrayStack *stack,Element e);
int popArrayStack(ArrayStack *stack);
Element getTopArrayStack(const ArrayStack *stack);
int isEmptyArrayStack(const ArrayStack *stack);
int isFullArrayStack(const ArrayStack *stack);
以上为:栈初始化、压栈、弹栈、获取栈顶元素、栈是否为空、栈是否为满接口
四、递增空栈接口的实现
其他类型的接口类似,以递增空栈为例:
4.1 初始化接口
C
void initArraStack(ArrayStack *stack)
{
memset(stack->data,0,sizeof(stack->data));
stack->top = 0;
}
(1)将栈上申请的存储数据区初始化为0
(2)由于是递增空栈,栈顶初始化为0
如果是递增满栈,则需要初始化为-1
4.2 压栈
C
int pushArrayStack(ArrayStack* stack, Element e)
{
stack->data[stack->top] = e;
++stack->top;
}
空栈,stack->top指向的是待插入位置,先赋值后++
4.3 弹栈
C
int popArrayStack(ArrayStack* stack)
{
--stack->top;
}
由于是在栈上申请的数据空间 ,只需要减减就行,数据无需自己清理
4.4 获取栈顶元素
C
Element getTopArrayStack(const ArrayStack* stack)
{
int pos = stack->top-1;
return stack->data[pos];
}
由于是递增空栈,指向的是待插入位置,先减一后stack->data[pos];返回栈顶元素的值
4.5 判断栈是否为空
C
int isEmptyArrayStack(const ArrayStack* stack)
{
return stack->top == 0;
}
栈顶为0即代表栈为空
4.6 判断栈是否为满
C
int isFullArrayStack(const ArrayStack* stack)
{
return stack->top == MaxStackSize;
}
这你就想想定义MaxStackSize为5,从0开始压入元素,0-4就已经满栈,由于是递增空栈,这时候stack->top正好指在5的位置,也就是说stack->top这时候的大小正好为5(MaxStackSize)
如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!
