C++ stack容器介绍

Stack是一种后进先出(LIFO)的数据结构,常用于表达式求值、括号匹配等场景。其主要成员函数包括构造、赋值、数据存取和判断。插入和删除操作的时间复杂度为O(1),具有高效性。文章还提供了代码示例和实际应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🤔stack容器介绍:

     📖 stack是一种数据结构,也可以被称为堆栈。它是一个容器,只允许在最顶层进行插入和删除,并且只能访问最后一个插入的元素。这个元素称为栈顶。所有新插入的元素都被放置在栈顶上面,当删除元素时,它们从栈顶开始向下移动,同时也随之被删除。由于stack允许在顶部进行操作,因此它是一个后进先出的数据结构(LIFO)。

🤔stack容器特点:

📖1.只有栈顶元素可以被访问和操作,其他元素都不能被直接访问。

📖2.插入和删除操作的时间复杂度是O(1),非常高效。

📖3.可以使用top()函数访问或者修改栈顶元素。

📖4.可以使用empty()函数判断栈是否为空,size()函数获得栈的大小。

📖 5.可以使用pop()函数删除栈顶元素。

🤔stack容器图解:

🤔stack成员函数:

📖*由于stack独特的数据结构,stack容器提供的函数较少。

 🔍stack构造函数:

📖1.默认构造:stack <T>  name;

stack<int> d1;

📖2.拷贝构造函数:stack(const stack &stk);

stack<int> d2(d1);

🔍stack赋值函数:

📖1.重载等号运算符:stack &operator=(const stack &stk);

stack<int> d2(d1);
d2 = d1;

🔍stack数据存取函数:

📖1.向栈顶添加一个元素:push(ele);

d1.push(i);

📖2.从栈顶移除一个元素:pop();

d.pop();

📖3.返回栈顶元素:top();

d.top

🔍stack判断函数:

📖1.判断是否为空:empty();

d.empty()

📖2.返回栈的大小:size();

d.size()

📖3.清空栈:clear();

d.clear();

4.交换两个栈:swap();

d.swap(d1);

代码实例:

#include<iostream>
using namespace std;
#include<stack>
void print(stack<int>& d)
{
	cout << endl;
	cout << "最开始栈大小为:";
		cout << d.size() << endl;

	//利用判断这个栈是否为空来循环弹出所有的栈顶元素
	while (!d.empty())
	{
		//弹出栈顶数据
		cout << d.top() << " ";
		//删除当前栈顶元素
		d.pop();
	}

	cout << "此时栈大小为:";
	cout << d.size() << endl;	
	cout << endl;
}
void test01()
{
	//默认构造
	stack<int> d1;
	for (int i = 0; i < 9; i++)
	{
		//入栈
		d1.push(i);
	}
	cout << "默认构造结果为:";
	print(d1);
	//重新入栈,因为第一次打印之后栈已经为空
	for (int i = 0; i < 9; i++)
	{
		d1.push(i);
	}
	//拷贝构造
	stack<int> d2(d1);
	cout << "拷贝构造结果为:";
	print(d2);

	//重载等号运算符

	stack<int> d3(d1);
	d3 = d1;
	cout << "重载运算符:";
	print(d3);
}
int main()
{
	test01();
}

运行结果:

🤔stack实际应用场景

📖1.表达式求值:stack容器可以用于中缀表达式转换为后缀表达式的计算中,利用栈的后进先出特性和运算符的优先级可以对后缀表达式进行求值。

📖2.编辑器撤销和重做功能:可以使用两个stack容器,一个保存撤销的动作,一个保存重做的动作。

📖3.函数调用栈:当函数调用时,程序会把当前函数的调用栈信息压入栈中,当函数返回时,程序会从栈中弹出该函数的调用栈信息,实现函数调用的嵌套

📖4.括号匹配:使用一个栈容器可以很容易地判断一个表达式中的括号是否匹配,如果左括号就入栈,如果右括号就出栈,最后栈中为空则说明左右括号匹配。

📖5.内存分配:栈容器也可以用于内存分配,因为栈会按照LIFO的原则对元素进行管理,可以方便地控制内存分配和释放,适合于需要严格控制内存使用和回收的场合。

🤔结束!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是一盘牛肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值