目录
1 顺序栈
栈的定义:作为一种限定性线性表,是将线性表的插入和删除运算限制为仅在表的一段进行。
表中允许插入和删除操作的一端称为栈顶(Top),表的另一端被称为栈底(Bottom)。
当栈中没有元素的时候称为空栈。
栈的插入操作成为进栈和入栈。
栈的删除操作成为出栈和退栈。
栈的特点:后进先出。
1.1 栈的存储结构:顺序栈和链栈
1.1.1 顺序栈
用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时由于栈的操作的特殊性,还必须附设一个位置指针 top(栈顶指针)来动态地指示栈顶元素在顺序栈中的位置。
通常以 top = -1 表示空栈。
顺序栈的创建
#define Stack_Size 50
typedef struct
{
StackElementType elem[Stack_Size];
int top;
}SeqStack;
栈的基本操作:
InitStack(S) 初始化:初始化一个新的栈。
Empty(S) 栈的非空判断:若栈 S 不为空,则返回TRUE;否则,返回FALSE。
IsFull(S) 栈的非满判断:若栈 S 为满,则返回TRUE;否则,返回FALSE。
Push(S,x) 入栈:在栈 S 的顶部插入元素 x ,栈满则返回FALSE;否则返回空元素NULL。
Pop(S) 出栈:若栈 S 不空,则返回栈顶元素,并从栈顶中删除该元素;否则返回空元素NULL。
GetTop(S) 取栈顶元素:若栈 S 不为空,则返回栈顶元素:否则返回空元素NULL。
SetEmpty(S) 置栈空操作:置栈 S 为空栈。
1.1 初始化
void InitStack(SeqStack* S)
{
S->top = -1;
}
1.2 判栈空
bool IsEmpty(SeqStack* S)
{
return (S->top == -1 ? true : false);
}
1.3 判栈满
bool IsFull(SeqStack* S)
{
return (S->top == Stack_Size - 1 ? true : false);
}
1.4 进栈
bool Push(SeqStack* S, StackElementType x)
{
if (S->top == Stack_Size - 1)
{
return false
}
s->top++;
S->elem[S->top] = x;
return true;
}