C++数据结构1——栈结构详解

embedded/2025/3/17 12:10:35/

一、栈的基本概念与特性

1. 栈的定义与特点

栈(Stack)是一种遵循后进先出(LIFO, Last In First Out)原则的线性数据结构,其核心特征包括:

  • 单端操作:所有操作仅通过栈顶进行

  • 动态存储:无需预先分配固定空间

  • 使用方法

          通过对象. 函数 的方式调用 ,需要导入头文件  #include <stack>
  • 定义类型           stack  <类型>   名称;   
           例如stack  <int>  s;   //s是一个栈,这个栈里的每一个元素都是 int类型
  • 声明与使用
    • 声明一个stack类型的对象(变量)  stack<int> s;

    • 栈声明完毕,是空栈,需要往里面添加数据

           s.push(i)

      s.pop()   出栈

      s.top()  获取栈顶元素,但并不出栈

      s.size()   当前栈里有多少元素

      s.empty()   判断栈是否为空,为空返回true, 不空返回false

2. 栈的物理结构

栈就是一个容器,这个容器只有一端开放,进出都必须经由开放的这一端,开放端,称为栈顶,

不开放的,称为栈底


二、数组模拟栈与STL栈对比

1. 数组模拟栈实现(十进制转二进制)

#include <iostream>
using namespace std; int main() { int n; int s[50] = {0};      // 存储二进制位的数组int top = 0;          // 栈顶指针(初始为0)cin >> n; if(n == 0) {          // 处理特殊值cout << 0;return 0;}while (n > 0) { s[top] = n % 2;   // 存储余数top++;            // 栈顶上移n /= 2; } // 逆序输出while (top > 0) { cout << s[top - 1]; top--;            // 栈顶下移}return 0; 
}
关键点解析
变量作用操作逻辑
s[50]模拟栈存储空间静态数组预分配
top栈顶指针top++表示入栈
n待转换的十进制数通过连续除2取余

2. STL栈实现(通用进制转换)

#include <iostream>
#include <stack>
using namespace std;int main() {int n, m;cin >> n >> m;        // 输入数值和进制基数stack<int> s;         // 声明整型栈if(n == 0) {          // 处理边界条件cout << 0;return 0;}while(n > 0) {s.push(n % m);    // 余数入栈n /= m;}while(!s.empty()) {   // 栈非空时循环cout << s.top();  // 输出栈顶元素s.pop();          // 移除栈顶元素}return 0;
}
核心方法对比
操作数组模拟栈STL栈
入栈s[top++] = values.push(value)
出栈top--s.pop()
查看栈顶s[top-1]s.top()
空栈判断top == 0s.empty()
内存管理手动控制自动扩容

三、C++标准库栈容器详解

1. 模板化声明

#include <stack>// 声明不同类型的栈
stack<int> intStack;       // 整型栈
stack<double> doubleStack; // 双精度浮点栈
stack<char> charStack;     // 字符栈(适用于16进制)

2. 核心方法说明

方法功能描述示例
push(val)元素入栈s.push(10)
pop()移除栈顶元素s.pop()
top()返回栈顶元素(不删除)int x = s.top()
empty()判断栈是否为空if(s.empty()){...}
size()返回当前元素数量cout << s.size()

3. 类型安全示例

stack<string> historyStack;// 浏览器历史记录管理
historyStack.push("首页");
historyStack.push("商品详情页");
historyStack.push("购物车");// 模拟返回按钮操作
while(!historyStack.empty()) {cout << "返回至:" << historyStack.top() << endl;historyStack.pop();
}

四、实战技巧与注意事项

1. 调试常见问题

  • 栈空访问:调用top()pop()前必须检查空栈

    if(!s.empty()) {int val = s.top();s.pop();
    }
  • 数值溢出:处理大数时使用long long类型

  • 进制范围:确认基数在合法范围内(2-16)

2. 性能优化建议

