什么是链栈及其基本操作
文章目录什么是链栈代码实现结构定义与初始化入栈出栈查找取栈顶销毁(了解)带头结点的链栈什么是链栈链栈是栈的链式存储结构本质上是操作受限的单链表。遵循栈后进先出 LIFO规则只在链表头部栈顶做插入、删除。因为所有的操作都集中在链表头部为了代码最简且效率最高链栈通常采用不带头结点的单链表实现头指针就是栈顶指针。栈顶Top就是单链表的头指针 S它始终指向链表的第一个结点。入栈Push相当于单链表的“头插法”在头部插入新结点。出栈Pop相当于删除单链表的头结点。图示初始S NULL空栈 Push(10) S - [10] - NULL Push(20) S - [20] - [10] - NULL Pop() S - [10] - NULL20 被 free 释放代码实现结构定义与初始化#includestdio.h#includestdlib.h#includestdbool.h// 链栈结点定义与单链表完全一样typedefstructLNode{intdata;// 数据域structLNode*next;// 指针域}LNode,*LinkStack;// LinkStack 就是栈顶指针指向第一个结点// 初始化 创建空栈voidInitStack(LinkStackS){SNULL;// 头指针置空表示没有任何结点}// 判空boolStackEmpty(LinkStack S){returnSNULL;}// 【判满】链栈几乎不存在 “满 ”的概念// 唯一的 “满 ”是堆内存耗尽malloc 失败。通常不写判满函数// 而是在 Push 时检测 malloc 返回值是否为 NULL。boolStackFull(LinkStack S){// 链栈无需判满因为可以动态扩展。// 如果硬要写永远返回 false只要内存够用。returnfalse;}入栈即头插法头插法新结点作为新栈顶。步骤新建结点 → 新结点指向原来的(旧)栈顶 → 更新栈顶指针// 入栈 在栈顶链表头部插入元素 eboolPush(LinkStackS,inte){// 1. 申请新结点空间LNode*s(LNode*)malloc(sizeof(LNode));if(sNULL){// 内存分配失败相当于 “栈满 ”returnfalse;}// 2. 头插法核心三步s-datae;s-nextS;// 新结点指向旧的栈顶结点Ss;// 栈顶指针指向新结点returntrue;}出栈出栈删除头结点栈顶结点步骤判空 → 暂存栈顶结点 → 取出数据 → 栈顶后移 → 释放原栈顶// 出栈删除栈顶元素并通过 e 带回其值boolPop(LinkStackS,inte){// 1. 先判空if(SNULL){returnfalse;}// 2. 保存被删结点LNode*qS;// q 指向栈顶结点eq-data;// 取出数据// 3. 头指针后移跨过被删结点Sq-next;// 新的栈顶变为原(旧)栈顶的下一个结点// 4. 释放被删结点内存防止内存泄漏free(q);returntrue;}查找取栈顶// 取栈顶只读操作不删除结点boolGetTop(LinkStack S,inte){if(SNULL)returnfalse;// 空栈eS-data;// 直接读取头结点的数据域returntrue;}销毁循环释放每一个结点最后栈顶置 NULLvoidDestroyStack(LinkStackS){while(S!NULL){LNode*qS;SS-next;free(q);}}(了解)带头结点的链栈头结点固定存在data闲置next指向真正的栈顶结点。栈顶指针S永远指向这个头结点不移动。#includestdio.h#includestdlib.h#includestdbool.htypedefstructLNode{intdata;structLNode*next;}LNode,*LinkStack;// LinkStack 指向头结点// 初始化: 创建头结点让头结点的 next 置空boolInitStack(LinkStackS){S(LNode*)malloc(sizeof(LNode));if(SNULL)returnfalse;S-nextNULL;// 头结点后面没有结点表示空栈returntrue;}// 判空: 判断头结点的 next 是否为 NULLboolStackEmpty(LinkStack S){returnS-nextNULL;}对比维度不带头结点标准带头结点初始状态S NULL空指针S指向头结点S-next NULL判空条件S NULLS-next NULL入栈核心代码s-next S; S s;直接改头指针s-next S-next; S-next s;改头结点的指针域出栈核心代码S q-next;头指针后移S-next q-next;头结点指针域跳过取栈顶元素e S-data;e S-next-data;多一层间接访问

