数据结构——堆栈
在了解堆栈之前,先来了解一下后缀表达式
中缀表达式:运算符号位于两个运算数之间,如a+b*c-d/e
后缀表达式:运算符号位于两个运算数之后,如abc*+de/-
1.堆栈的抽象数据类型描述
堆栈:具有一定操作约束的线性表
只在一端(栈顶,Top)做插入、删除
插入数据: 入栈(Push)
删除数据:出栈(Pop)
后入先出: Last In First Out (LIFO)
描述
类型名称:堆栈(Stack)
数据对象集:一个有0个或多个元素的有穷线性表
操作集:长度为MaxSize的堆栈S属于Stack,堆栈元素item属于ElementType
-
Stack CreateStack(int MaxSize):生成空堆栈其最大长度为MaxSize
-
int IsFull(Stack S,int MaxSize):判断堆栈S是否己满
-
void Push(Stack S,ElementType item):将元素item压入堆栈
-
int IsEmpty(stack S):判断堆栈s是否为空
-
ElementType Pop(StackS):删除并返回栈顶元素
Push和Pop可以穿插交替进行
2.栈的顺序存储实现
栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成。
#define MaxSize
typedef struct SNode* Stack;
struct SNode
{
ElementType Date[MaxSize];
int Top;
};
1.入栈
void Push(Stack Ptrs, ElementType item)
{
if (Ptrs->Top==MaxSize-1)
{
printf("堆栈满");
return;
}
else
{
Ptrs->Date[++(Ptrs->Top)] = item;
return;
}
}
2.出栈
ElementType Pop(Stack Ptrs)
{
if (Ptrs->Top==-1)
{
printf("堆栈空");
return Error;
}
else
{
return (Ptrs->Date[(Ptrs->Top)--]);
}
}