C++使用vector实现栈数据结构
4星 · 超过85%的资源 需积分: 35 109 浏览量
更新于2024-09-26
收藏 1KB TXT 举报
"这篇代码示例展示了如何使用C++中的`std::vector`来实现一个栈数据结构。"
在这段代码中,作者创建了一个名为`Stack`的类,该类利用`std::vector<int>`来存储元素,并通过成员函数实现了栈的基本操作。栈是一种后进先出(LIFO)的数据结构,常用于临时存储和检索数据。
1. **Stack类的定义**:
类`Stack`包含了两个私有成员变量:
- `vector<int> a`:存储栈内元素的数组。
- `int top`:表示栈顶的索引,初始化为-1,表示栈空。
2. **构造函数**:
`Stack(void)`构造函数初始化`top`为-1,表示栈尚未开始使用。
3. **Empty()函数**:
`bool Empty()const`检查栈是否为空。如果`a.size()`(即`vector`的大小)为0,则返回`true`,表示栈为空;否则返回`false`。
4. **GetS()函数**:
`int GetS()const`返回栈顶的元素,但不删除它。通过`a.at(top)`获取栈顶的值。
5. **PopS()函数**:
`int PopS()`从栈中弹出顶部元素并返回其值。首先检查栈是否为空,如果为空则输出错误信息并返回`FAIL`。否则,使用迭代器找到最后一个元素(栈顶),记录其前一个位置的索引,将`top`减一,然后删除栈顶元素(通过`erase`函数)。最后返回弹出的元素值。
6. **InS(int data)函数**:
`void InS(int data)`将`data`压入栈顶。`push_back(data)`将新元素添加到`vector`的末尾,并自动更新`top`的值。
7. **析构函数**:
`~Stack(void)`是`Stack`类的默认析构函数,这里没有特别的清理工作,因为`vector`会自动处理内存释放。
8. **主函数示例**:
主函数`int_tmain`演示了如何使用`Stack`类。创建一个`Stack`对象`s`,然后连续将0到99的整数压入栈中,每次压入后暂停300毫秒,以便观察进程。最后等待1秒后再检查栈是否为空。
通过这个实现,我们可以看到`std::vector`作为底层数据结构,可以方便地提供动态扩展和收缩的能力,使得栈操作高效且易于理解。然而,与标准库提供的`std::stack`容器适配器相比,自定义的`Stack`类可能缺乏一些额外的功能和优化,如迭代器支持、容量管理等。在实际应用中,选择`std::stack`通常更简洁且符合STL标准。
2018-03-18 上传
2023-05-25 上传
2023-05-16 上传
2023-05-20 上传
2012-08-08 上传
2012-09-25 上传
2010-04-21 上传
chengwenyao1990
- 粉丝: 0
- 资源: 2
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建