跳至主要內容

算法和算法评价

微信公众号:储凡2021/3/11大约 5 分钟

栈的基本概念和基本操作

基本概念

: 只允许在一端进行插入或者删除操作的线性表后进先出的线性表

  • 明确栈是一种线性表
  • 限定栈只能在某一端进行插入或者删除操作

栈的顺序结构

栈顶:线性表允许进行插入和删除的一端。

栈底:不允许进行插入和删除的另外一端,是固定的。类似杯底这中概念

空栈:不含任何元素的空表,也叫栈空

基本结构如下:

在上面的基本结构中,可以假设存在栈S=(a1,a2,a3,a4,a5,a6,a7,a8),很明显

  • 栈顶元素:a1
  • 栈底元素:a8

栈只能在栈顶进行插入和删除操作

  • 进栈顺序:a1->a2->a3->a4->a5->a6->a7->a8
  • 出栈顺序:a8->a7->a6->a5->a4->a3->a2->a1

可以得出结论:栈是后进先出(先进后出),即:LIFO(Last In First Out),也可以叫后进先出的线性表

基本操作

  • InitStack(&S): 初始化一个空栈S,栈顶指针初始化为-1
  • StackEmpty(S): 判断一个栈是否为空,如果栈空则返回true,否则返回false
  • Push(&S,x): 进栈,若栈未满,x进栈操作,插入到栈内成为新的栈顶元素
  • Pop(&S,&x): 出栈,若栈非空,出栈操作,弹出栈顶元素,用指针x进行返回。
  • GetTop(S,&x): 读栈顶元素,若栈S非空,用x返回栈顶元素。
  • ClearStack(&S): 销毁栈,释放栈S占用的存储空间。

Tips: &是C++特有的,可以用来表示引用调用,类似传址目的,可以类比指针。 当然,在C语言中*代表指针,指向存储地址,也是具有传址目的

更新日志

2024/9/26 04:05
查看所有更新日志
  • 77999-feat: 升级vuepress到最新版本,改造整个项目结构、配置 (#108)
  • 93038-feat: 移除eslint相关配置,引入@antfu/eslint-config,统一约束风格
  • 564c3-feat: 文档内容更新,md文档新增固定链接
  • 15124-feat(markdownlint-cli): 添加markdown文档校验,支持lint脚本自动格式化文档
  • dc1d8-feat: 新增数据结构入门、线性表、栈、队列文章固定链接
  • cd9f4-feat: 408各科导航目录梳理,修改跳转链
  • 6a156-feat: 更新文档
  • 8262d-feat: 修复文档,新增算法代码
  • 7bd30-refactor: 配置全局采用ts改写,优化导航栏
  • 9219e-feat: docs目录调整,新增文档 (#2)
  • e2133-fix: docs目录调整,新增manuscript底稿目录
  • 4513e-fix
  • 867b1-refactor(docs):添加自动化脚本,打通发版流程
  • 3911e-merge queue
  • 41a33-add logic images
  • d5246-栈相关
贡献者: mmdapl,喜欢芝士的妹妹,妹妹下雨回不去,最近在学桌球,chu fan,公众号:Rong姐姐好可爱,142vip.cn