从零开始的敲代码生活--数据结构篇(栈)
一、栈基础概念栈结构只允许从一端进行插入和删除数据的线性存储结构称为栈结构。 数据插入和删除的这端称为栈顶另一端称为栈底。 数据的插入称为入栈/压栈数据的删除称为出栈/弹栈。特点 先进后出(FILO)栈的应用解决回溯问题撤销功能、网页撤销功能缓存判断回文字符串判断成对出现的符号有没有丢失栈的分类顺序栈使用顺序存储结构(数组)实现的栈根据栈顶位置与栈的生长方向分为四种满栈、空栈根据所在位置是否存有元素确定栈顶所在位置一直存有元素称为满栈栈顶所在位置一直没有元素称为空栈增栈、减栈根据栈的生长方向确定入栈数据时栈顶向内存高地址移动称为增栈入栈数据时栈顶向内存低地址移动称为减栈组合满增栈、空增栈、满减栈、空减栈链式栈使用链式存储结构(链表结点)实现的栈入栈采用头插法出栈删除头结点不存在栈满问题。链式栈的 API创建栈入栈出栈判栈空获取栈顶元素清空栈(删除栈中的所有结点)销毁栈文件说明文件说明stack.h头文件栈结构体定义 函数声明stack.c源文件栈所有功能实现main.c测试 main 函数二、头文件 stack.h#ifndef _STACK_H #define _STACK_H #include stdio.h #include stdlib.h typedef int Data_t; /* 栈结点结构体:数据域 指针域 */ typedef struct node { Data_t data; // 数据域:保存的数据 struct node *pnext; // 指针域:下一个结点的地址 }Node_t; /* 栈对象结构体:栈顶指针 结点计数 */ typedef struct stack { Node_t *ptop; // 栈顶指针 int clen; // 栈当前结点个数 }Stack_t; extern Stack_t *create_stack(); extern int is_empty_stack(Stack_t *pstack); extern int en_stack(Stack_t *pstack,Data_t data); extern int de_stack(Stack_t *pstack,Data_t *data); extern int show_stack(Stack_t *pstack); extern int get_stack_top(Stack_t *pstack,Data_t *data); extern int free_stack_node(Stack_t *pstack); extern void free_stack(Stack_t *pstack); #endif三、功能实现 stack.ccreate_stack 创建栈功能分配栈管理结构体初始化栈顶指针 ptop 置 NULL、结点计数 clen 为 0。返回栈指针malloc 失败返回 NULL。Stack_t *create_stack() { Stack_t *pstack malloc(sizeof(Stack_t)); if(pstack NULL) { printf(malloc fail\n); return NULL; } pstack-clen 0; pstack-ptop NULL; return pstack; }is_empty_stack 判栈空功能判断栈是否为空。返回1 空0 非空-1 入参为 NULL。int is_empty_stack(Stack_t *pstack) { if(pstack NULL) { return -1; } else { return pstack-clen 0; } }en_stack 入栈(压栈)功能头插法在栈顶插入新结点新结点指针域指向原栈顶结点更新栈顶指针计数自增。返回0 成功-1 失败(入参为 NULL 或者 malloc 失败)。int en_stack(Stack_t *pstack,Data_t data) { if(pstack NULL) { return -1; } Node_t *ptemp malloc(sizeof(Node_t)); if(ptemp NULL) { printf(malloc fail\n); return -1; } ptemp-data data; ptemp-pnext pstack-ptop; pstack-ptop ptemp; pstack-clen; return 0; }de_stack 出栈(弹栈)功能删除栈顶结点并带回其数据栈顶指针后移一位释放原栈顶结点计数减一。返回0 成功-1 失败(栈空或入参为 NULL)。int de_stack(Stack_t *pstack,Data_t *data) { if(is_empty_stack(pstack) ! 0) { return -1; } Node_t *ptemp pstack-ptop; *data ptemp-data; pstack-ptop ptemp-pnext; free(ptemp); return 0; }get_stack_top 获取栈顶元素功能读取栈顶结点的 data 数据不删除结点。返回0 成功-1 失败(栈空或入参为 NULL)。int get_stack_top(Stack_t *pstack,Data_t *data) { if(is_empty_stack(pstack) ! 0) { return -1; } *data pstack-ptop-data; return 0; }show_stack 遍历打印栈功能从栈顶开始循环遍历打印栈中所有 data 数据。返回0 成功-1 失败(栈空或入参为 NULL)。int show_stack(Stack_t *pstack) { if(pstack NULL) { return -1; } Node_t *ptemp pstack-ptop; if(pstack-clen ! 0) { while(ptemp ! NULL) { printf(%d ,ptemp-data); ptemp ptemp-pnext; } printf(\n); return 0; } return -1; }free_stack_node 清空栈功能循环释放栈中所有数据结点清空后栈顶指针置 NULL、计数置 0。返回0 成功-1 入参为 NULL。int free_stack_node(Stack_t *pstack) { if(pstack NULL) return -1; Node_t *ptemp pstack-ptop; if(pstack-clen ! 0) { while(ptemp! NULL) { pstack-ptop ptemp-pnext; free(ptemp); ptemp pstack-ptop; } pstack-ptop NULL; pstack-clen 0; } return 0; }free_stack 销毁栈功能先调用 free_stack_node 释放全部数据结点最后释放栈管理结构体。void free_stack(Stack_t *pstack) { free_stack_node(pstack); free(pstack); }四、测试 main 函数 main.c#include stack.h int main(void) { Data_t data; Stack_t *pstack create_stack(); en_stack(pstack,1); en_stack(pstack,2); en_stack(pstack,3); en_stack(pstack,4); en_stack(pstack,5); show_stack(pstack); printf(---------\n); de_stack(pstack,data); printf(%d\n,data); printf(---------\n); get_stack_top(pstack,data); printf(top_stack %d\n,data); printf(---------\n); free_stack(pstack); return 0; }五、编译运行 内存检测编译gcc main.c stack.c -o stack_demo运行程序./stack_demovalgrind 检测内存泄漏写栈务必检测内存泄漏保证每一块 malloc 都有对应的 freevalgrind --leak-checkfull ./stack_demo运行输出结果5 4 3 2 1 5 top_stack 4

