当前位置: 首页 > news >正文

C++ stack容器介绍

🤔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.lryc.cn/news/91235.html

相关文章:

  • 在 Git 中撤消更改的 6 种方法!
  • LiveGBS国标GB/T28181国标平台功能-电子地图移动位置订阅mobileposition地图定位GPS轨迹坐标位置获取redis获取位置
  • 编程(38)----------计算机的部分原理
  • 若依框架快速搭建(二)
  • 为建筑物的供暖系统实施MPC控制器的小型项目(Matlab代码实现)
  • 【概率论】中心极限定理(二)
  • Blender UV展开流程
  • Flutter 笔记 | Flutter 核心原理(二)关键类和启动流程
  • Android:主题切换
  • terminalworks ASP.NET Core PDF 浏览器-Crack
  • Rust每日一练(Leetday0020) 最后单词的长度、螺旋矩阵II、排列序列
  • 短视频矩阵源码如何做应用编程?
  • 【运维知识进阶篇】Ansible实现一套完整LNMP架构
  • Spring Boot 自动配置一篇概览
  • 深入理解设计原则之接口隔离原则(ISP)【软件架构设计】
  • IMX6ULL裸机篇之I2C实验主控代码说明二
  • 【计算机组成原理与体系结构】数据的表示与运算
  • 如何入门编程
  • SQL中CONVERT转化日期函数的使用方法
  • SpringBoot2-核心技术(一)
  • mac host学习
  • Java之~指定String日期时间,5分钟一截取时间
  • 【chatGPT4结对编程】chatGPT4教我做图像分类
  • Different romantic
  • learn C++ NO.7——C/C++内存管理
  • SDUT数据库原理——第十章作业(参考答案)
  • My Note of Diffusion Models
  • 【P37】JMeter 仅一次控制器(Once Only Controller)
  • cleanmymac要不要下载装机?好不好用
  • DNS风险分析及防护研究(五):常见的DNS威胁与防御(中科三方)