什么是链栈及其基本操作
文章目录什么是链栈代码实现结构定义与初始化入栈出栈查找取栈顶销毁(了解)带头结点的链栈什么是链栈链栈是栈的链式存储结构本质上是操作受限的单链表。遵循栈后进先出 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/10/18 8:23:34 阅读更多 →
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/10/18 4:50:56 阅读更多 →
meilisearch-php测试与调试:单元测试与集成测试的完整指南

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

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

2026/10/16 6:41:29 阅读更多 →

最新新闻

Flink核心机制:Window、State与Checkpoint的协同解析

Flink核心机制:Window、State与Checkpoint的协同解析

做流计算这几年,几乎每次面试或者带新人,我都会被问到Flink的Window、State、Checkpoint。很多朋友一开始觉得这三个概念是孤立的:Window是做聚合的,State是存数据的,Checkpoint是容错的。但实际上,这三者在…

2026/10/18 11:34:06 阅读更多 →
基于Spring Boot的私人云网盘系统设计与实战解析

基于Spring Boot的私人云网盘系统设计与实战解析

我最早做这个“基于Spring Boot的私人云网盘系统”,动机非常朴素:公有网盘用久了,总是被各种限制搞得心烦——下载一多就开始限速,稍微私密一点的文件也不敢放。后来索性在团队里自己搭了一个用Spring Boot写的私人云网盘&#xf…

2026/10/18 11:34:06 阅读更多 →
FastAPI集成SQLAlchemy:从CRUD到生产级数据库持久化实践

FastAPI集成SQLAlchemy:从CRUD到生产级数据库持久化实践

终于写到第5部分了。前四部分我们把FastAPI的路由、参数校验、请求体、响应模型、中间件和异常处理都过了一遍,单看接口已经能跑得像模像样。但做过真实项目的人都知道,这还只是“玩具级”的后端。原因很简单:数据一重启就丢,接口…

2026/10/18 11:34:06 阅读更多 →
医疗知识图谱问答系统:实体链接+多跳推理+可解释查询

医疗知识图谱问答系统:实体链接+多跳推理+可解释查询

简介:这是一套基于Python实现的医疗知识图谱自动问答系统源码,面向人工智能、自然语言处理与智慧医疗方向的学习者和开发者,旨在解决医疗领域专业问题的语义理解与精准检索难题。资源包含26个文件,涵盖8个Python核心模块&#xff…

2026/10/18 11:34:06 阅读更多 →
AI抢不走你的饭碗?从恐惧到指挥的实战指南

AI抢不走你的饭碗?从恐惧到指挥的实战指南

我认识张伟,不是那个全国人民都认识的张伟,是我前同事。上个月他给我打电话,语气里全是惊恐:“兄弟,AI要抢我饭碗了,给我出出主意。”事情很老套。他们部门接到新要求,所有项目周报、数据分析、…

2026/10/18 11:34:06 阅读更多 →
从零训练小型语言模型:数据、模型、训练与踩坑全流程

从零训练小型语言模型:数据、模型、训练与踩坑全流程

最近刚把一门深度学习课程的作业一完整跑通,主题是Training,也就是从头训练一个小型语言模型。先说结论:这件事没有想象中那么玄,但也没有网上教程写得那么轻松。你会在数据预处理、模型初始化、训练循环、评测生成这几个环节里反…

2026/10/18 11:33:06 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/16 14:23:36 阅读更多 →