相关新闻

手机版deepseek里复制代码怎么用?AI导出鸭一键无损导出格式不崩

手机版deepseek里复制代码怎么用?AI导出鸭一键无损导出格式不崩

手机版DeepSeek生成代码后直接复制粘贴到本地编辑器,缩进全乱、换行符丢失、特殊字符变问号——这是移动端开发者和学习者的高频痛点。根源在于手机浏览器剪贴板对富文本和纯文本的转换逻辑不统一,复制时丢失了代码的缩进层级、空行和语法高亮元信息。AI…

2026/8/26 17:35:08 阅读更多 →
玉柴 1800kW(PRP 主用功率)10.5kV 高压柴油发电机组核心特性

玉柴 1800kW(PRP 主用功率)10.5kV 高压柴油发电机组核心特性

基准配置:发动机 YC12VC2700L-D31 / YC16VC3000-D31;1800kW PRP/2250kVA,10.5kV 高压同步发电机,50Hz/1500rpm 一、动力本体(发动机)核心特性1. 结构硬件特点V 型 12 缸 / 16 缸四冲程、水冷、增压中冷、电…

2026/8/26 17:35:08 阅读更多 →
下界理论:差分隐私能有多好?

下界理论:差分隐私能有多好?

原文课程: Lecture 11 — Packing Lower Bounds (Gautam Kamath, CS 860, Fall 2020) 上几讲我们看到了各种 DP 算法,自然会问一个问题:我们能不能做得更好? 或者说,现在已经有的算法是否已经是最优的了? 答案是&…

2026/8/26 17:35:08 阅读更多 →

最新新闻

深入理解 AI Agent · AGENT #03:从单 Agent 到多 Agent

深入理解 AI Agent · AGENT #03:从单 Agent 到多 Agent

📘 《深入理解 AI Agent》系列 第八篇 | AGENT-03 前篇回顾:Agent 基础篇 #01 从LLM到Agent → Agent 基础篇 #02 四大核心机制 → Agent 基础篇 #03 从单Agent到多Agent 开篇:单 Agent 能走多远? 做 AI Agent 的开发者常有一个…

2026/8/26 18:46:25 阅读更多 →
Django金融时间序列数据中的异常检测与风险预警系统设计与实现机器学习选题方向大数据毕设项目

Django金融时间序列数据中的异常检测与风险预警系统设计与实现机器学习选题方向大数据毕设项目

3.2系统可行性分析3.2.1 技术可行性​在数据处理技术方面,Python 拥有丰富的数据分析库,如 Pandas、NumPy 等,能够高效处理金融时间序列数据中的清洗、插值、标准化等任务。对于异常检测算法,无论是基于统计的 3σ 准则、贝叶斯推…

2026/8/26 18:46:25 阅读更多 →
Yolo 小白入门 08:图片、视频、摄像头、RTSP 一次搞清——source 参数实战

Yolo 小白入门 08:图片、视频、摄像头、RTSP 一次搞清——source 参数实战

Yolo 小白入门 08:图片、视频、摄像头、RTSP 一次搞清——source 参数实战 [!NOTE] 你现在位于《Yolo 全速入门到精通【持续更新中】》的 第一章 零基础跑通。这一篇不追求堆满参数,而是带你设计“多种输入源”的最小可验证闭环,并能说清它在数据、模型与业务之间的位置。我…

2026/8/26 18:46:25 阅读更多 →
Java 程序员第 46 阶段15:大模型调用链路追踪,SkyWalking 排查线上性能,集群部署实战OAP集群加高可用存储落地

Java 程序员第 46 阶段15:大模型调用链路追踪,SkyWalking 排查线上性能,集群部署实战OAP集群加高可用存储落地

前面 14 篇我们已经把大模型链路的采集、拆解、关联、告警、存储选型全部打通。但所有这些能力都建立在一个前提上:SkyWalking 自身是稳定可用的。如果 OAP 是单节点,它一宕机,全公司的链路监控就黑屏,正在发生的大模型事故你将完…

2026/8/26 18:46:25 阅读更多 →
send_keys的参数分为普通字符串类内容和Keys类特殊按键两类,既可以实现普通文本输入,也可以模拟各类键盘功能按键操作

send_keys的参数分为普通字符串类内容和Keys类特殊按键两类,既可以实现普通文本输入,也可以模拟各类键盘功能按键操作

send_keys的参数类型 send_keys方法支持两类参数,具体如下: 字符串类参数 可以是字符串常量,也可以是其他类型转换后的字符串变量,用于向目标元素输入普通文本内容,比如输入搜索关键词、表单信息等场景。Keys类封装的特…

2026/8/26 18:45:24 阅读更多 →
Requests库是Python中用于发起HTTP请求的第三方库,号称是“为人类准备的HTTP库”,使用便捷,是爬虫开发的常用工具

Requests库是Python中用于发起HTTP请求的第三方库,号称是“为人类准备的HTTP库”,使用便捷,是爬虫开发的常用工具

目前知识背景中没有关于web.get的直接相关说明,你提到的web.get可能是对Python Requests库get方法的表述或者其他场景下的调用形式,以下为你介绍相关的get相关知识供你参考: 一、Python Requests库的get方法 Requests库是Python中用于发起HTT…

2026/8/26 18:45:24 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →