新闻中心
C++如何实现一个栈(Stack)_C++数据结构之后进先出(LIFO)的实现
首先实现基于动态数组的栈类,支持push、pop、top、isEmpty和size操作,通过resize扩容;随后用main函数测试栈功能,最后介绍使用STL stack的方法。

在C++中实现一个栈,核心是遵循“后进先出”(LIFO)原则。可以通过数组或链表来构建,也可以借助标准库。下面从零开始手写一个基于动态数组的栈,并说明其关键操作和设计思路。
栈的基本操作
一个完整的栈应支持以下基本操作:
- push(x):将元素x压入栈顶
- pop():移除并返回栈顶元素
- top():查看栈顶元素但不删除
- isEmpty():判断栈是否为空
- size():返回栈中元素个数
使用动态数组实现栈
下面是一个简单的C++栈类实现,使用动态数组存储数据,自动扩容:
#include <iostream>
using namespace std;
<p>class Stack {
private:
int* data; // 动态数组存储元素
int capacity; // 当前最大容量
int topIndex; // 栈顶索引</p><pre class='brush:php;toolbar:false;'>
;// 扩容函数
void resize() {
capacity *= 2;
int* newData = new int[capacity];
for (int i = 0; i < topIndex; ++i) {
newData[i] = data[i];
}
delete[] data;
data = newData;
}public: // 构造函数 Stack(int initCapacity = 4) { capacity = initCapacity; data = new int[capacity]; topIndex = 0; }
// 析构函数
~Stack() {
delete[] data;
}
// 压栈
void push(int value) {
if (topIndex == capacity) {
resize();
}
data[topIndex++] = value;
}
// 弹栈
void pop() {
if (isEmpty()) {
cout << "栈为空,无法弹出元素!\n";
return;
}
--topIndex;
}
// 获取栈顶元素
int top() const {
if (isEmpty()) {
throw runtime_error("栈为空!");
}
return data[topIndex - 1];
}
// 判断是否为空
bool isEmpty() const {
return topIndex == 0;
}
// 返回元素个数
int size() const {
return topIndex;
}};
测试栈的功能
写一个简单的main函数验证栈的行为:
int main() {
Stack s;
<pre class='brush:php;toolbar:false;'>s.push(10);
s.push(20);
s.push(30);
cout << "栈顶元素: " << s.top() << endl; // 输出 30
s.pop();
cout << "弹出后栈顶: " << s.top() << endl; // 输出 20
while (!s.isEmpty()) {
cout << "当前栈顶: " << s.top() << endl;
s.pop();
}
return 0;}
CA.LA
第一款时尚产品在线设计平台,服装设计系统
94
查看详情
使用STL中的stack
实际开发中,可以直接使用C++标准库提供的stack:
#include <stack>
#include <iostream>
using namespace std;
<p>int main() {
stack<int> s;
s.push(1);
s.push(2);
s.push(3);</p><pre class='brush:php;toolbar:false;'>cout << s.top() << endl; // 输出 3
s.pop();
cout << s.top() << endl; // 输出 2
return 0;}
标准库的stack默认基于deque实现,也可指定为vector或list,如:stack<int vector>></int>。
基本上就这些。手动实现有助于理解底层机制,而项目中推荐使用STL以提高效率和安全性。
以上就是C++如何实现一个栈(Stack)_C++数据结构之后进先出(LIFO)的实现的详细内容,更多请关注其它相关文章!
# 多态
# 试卷网站建设文案
# 商场seo软文撰写
# 大枣营销推广
# 汽车洗美营销推广方案
# seo查询工具官网
# 沈阳seo培训方案
# 兴仁全网营销推广
# 丹寨县抖音seo
# seo自动生成工具seo教程
# 合肥seo公司推荐排名
# 也可
# 推荐使用
# 栈
# 是一个
# 弹出
# 调试器
# 为空
# 如何使用
# 如何实现
# 数据结构
# 标准库
# stream
# ios
# c++
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Composer的 archive 命令怎么用_快速打包你的PHP项目及其Composer依赖
MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景
如何使用Rector自动化升级旧代码_通过Composer安装和配置Rector进行代码重构
电脑IP地址怎么查 查看本机IP地址的几种方法
如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力
铃兰之剑为这和平的世界希里技能组及加点推荐
一加 14R 快充无反应_一加 14R 充电优化
Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】
Python实时数据流中的动态最值查找策略
Golang如何测试channel通信行为_Golang channel通信测试与分析方法
我的世界官方游戏入口 我的世界官网平台直达链接
J*aScript类型检查_j*ascript代码规范
支付宝解绑银行卡步骤_支付宝如何解除绑定银行卡
Node.js中HTML按钮与J*aScript函数交互的正确姿势
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
css链接悬停下划线样式如何自定义_使用::after结合content和transition
Archive of Our Own官网直达 AO3最新可用地址一览
php源码怎么看淘宝客系统_看php源码淘宝客系统技巧
如何修改开机登录密码_Windows账户安全设置超详细教程【必学】
MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId
J*a应用程序首次运行自动创建文件与目录的最佳实践
win11开机启动修复循环怎么办 Win11无法进入系统高级启动解决方法【修复】
QQ邮箱电脑版登录入口_QQ邮箱官方网站登录平台
Lar*el DB::listen 事件中的查询执行时间单位解析
漫蛙manwa官网登录界面_漫蛙漫画网页版主站入口
J*aScript中localStorage数据的获取、清洗与格式化教程
mysql如何设置表访问权限_mysql表访问权限配置
J*a应用集成GitHub CLI与API认证指南
微信网页版登录教程_微信网页版登录入口在哪
12306选座怎么选到临时改签座_12306改签选座策略与步骤
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
《北京人工智能产业白皮书(2025)》发布:全年核心产值预计突破 4500 亿元
外媒分析《GTA6》定价:卖100美元可以但真没必要!
Lar*el头像管理:图片缩放与旧文件删除的最佳实践
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
C#使用XPath查询节点时出错? 常见语法错误与调试技巧
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
C++如何进行游戏物理模拟_使用Box2D库为C++游戏添加2D物理效果
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】
如何在Promise链中有效终止错误处理后的执行
C++ explicit关键字防止隐式转换_C++构造函数安全规范
网站内容防复制粘贴的实现策略与局限性
如何为你的Composer包编写自动化测试_集成PHPUnit到Composer的scripts工作流
HTML转PPT成品工具有哪些?HTML网页转PPT成品工具大全
Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】
Yandex官网搜索引擎免登录_俄罗斯Yandex一键直达入口
Angular响应式表单:实现提交后表单及按钮的禁用与只读化
XML中包含HTML标签导致解析错误? 正确嵌入非XML数据的两种方法
Windows10怎么开启存储感知 Windows10系统设置自动清理临时文件释放C盘空间【教程】


2025-11-21
浏览次数:次
返回列表
;// 扩容函数
void resize() {
capacity *= 2;
int* newData = new int[capacity];
for (int i = 0; i < topIndex; ++i) {
newData[i] = data[i];
}
delete[] data;
data = newData;
}