新闻中心

C++如何实现一个栈(Stack)_C++数据结构之后进先出(LIFO)的实现

2025-11-21
浏览次数:
返回列表
首先实现基于动态数组的栈类,支持push、pop、top、isEmpty和size操作,通过resize扩容;随后用main函数测试栈功能,最后介绍使用STL stack的方法。

c++如何实现一个栈(stack)_c++数据结构之后进先出(lifo)的实现

在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 CA.LA

第一款时尚产品在线设计平台,服装设计系统

CA.LA 94 查看详情 CA.LA

使用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实现,也可指定为vectorlist,如: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盘空间【教程】 

搜索