- 顺序栈
- 栈的数组实现(创建)
- 栈的初始化
- 栈的增加(压栈)
- 栈的删除(弹栈)
- 栈的查询
- 栈的判空和判满
- 栈的数组实现(创建)
1. 顺序栈
栈是一种数据结构,其主要特点是后进先出,相当于我们在瓶子里面放东西,后放进去的东西在上面,所以拿出来的时候自然是从上面取出来,所以后进去的先出来。
本文主要介绍的是栈的数组实现方法,即顺序栈。
基本操作有以下几种:
1.1. 栈的数组实现(创建)
栈的数组实现起来相对简单。在定义的时候,我们只需要定义一个结构体即可
#define MAXSIZE 10000
typedef struct
{
char data[MAXSIZE]; // 创建最大长度的数组
int top; // 当前顶部元素的位置
} Stack;
栈的结构体中需要一个数组来存储元素,还需要一个变量来记录当前栈顶元素的位置。
1.1.1. 栈的初始化
栈的初始化只需要让top为-1即可。
void InitStack(Stack &S)
{
S.top = -1;
}
1.1.2. 栈的增加(压栈)
压栈即将元素压入栈中,压栈的时候,我们需要给函数传递需要压栈的元素和栈本身。
在压栈之前我们还需要判断栈是否已经满,若未满即可进行压栈。
在压栈的过程中我们需要让top加一,即让栈顶元素的位置加一,然后让新的元素赋值到新的数组的top位置上。
void Push(Stack &S,char x)
{
if(S.top==MAXSIZE-1)
{
printf("栈已满,无法插入元素!\n");
return;
}
S.top++;
S.data[S.top]=x;
}
1.1.3. 栈的删除(弹栈)
当我们需要弹栈的时候,只需要返回数组top位置的元素,然后让top减一即可。
int Pop(Stack &S)
{
if(S.top!=-1)
{
return S.data[S.top--];
}
}
1.1.4. 栈的查询
由于栈的特性,我们在查询的时候一般查询栈的栈顶元素。当我们需要查询栈顶元素的时候,只需要返回数组top位置的元素即可。如果需要对栈的其他元素进行查询,需要逐个遍历。
int GetTop(Stack S)
{
if(S.top!=-1)
{
return S.data[S.top];
}
}
1.1.5. 栈的判空和判满
栈的判空和比较简单,在判空时只需要判断top是否等于-1即可,在判满的时候只需要判断top是否等于MAXSIZE-1即可。
bool StackEmpty(Stack S)
{
if(S.top==-1)
{
return true;
}
}
bool StackFull(Stack S)
{
if(top==MAXSIZE-1)
{
return true;
}
}