news 2026/4/23 17:39:31

数据结构初开课:栈的实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
数据结构初开课:栈的实现

本次编译环境为VS2022

文章目录

  • 前言
    • 栈的实现
      • 1.什么是栈
      • 2.栈的实现
        • 一.头文件和源文件的创建以及头文件中的内容
        • 二.功能代码的实现
          • 1.定义和销毁
          • 2.增加和删除
          • 3.判断空 找栈顶 获取栈中的个数
  • 总结

前言

在我们了解完链表:单链表和双链表后 我们将开始 栈和队列的学习
今天我们学习的是 栈 的代码实现 其中会有部分画图内容 和代码内容方便各位理解

栈的实现

1.什么是栈

栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底
栈 是先进后出

通过图例可以更快地理解

2.栈的实现

一.头文件和源文件的创建以及头文件中的内容

老样子 一个.h 文件和一个 .c文件
给到.h文件的实现代码`

#pragmaonce#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#include<assert.h>typedefintSTDateType;typedefstructStack{STDateType*a;inttop;intcapacity;}ST;//功能函数//定义voidSTInit(ST*ps);//销毁voidSTDestory(ST*ps);//插入voidSTPush(ST*ps,STDateType x);//删除voidSTPop(ST*ps);//找栈顶STDateTypeSTTop(ST*ps);//判断空boolSTEmpty(ST*ps);//获取栈中的个数intSTSize(ST*ps);
二.功能代码的实现
1.定义和销毁

定义和销毁其实和我们以前学过的链表顺序表大差不差 这里放出实现代码直接给各位观看

voidSTInit(ST*ps){assert(ps);ps->a=NULL;ps->capacity=0;ps->top=0;}//销毁voidSTDestory(ST*ps){assert(ps);free(ps->a);ps->a=NULL;ps->capacity=ps->top=0;}
2.增加和删除


了解完图例后呈现代码给各位

//插入voidSTPush(ST*ps,STDateType x){assert(ps);//当我们的 top = capacity的时候 要进行扩容操作 否则无法容纳归纳topif(ps->top=ps->capacity){intnewcapacity=ps->capacity==0?4:2*ps->capacity;STDateType*tmp=(STDateType*)realloc(ps->a,sizeof(STDateType)*newcapacity);if(tmp==NULL){perror("realloc fail");return;}//完成扩容操作ps->a=tmp;ps->capacity=newcapacity;}//扩容结束后 进行插入操作ps->a[ps->top]=x;ps->top++;}//删除voidSTPop(ST*ps){assert(ps);assert(ps->top>0);//top不大于0删不了啊ps->top--;}

这里的扩容操作与顺序表中的几乎一样 注意realloc的类型 和newcapacity的书写即可

3.判断空 找栈顶 获取栈中的个数

这三个功能函数其实都大同小异
都是根据 top来进行实现
判断空 只需看 top==0 如果等于0 则栈为空

找栈顶 也是 看 数组中[top-1]的值即可

获取栈中的个数 其实就是 看top的大小 当有一个值时 top = 1
同理可得 看top大小就能看出 栈中的个数
给到代码给各位

//找栈顶STDateTypeSTTop(ST*ps){assert(ps);assert(ps->top>0);returnps->a[ps->top-1];}//判断空boolSTEmpty(ST*ps){assert(ps);returnps->top==0;}//获取栈中的个数intSTSize(ST*ps){assert(ps);returnps->top;}

总结

栈的代码书写较为简单 但其中重要的原理大家也不能小觑 后进先出的规则不可被忽略 所以各位书写的时候尽量通过画图来解决此类问题
感谢各位彦祖亦非的观看 走之前不妨点个小赞 谢谢!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:52:12

Wan2.2-T2V-A14B支持指令嵌套吗?复杂提示词测试结果

Wan2.2-T2V-A14B支持指令嵌套吗&#xff1f;复杂提示词测试结果 在AI视频生成的世界里&#xff0c;我们早已过了“画一只猫”的初级阶段。现在的问题是&#xff1a;能不能让AI理解一个有起承转合、角色互动、条件判断的完整小故事&#xff1f; 比如—— “当雨开始下时&#x…

作者头像 李华
网站建设 2026/4/23 9:52:20

Stability AI视频生成技术完全手册:从零到专业级视频创作

Stability AI视频生成技术完全手册&#xff1a;从零到专业级视频创作 【免费下载链接】generative-models 是由Stability AI研发的生成模型技术 项目地址: https://gitcode.com/GitHub_Trending/ge/generative-models 想要用AI技术轻松制作出惊艳的视频内容吗&#xff1…

作者头像 李华
网站建设 2026/4/23 12:47:12

【MCP 2025认证抢跑指南】:新增量子算法模块的3大应对策略

第一章&#xff1a;MCP 2025量子编程认证变革解析 2025年微软认证专家&#xff08;MCP&#xff09;体系迎来重大革新&#xff0c;首次将量子计算编程纳入核心认证路径。此次变革标志着传统软件开发向量子算法设计的范式转移&#xff0c;旨在培养具备跨物理层与逻辑层协同开发能…

作者头像 李华
网站建设 2026/4/23 11:26:07

YashanDB数据库的存储引擎创新与核心技术深度讲解.

YashanDB 是一个高性能的分布式数据库&#xff0c;主要用于解决大规模数据存储和快速访问的问题。其设计理念集中在可扩展性、可靠性和高效性上。在存储引擎和核心技术方面&#xff0c;YashanDB 采取了一些创新的措施。以下是其存储引擎的创新及核心技术的深入讲解&#xff1a;…

作者头像 李华
网站建设 2026/4/23 14:13:52

Wan2.2-T2V-A14B模型对中文语境描述的理解优化

Wan2.2-T2V-A14B&#xff1a;让中文描述“动”起来的AI视频引擎 &#x1f3ac; 你有没有试过这样写一段话&#xff1a;“清晨&#xff0c;薄雾笼罩着江南水乡&#xff0c;一位穿蓝印花布衣的姑娘撑着油纸伞走过石桥&#xff0c;远处传来悠扬的笛声。” 然后希望它直接变成一段画…

作者头像 李华
网站建设 2026/4/23 11:26:22

彻底解决HtmlSanitizer中AngleSharp版本冲突:终极避坑指南

彻底解决HtmlSanitizer中AngleSharp版本冲突&#xff1a;终极避坑指南 【免费下载链接】HtmlSanitizer Cleans HTML to avoid XSS attacks 项目地址: https://gitcode.com/gh_mirrors/ht/HtmlSanitizer 在.NET Framework环境下使用HtmlSanitizer库时&#xff0c;开发者经…

作者头像 李华