数据结构复习-栈与队列
博客园:https://www.cnblogs.com/AlexNotFoundBNDS/p/15620721.html
栈和队列是两种类似的线性数据结构。与其他的数据结构不同的是,栈和队列都有自己独特的添加(push)与删除(pop)元素的规则栈和队列都有两种不同的存储方式:线性存储和链式存储,这里只讲解线性存储的栈和队列。
栈
栈的出入规则是先进后出,英文是FILO(First In Last Out)。
我们来想象一摞书,这一摞书是按顺序摞起来的,你只能从下面往上叠书,从上面往下拿书,不能随随便便就抽取一本书拿。

类似这样的数据结构就是栈。你只能从下往上添加数据(也就是入栈push),从栈顶往下删除数据(也就是出栈pop),不能进行随机读写。栈的最上面叫栈顶,栈的最底下叫栈底。

一般情况下,我们使用数组来模拟栈。除了这个数组之外,我们还要声明一个变量存储栈顶top的下标,方便进行读取栈顶元素,入栈和出栈等操作。top为-1时代表栈为空。
int stack[100], top = -1; //stack是栈的英文,top代表栈顶
入栈
入栈操作其实很简单,只要把top++,然后把栈的第top个元素赋值为要入栈的元素即可,注意要特判一下栈顶大于数组大小的情况。入栈函数如下:
int push(int n)
{
top++;
if (top >= 100)
{
cerr << "Error: stack is to long when push" << endl;
top--;
return -1;
}
stack[top] = n;
return 0;
}
出栈
出栈操作其实直接top--即可,最好是把栈顶的元素清零再top--,注意要特判栈已经为空的情况。出栈函数如下:
int pop()
{
if (top == -1)
{
cerr << "Error: stack is empty when pop" << endl;
return -1;
}
stack[top] = 0;
top--;
return 0;
}

浙公网安备 33010602011771号