相关新闻

Winget-Install:Windows包管理器的自动化部署解决方案

Winget-Install:Windows包管理器的自动化部署解决方案

Winget-Install:Windows包管理器的自动化部署解决方案 【免费下载链接】winget-install Install WinGet using PowerShell! Prerequisites automatically installed. Works on Windows 10/11 and Server 2019/2022. 项目地址: https://gitcode.com/gh_mirrors/wi/…

2026/7/29 4:40:00 阅读更多 →
d3-legend自定义事件处理指南:cellover、cellout、cellclick实战

d3-legend自定义事件处理指南:cellover、cellout、cellclick实战

d3-legend自定义事件处理指南:cellover、cellout、cellclick实战 【免费下载链接】d3-legend A reusable d3 legend component. 项目地址: https://gitcode.com/gh_mirrors/d3/d3-legend 想要为你的D3.js数据可视化添加交互式图例吗?d3-legend是…

2026/7/27 23:25:22 阅读更多 →
meilisearch-php测试与调试:单元测试与集成测试的完整指南

meilisearch-php测试与调试:单元测试与集成测试的完整指南

meilisearch-php测试与调试:单元测试与集成测试的完整指南 【免费下载链接】meilisearch-php PHP client for Meilisearch 项目地址: https://gitcode.com/gh_mirrors/me/meilisearch-php 想要确保您的PHP搜索应用稳定可靠吗?meilisearch-php客户…

2026/7/30 8:14:41 阅读更多 →

最新新闻

从数据采集到可视化分析:构建直播数据挖掘系统的工程实践

从数据采集到可视化分析:构建直播数据挖掘系统的工程实践

1. 项目缘起:从“看热闹”到“看门道”的转变几年前,我还在做游戏运营的时候,每天都要盯着斗鱼上各大主播的直播间数据。那时候,我们团队用的还是最原始的办法:运营同学手动把后台的在线人数、弹幕数、礼物收入抄到Exc…

2026/7/30 13:28:20 阅读更多 →
大学生证书越多越好吗?2026年高含金量考证指南与就业避坑建议

大学生证书越多越好吗?2026年高含金量考证指南与就业避坑建议

每当夜幕降临,走进大学的自习室,总能看到许多同学埋头苦读,桌上堆满了各种各样的考证复习资料。从四六级到计算机二级,从教师资格证到导游证,似乎每一个大学生都或多或少地患上了“考证焦虑症”。很多同学在后台经常会…

2026/7/30 13:28:20 阅读更多 →
如何用自然语言命令彻底改变你的编程工作流:Claude Code完整指南

如何用自然语言命令彻底改变你的编程工作流:Claude Code完整指南

如何用自然语言命令彻底改变你的编程工作流:Claude Code完整指南 【免费下载链接】claude-code Claude Code is an agentic coding tool that lives in your terminal, understands your codebase, and helps you code faster by executing routine tasks, explaini…

2026/7/30 13:28:20 阅读更多 →
品牌AI可见度优化策略

品牌AI可见度优化策略

品牌AI可见度优化策略繁淼信息——在AI搜索引擎日益主导信息分发的今天,品牌能否被AI准确识别并推荐,直接决定了线上获客效率。本文基于繁淼信息的品牌诊断数据,解析AI可见度的关键指标与优化路径,为企业提供可落地的声誉管理方案…

2026/7/30 13:28:20 阅读更多 →
渗透测试工程师:数字时代的“白帽卫士“,这个岗位到底在做什么?

渗透测试工程师:数字时代的“白帽卫士“,这个岗位到底在做什么?

提到"黑客",很多人第一反应是破坏与攻击。但在网络安全行业,有一群被称为"白帽"的渗透测试工程师,他们的工作恰恰是——在获得授权的前提下,用攻击者的视角去发现问题,帮助企业提前堵住漏洞。&…

2026/7/30 13:28:20 阅读更多 →
【单片机课程设计/毕业设计】基于 STM32 的水位噪声检测与自动安抚系统实现 基于硬件传感的婴儿智能摇床控制系统设计(012201)

【单片机课程设计/毕业设计】基于 STM32 的水位噪声检测与自动安抚系统实现 基于硬件传感的婴儿智能摇床控制系统设计(012201)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/7/30 13:27:20 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