C++ stack容器介绍

news/2024/7/24 11:41:54 标签: c++, 开发语言, 算法, 数据结构

🤔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的原则对元素进行管理,可以方便地控制内存分配和释放,适合于需要严格控制内存使用和回收的场合。

🤔结束!


http://www.niftyadmin.cn/n/377916.html

相关文章

chatgpt赋能python:Python中的构造函数

Python 中的构造函数 Python 是一门广泛应用于各种应用领域的高级编程语言&#xff0c;它支持不同的编程范式&#xff0c;包括面向对象编程。在面向对象编程中&#xff0c;构造函数是一个重要的概念。本文将介绍 Python 中的构造函数&#xff0c;并介绍如何使用它们来创建对象…

EclipseCDT远程交叉编译远程单步调试基于makefile例程(实测有效)

文章目录 前言&#xff1a;1. 新建工程2. 远程编译环境配置2.1 下载sshfs并挂载目录2.2 Debug配置2.3安装EclipseCDT的远程插件2.4 拷贝gdbserver 3. 调试总结: 前言&#xff1a; 之前写过一篇VSCode远程调试linux&#xff0c;当时是把程序以及代码通过远程的方式&#xff0c;…

2023年数学建模:参数估计与假设检验:自助法(Bootstrap)详解

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 1. 引言 2. 自助法简介 3. 自助法在参数估计中的应用 3.1 原理 3.2 使用 MATLAB 代码进行参数估计 4. 自助法在假设检验中的应用 4.1…

python如何解决js逆向混淆?

JavaScript混淆是一种保护网站安全的技术&#xff0c;混淆可将代码进行多种变形和加密&#xff0c;使得 JavaScript 代码变得难以阅读和理解。逆向混淆是混淆中的一种方式。通过逆向混淆&#xff0c;混淆的代码更难被攻击者分析和了解混淆的含义。Python 是一种强大的编程语言&…

【22-23 春学期】AI作业12-LSTM

网络 LSTM&#xff08;输入门、遗忘门、输出门&#xff09; LSTM&#xff08;长短时记忆网络&#xff09;是一种特殊的RNN&#xff08;循环神经网络&#xff09;&#xff0c;能够学习长期的依赖关系。它通过原始 RNN 的隐藏层只有一个状态&#xff0c;它对于短期的输入非常敏感…

2023年数学建模随机森林:基于多个决策树的集成学习方法

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 目录 1. 什么是随机森林&#xff1f; 2. 随机森林的优缺点 3. 随机森林的构建过程 4. 特征选择 5. MATLAB实现随机森林 6. 数学建模…

代码随想录算法训练营第四十二天|0/1背包问题理论基础 416. 分割等和子集

目录 0/1背包问题理论基础 二维dp数组 一维dp数组 LeeCode 416. 分割等和子集 0/1背包问题理论基础 二维dp数组 动规五部曲 1.确定dp数组及下标含义: dp[i][j] : 从下标为[0-i]的物品里任意取&#xff0c;放进容量为j的背包&#xff0c;价值总和的最大值&#xff1b; 2…

【数据结构6】二叉树的基本操作

文章目录 ⭐️写在前面的话⭐️二叉树的一些基本操作1、结构定义2、先序创建这棵树3、按满二叉树方式创建4、三种递归遍历5、层次遍历6、求二叉树的深度7、求叶子结点数8、三种非递归遍历9、先序线索化二叉树10、先序线索化后遍历11、中序线索化二叉树12、中序线索化后遍历主函…