数据结构复习-栈与队列

博客园: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;
}
posted @ 2021-11-29 18:34  AledNotFoundBNDS  阅读(115)  评论(0)    收藏  举报