首页/新闻资讯/正文详情

【计算机408】数据结构 | 栈、顺序栈、链栈

发布时间:2026/9/26 3:29:10 来源:云帆数科 栏目:资讯中心
【计算机408】数据结构 | 栈、顺序栈、链栈
一、前言本篇为数据结构第四讲栈、顺序栈、链栈。文中代码实现均以 C 为例。前三期我们介绍了线性结构合集本篇内容与前文关联紧密。还未学习线性结构的读者建议先阅读前三篇《【计算机408】数据结构》以打好基础。二、栈特点遵循后进先出是线性数据结构。组成部分栈顶top允许插入和删除的一端。栈底bottom固定不变、不允许操作的一端。操作入栈push在栈顶插入新元素。出栈pop从栈顶删除元素。注意仅允许在栈顶进行插入与删除操作。三、顺序栈1. 定义用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。2. 存储结构借助数组实现栈顶指针 top 指向栈顶元素的下一个位置。3. 基本操作1初始化代码实现seqStack(int initSize 100) { // initSize 顺序栈数组初始大小 if(initSize 0) throw badSize(); data new T[initSize]; maxSize initSize; top -1; }2判空代码实现template class T bool seqStackT::empty() const { return top -1; // 栈顶指针为 -1 时表示栈为空 }3入栈在栈顶插入元素图示代码实现//入栈操作,在栈顶插入元素value。 template class T void seqStackT::push(const T value) { if(top maxSize - 1) resize(); // 若栈已满需要进行扩容 data[top] value; // 栈顶指针上移将新元素放入栈顶位置 }4出栈图示代码实现template class T T seqStackT::pop(){ if(empty()) { throw outOfRange(); //栈为空时无法退栈,抛出异常outOfRange() } return data[top--]; }5取栈顶元素代码实现template class T T seqStackT::getTop() const{ if(empty()) throw outOfRange(); // 若空栈则无栈顶抛出异常outOfRange() return data[top]; }四、链栈1. 定义链栈是采用链式存储结构的栈利用带头结点的单链表实现。2. 存储结构每个结点包含数据域 data 和指针域 next栈顶指针 top 指向栈顶元素所在结点栈底元素的指针域为空。3. 基本操作1初始化代码实现template class T linkStackT::linkStack() { top nullptr; // 初始化空链栈栈顶指针置空 }2判空代码实现template class T bool linkStackT::empty() const { return top nullptr; // 栈顶指针为空时表示栈为空 }3入栈在栈顶插入元素代码实现template class T void linkStackT::push(const T value) { Node *p new Node(value,top); // 入栈操作将值为value的元素推入栈中 top p; }4出栈代码实现template class T T linkStackT::pop() { if(empty()) { //若为空栈则无法出栈元素则抛出异常outOfRange() throw outOfRange(); } Node *p top; T value p-data; top top-next; delete p; // 出栈操作将栈顶元素出栈 return value; // 返回元素值 }5取栈顶元素代码实现template class T T linkStackT::getTop() const { if(empty()) throw outOfRange(); //若为空栈则无法返回栈顶元素则抛出异常outOfRange() return top-data; }五、总结本文介绍了栈这种线性数据结构重点梳理了栈的定义、特点、组成部分和基本操作并分别给出了顺序栈与链栈的存储结构和代码实现。栈遵循后进先出原则在实际开发中应用广泛。

相关推荐

高德开放平台 JSAPI Skills 实战:用 TaoToken 统一 Key 打通 AI 地图开发配置
高德开放平台 JSAPI Skills 实战:用 TaoToken 统一 Key 打通 AI 地图开发配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 3:29:10

哈趣H3 Ultra Max对比坚果MIGO,谁在交智商税?
哈趣H3 Ultra Max对比坚果MIGO,谁在交智商税?

最近想买千元投影的朋友,几乎都卡在同一个问题上:哈趣h3ultramax和坚果migo怎么选?这两台国补后到手价都在1600元上下,价格几乎打平,产品思路却完全是两个方向。我翻遍电商详情页核对了真实参数,逐项比给你… · 2026/9/26 3:29:04

一氧化碳报警器出海:波兰与摩洛哥的法规驱动增长机会
一氧化碳报警器出海:波兰与摩洛哥的法规驱动增长机会

冬天的凌晨是一氧化碳事故最常发生的时间窗口。屋里的人睡得很沉,燃气热水器的排烟口一旦被冻住或堵塞,一氧化碳就在封闭空间里悄悄上升,等感到头晕想爬起来开窗时,肌肉往往已经不听使唤了。欧洲对付这个问题的方法比较笨但非常有… · 2026/9/26 3:29:04

梯度累积(Gradient Accumulation)步数对 Batch Normalization 与 LayerNorm 动态统计量的异化影响
梯度累积(Gradient Accumulation)步数对 Batch Normalization 与 LayerNorm 动态统计量的异化影响

梯度累积(Gradient Accumulation)步数对 Batch Normalization 与 LayerNorm 动态统计量的异化影响在深度学习模型训练中,当单张 GPU 的物理显存无法容纳理想的全局批次大小(Global Batch Size,例如需要 $B256$&#xf… · 2026/9/26 4:21:16

RPFM优化器实现原理:自动剔除ITM行与未使用内容让Pack文件瘦身
RPFM优化器实现原理:自动剔除ITM行与未使用内容让Pack文件瘦身

RPFM优化器实现原理:自动剔除ITM行与未使用内容让Pack文件瘦身 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: htt… · 2026/9/26 4:21:16

浮点数精度的深渊:在 0.1 加 0.2 的误差中原谅世界
浮点数精度的深渊:在 0.1 加 0.2 的误差中原谅世界

浮点数精度的深渊:在 0.1 加 0.2 的误差中原谅世界深夜两点整,整个机房只有服务器风扇低沉的共鸣声在空气中轻轻回荡。 在调试一段关于高精度物理引擎与大模型半精度浮点(FP16 / BF16)梯度下溢的底层计算核时,我打开了… · 2026/9/26 4:21:10

复杂富文本编辑器与脑图系统(Canvas/DOM 混合)智能操作
复杂富文本编辑器与脑图系统(Canvas/DOM 混合)智能操作

复杂富文本编辑器与脑图系统(Canvas/DOM 混合)智能操作在基于 Web 浏览器的下一代办公智能体(Office & Productivity Agent,如自动操作 Notion、飞书文档、ProcessOn、Miro、XMind Web 版)的研发中,多模… · 2026/9/26 4:21:10

INT8 量化如何避免回退 CPU:MiniMax-H3-Comfy-NPU 的 npu_quant_matmul 内核实现完整剖析
INT8 量化如何避免回退 CPU:MiniMax-H3-Comfy-NPU 的 npu_quant_matmul 内核实现完整剖析

INT8 量化如何避免回退 CPU:MiniMax-H3-Comfy-NPU 的 npu_quant_matmul 内核实现完整剖析 【免费下载链接】MiniMax-H3-Comfy-NPU 项目地址: https://ai.gitcode.com/Ascend-SACT/MiniMax-H3-Comfy-NPU 在昇腾 NPU 上跑 MiniMax-H3 的 INT8 量化权重时&… · 2026/9/26 4:21:10

VS2017下Codejock XTP v15.3.1编译配置与高频问题排查
VS2017下Codejock XTP v15.3.1编译配置与高频问题排查

简介:VS2017 专用的 Codejock Xtreme Toolkit Pro v15.3.1 完整源码包,已预先完成 32 位与 64 位工程属性适配,开发者可直接打开解决方案编译,省去手动迁移工程的繁琐步骤。包内含全部 C 源码、头文件、界面资源,并提供… · 2026/9/26 4:21:02

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码