栈是一种动态集合,是比较常用的一种数据结构,它的特点就是:后进先出。
栈就好像一个只有一个门的房子,先进去的人在里面,后进去的人在外面,里面的人想出来,必须得让外面的人先出来才行。如图所示,我们可以用一个数组S[1...n]来实现一个最多可容纳n个元素的栈。这个数组有两个属性,一个是maxSize,表示最大容纳量,一个是top,表示最外面的元素的位置,也是最先出来的元素,叫栈顶元素。
我们往栈中加入4个元素,分别是 15 、6 、2 、9,因为数组是从0开始的,因此栈顶元素是S[3],top=3,这个过程叫入栈。
假如我们再往栈中加入两个元素,那么top就变成了5。
那么按照后进先出的原则,我们获取栈的第一个元素就是5,此时5已经出栈,top变成了4,但是5还留在S[5]中,等到下一个元素填充到S[5]时才会被抹去。
这就是栈的基本操作,需要注意的是maxSize是一开始就固定的,不会因为入栈和出栈受到影响。下面我们用C++的类封装一个栈。
#pragma once
#include <iostream>
using namespace std;
class stack {
public:
stack(int maxSize) :maxSize(maxSize) //初始化参数
{
top = -1;
dataMemory = new int[maxSize];
}
void push(int data) //入栈
{
if (top + 1 == maxSize)
{
printf("栈满,无法入栈!\n");
return;
}
dataMemory[++top] = data;
}
int pop()//出栈
{
if (top == -1)
{
printf("栈空,无法出栈!\n");
return -99999;
}
return dataMemory[top--];
}
int getTop() //获取栈顶标记位置
{
return top;
}
void print() //打印栈中元素,方便测试
{
for (int i = 0; i <= top; i++)
{
cout << dataMemory[i] << '\t';
}
cout << endl;
}
protected:
int maxSize;
int top;
int* dataMemory;
};