栈的基本知识
一、栈的定义
栈(Stack)是限定只能在表的一端插入和删除操作的线性表。
1.栈顶:在表中允许插入和删除的一端称“栈顶(top)”;
2.栈底:不允许插入和删除的另一端称“栈底(bottom)”;
二、什么是栈
栈又称为后进后出的线性表(Last In First Out),简称LIFO表。
三、栈抽象数据类型的定义
顺序栈(栈的顺序存储)
一、顺序栈的定义
利用顺序存储方式实现的栈称为顺序栈。
//顺序栈结构的定义
typedef struct{
ElemType *base;//存储空间基址
int top; //栈顶指针
int stacksize; //允许的最大存储空间以元素为单位
}Stack;
二、顺序栈的初始化
void InitStack (Stack &s,int maxsize)
{
//构造一个最大存储容量为maxsize的空栈S
if (maxsize == 0)
maxsize = MAXSIZE;
S.base = new ElemType[maxsize];
if(!S.base) exit (1); //存储分配失败
S.stacksize = maxsize;
S.top = 0; //空栈中元素个数为0
}
三、顺序栈取栈顶元素
bool GetTop(Stack S,ElemType &e)
{
//若栈不空,则用e返回S的栈顶元素,并返回TURE;否则返回FALSE;
if (S.top == 0) return FALSE;
e = *(S.base + S.top - 1);//返回空栈中的栈顶元素,也可以写成S.base[S.top - 1]
return TRUE;
}
四、顺序栈的入栈操作
bool Push(Stack &S,ElemType &e)
{
SNode *p;
p=(SNode *)malloc(sizeof(SNode));
if(!p)
return FALSE;
p->data=e;
p->next=S->top;
S->top=p;
S->length++;
return TURE;
}
五、顺序栈的出栈操作
bool Pop(Stack &S,ElemType &e)
{
//若栈不空,则删除S的栈顶元素,用e返回其值,并返回TURE,否则返回FALSE;
if (S.top == 0) return FALSE;
e = *(S.base + S.top - 1);//返回非空栈中的栈顶元素;
--S.top; //栈顶指针前移
return TURE;
}