当前位置: 首页 > news >正文

数据结构 栈

栈的概念

栈是一种线性的数据结构,栈中的数据遵循后进先出(LIFO,last in first off)的原则。

本文中的栈通过数组来实现。

栈的实现

栈需要的接口有:初始化和销毁,数据的进和出,取出栈顶数据,栈的判空,栈的元素个数。

#pragma once #include <stdio.h> #include<stdbool.h> #include<stdlib.h> #include<assert.h> typedef int STDataType; struct Stack { STDataType* a; int top; int capacity; }; typedef struct Stack ST;//定义节点 void STInit(ST *pst); void STDestroy(ST* pst); void STPush(ST* pst, STDataType x); void STPop(ST* pst); STDataType STTop(ST* pst); bool STEmpty(ST* pst); int STSize(ST* pst);

栈的初始化

void STInit(ST*pst){ assert(pst); pst->a=0; pst->top=0; pst->capacity=0; }

这里有一个非常关键的点,就是初始化时top的取值。top表示栈顶元素的位置,没有元素时,栈为空,top为0,此时指向的是第一个元素的位置,即栈顶元素的下一个位置,因此,这里的top指向的是栈顶元素的下一个位置。那么,这是不是说明top初始化为0是错误的呢?并不是,这里初始化为0在后续的函数中会非常方便。

栈的销毁

void STDestroy(ST* pst){ assert(pst); pst->a=NULL; pst->top=0; pst->capacity=0; }

栈顶元素的插入

void STPush(ST* pst, STDataType x){ asserrt(pst); if(pst->top=pst->capacity){ int newcapacity=pst->capacity=0?4:2*pst->capacity; STDataType* tmp=(STDataType*)realloc( newcapacity * sizeof(STDataType)); if(tmp==NULL){ perror("realloc fail); return; } pst->capacity=newcapacity; pst->a=tmp; } pst->a[pst->top] = x; psst->top++; }

栈顶元素的删除

void STPop(ST* pst) { assert(pst); pst->top--; }

栈顶元素的读取

STDataType STTop(ST* pst) { assert(pst); assert(pst->top > 0); return pst->a[pst->top - 1]; }

栈的判空

bool STEmpty(ST* pst) { assert(pst); return pst->top == 0; }

栈的元素个数

bool STEmpty(ST* pst) { assert(pst); return pst->top == 0; }
http://www.jsqmd.com/news/450209/

相关文章:

  • Comsol模拟黑磷各向异性吸收
  • Transformer进阶技术全景解析系列(第二篇:百万级长上下文——突破序列长度的“魔法”)
  • 部署Redis集群
  • 如何将OpenClaw部署到本地并配置企业微信?
  • Flutter 三方库 layerx_generator 的鸿蒙化适配指南 - 掌控代码模型资产、精密架构治理实战、鸿蒙级生成专家
  • Temu跨境电商怎么做:2026年3月从0到1实操指南
  • 收藏 | AI新手/程序员必看:轻松入门大模型与AI Agents,开启智能新篇章!
  • 《深度拆解:高通 Fastboot 刷机脚本及核心分区功能详解》
  • 基于Java springboot高校门诊管理系统挂号药品出入库(源码+文档+运行视频+讲解视频)
  • 2026金三银四转行网络安全,应该选哪个方向?
  • 交错并联Boost PFC仿真电路模型,控制方法采用输出电压外环,电感电流内环的双闭环PI控制...
  • LeetCode 1888 使二进制字符串交替的最少翻转次数
  • Seata 系列-1:基础概念
  • 论文写作新神器:书匠策AI,文献综述的“智慧魔法师”
  • Transformer进阶技术全景解析系列(第一篇:高效注意力机制——让Transformer“轻装上阵”)
  • 生物钟编码:基因定制开发效率表
  • 基于Java Swing + MySQL的学生住宿管理系统的设计与实现
  • 基于Java springboot高校洗浴预约管理系统(源码+文档+运行视频+讲解视频)
  • electron 安装教程
  • 基于Java springboot高校科研信息管理系统(源码+文档+运行视频+讲解视频)
  • 啪嗒一声按下空格键,Simulink模型开始跑起来了。显示器上跳动的波形让我突然想起刚接触下垂控制时被交叉耦合支配的恐惧——直到发现解耦控制这剂良药
  • 性能优化在测试资源节约中的价值实现
  • 电动汽车备用能力的市场机制分析与策略优化:实例探讨充电合约、电价响应及市场设计的影响
  • PCB双色油墨评测 打样哪家效果好
  • 当测试文档遭遇Z世代:质量保障体系的代际冲突与重构
  • 基于Python+ai技术的地铁导航旅游小程序
  • 能源AI跨界:电网优化算法开发速成——软件测试从业者的技术迁移指南
  • 探秘书匠策AI:文献综述写作的“智慧魔法棒”
  • 业务开发SOP
  • 是德科技33522B 33621A 33612A 33622A 33611A函数信号发生器