计算机考研408-数据结构-栈
一. 定义
栈(Stack)是一种常见的数据结构,它是一种“后进先出”类型(Last In First Out,LIFO)的数据结构只能在栈顶进行插入和删除操作。
很经典的一个例子就是:大家在玩儿玩具枪时,总需要先将子弹压入弹夹,之后安装弹夹,进行射击。大家思考一下,我们打出的第一发子弹是不是就是我们最后压入弹夹的子弹。如图所示
(注:图片摘自CSDN博主十里坡小白的文章:数据结构 —— 栈(超详细图解 & 接口函数实现))
二. 特点
先入后出,后入先出,栈是限定仅在栈顶进行插入和删除操作的数据结构。
(注:图片摘自CSDN博主知心宝贝的文章:【图解数据结构】栈全面总结)
三. 原理及实现
- 数组形式(顺序栈)
(注:图片摘自CSDN博主十里坡小白的文章:数据结构 —— 栈(超详细图解 & 接口函数实现))
顺序栈结构体定义(静态)
#define n 500//定义顺序栈大小
struct stack
{
int top;//栈顶指针
int a[n];//顺序栈数组
}SeqStack;
初始化栈
void InitStack(SeqStack *S)
{
S->top = -1;//构造一个空栈S
}
判断栈空
int IsEmpty(SeqStack *S)
{
return(S->top==-1?TRUE:FALSE);
}
判断栈满
int IsFull(SeqStack *S)
{
return(S->top==Stack_Size-1?TRUE:FALSE);
}
取栈顶元素
int GetTop(SeqStack *S,StackElementType *x)
{
if(S->top == -1)//栈为空
return(FALSE);
else
{
*x = S->elem[S->top];
return(TRUE);
}
}
入栈
int Push(SeqStack *S,StackElementType *x)
{
if(S->top == 1)//栈为满