场景优化策略
高频入栈/出栈预分配内存(数组栈)
大数转换使用字符串存储中间结果
多线程环境采用线程安全容器

3. 扩展应用场景

  • 表达式求值:处理括号匹配、运算符优先级

  • 撤销/重做:记录操作历史

  • 递归转迭代:用栈模拟递归调用过程


五、综合对比与选择建议

考量维度数组模拟栈STL标准栈
学习成本需理解指针操作接口简单易用
内存控制手动管理(易出错)自动扩容(更安全)
执行效率直接内存访问(略快)有封装开销(可忽略)
功能扩展可定制特殊功能受限于标准接口
适用场景教学演示、嵌入式开发商业项目、快速开发

通过掌握数组模拟栈的实现原理与STL栈的标准用法,开发者可以灵活选择适合的栈实现方式。建议在算法竞赛中优先使用STL栈提升开发效率,在学习阶段通过手动实现加深对底层原理的理解。


 


http://www.ppmy.cn/embedded/172995.html

相关文章

ffmpeg基础整理

FFmpeg 是一个开源的跨平台 多媒体处理工具 &#xff0c;可以用于 录制、转换、编辑、流式传输 音视频文件。它支持几乎所有常见的音视频格式&#xff0c;功能极其强大&#xff0c;是开发者、视频创作者常用的命令行工具。 一、FFmpeg 核心功能 格式转换&#xff1a;将视频/音频…

在离线情况下如何使用 Python 翻译文本

以下是在离线环境下使用Python进行文本翻译的两种主流方案&#xff0c;包含本地模型部署和轻量级词典两种方法&#xff1a; 方案一&#xff1a;使用本地神经网络翻译模型&#xff08;推荐&#xff09; # 安装依赖&#xff08;需提前下载&#xff09; # pip install argos-tra…

在K8S中,svc底层是如何实现的?

在Kubernetes中&#xff0c;Service是集群内部的一个抽象层&#xff0c;用于定义一组Pod的逻辑分组&#xff0c;并提供统一的访问入口点&#xff0c;同时还可以对这些Pod提供负载均衡和网络代理功能。Service底层的实现主要包括以下几个关键组件和技术&#xff1a; 标签选择器…

删除有序数组中的重复项(26)

26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 解法&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {auto first nums.begin();auto last nums.end();auto result first;if (first last) {return std::…

架构思维:高性能架构_01基础概念

文章目录 概述基础概念性能指标利特尔法则&#xff08;O T L&#xff09;系统优化策略1. 降低耗时&#xff08;L↓&#xff09;2. 增加容量&#xff08;O↑&#xff09;3. 增加时延&#xff08;L↑&#xff09; 场景化指标选择响应时间优先吞吐量/容量优先平衡策略 概述 一个…

MYsql—1

1.mysql的安装 在windows下安装mysql&#xff0c;直接官网搜索即可&#xff1a;http://www.mysql.com/&#xff0c;自己找想要的版本进行download&#xff0c;官网长这样 安装路径需要是英文路径&#xff0c;设置默认即可&#xff0c;若安装执行内容时报错&#xff0c;则AltCt…

买瓜 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组

买瓜 题目来源 第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 A 组 原题链接 蓝桥杯 买瓜 https://www.lanqiao.cn/problems/3505/learning/ 问题描述 题目描述 小蓝正在一个瓜摊上买瓜。瓜摊上共有 n n n 个瓜,每个瓜的重量为 A i A_i Ai​。小蓝刀功了得,他可以把任何瓜…

Python软件和搭建运行环境

一、Python安装全流程&#xff08;Windows/Mac/Linux&#xff09; 1. 下载官方安装包 官网地址&#xff1a;Download Python | Python.org 版本选择建议&#xff1a;推荐Python 3.10&#xff08;勾选Add Python to PATH&#xff09; 2. 详细安装步骤&#xff08;以Windows为…