栈在计算机中扮演着重要的角色,它是计算机实现函数调用的基本数据结构。


文章目录

  • 1.什么是栈
  • 2.入栈
  • 3.出栈
  • 4.栈的实现
  • 5.总结

1.什么是栈

栈是一种较为特殊的数据结构,它的特点是先进后出。什么意思呢?想象你有一个跟书本一样长宽的盒子,当你依次往里面放进书本1,书本2,书本3之后,如果想要把书本1拿出来,你会发现现在你能拿出来的只有书本3。因为其他两本都被压在下面了。只有当书本3,书本2被依次取出之后,才能取出书本1。数据结构中的栈模拟的就是这样一种结构,盒子就是我们的栈,书本就是我们的数据,放书的过程叫做入栈,而取出最上面的书的过程叫做出栈

2.入栈

当一个栈被创建之后,它提供给外部的操作只有:入栈,出栈,访问栈顶这几个操作。来看看入栈的例子:

每次入栈操作,除了将数据压入到栈顶之外,还会更新top指针的记录。这个top指针会一直指向栈顶。由于栈维护了一个top指针,使得我们可以在O(1)时间内完成数据入栈的操作。

3.出栈

出栈操作,每次只能弹出栈顶的元素。

如果我们想要弹出元素90,只能先依次把70,80弹出,才可以把90弹出。因为这样才符合先进后出的特性。

4.栈的实现

在实现上,栈的实现可以用数组来替代。因为数组是编程语言直接支持的最简单的数据结构,可以用它作为基础,来实现其他的数据结构。

从上图中可以发现,把栈横过来就变成了数组,只要按照栈的先进后出特性来访问数组,就可以根据数组来实现栈。入栈(push)和出栈(pop)的代码如下:

//入栈
void push(int a[],int value){if(top == MAX_SIZE-1){//MAX_SIZE为栈空间大小,此时栈满return ;}else{top++;//栈顶指针+1a[top]=value;}
}//出栈
int pop(int a[]){if(top ==-1){//top指向-1,表示此时栈空return ;}else{delete_elem = a[top];top--;//栈顶指针-1return delete_elem;//返回删除的栈顶元素}
}

5.总结

**时间复杂度:**入栈O(1),出栈O(1),访问栈顶O(1)。
适用情况:元素需要“先进后出”。​
在我们调用函数的时候,函数调用的顺序,以及函数内部一些变量,都是以栈的形式存储。递归也是依赖着系统内部的栈来实现的,当递归过深或者没有退出时,就会出现“栈溢出”的现象,意思就是函数调用的次数超过了栈能够存储的容量。


公众号:萌凯的程序人生
一枚IT研究生,致力于分享自己的学习经历和总结!
喜欢的话请点赞关注,谢谢您!

栈,实现递归的数据结构相关推荐

  1. 数据结构与算法:09 栈与递归

    09 栈与递归 知识结构: 栈是我们经常使用的一种数据结构,比如,手枪发射子弹的顺序与子弹压入弹夹的顺序是相反,即后压入弹夹的子弹先发射出来.又比如,我们使用的Word.Excel.Photoshop ...

  2. 数据结构之栈与递归的实现及应用(斐波拉契数列递归解法和strlen递归解法)

    栈与递归 程序中的"函数调用栈"是栈数据结构的一种应用. 函数调用栈一般是从高地址向低地址增长的,栈底为内存的高地址处,栈顶为内存的低地址处. 函数调用栈中存储的数据为活动记录.活 ...

  3. 数据结构(C语言版)之栈及递归

    目录 前言 正文 一.栈 1.栈的概念及术语 1.定义 2.逻辑结构 3.存储结构 4.运算规则 5.实现方式 6.栈是一种特殊的线性表,它的逻辑结构和存储结构与线性表相同,其特殊性体现在" ...

  4. Datawhale组队学习 Task03:栈与递归(2天)

    Task03:栈与递归(2天) 栈是我们经常使用的一种数据结构,如下图所示,手枪发射子弹的顺序与子弹压入弹夹的顺序是相反,即后压入弹夹的子弹先发射出来. 比如我们使用的Word.Excel.Photo ...

  5. 第三章:3.栈和队列 -- 栈与递归的实现

    前言: 栈还有一个总要应用是在程序设计语言中实现递归.一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称作递归函数. 目录: 1.栈 2.栈的应用举例 3.栈与递归的实现 4.队列 5.离 ...

  6. LQ训练营(C++)学习笔记_栈与递归

    栈与递归 二.栈与递归 1.栈的概念 2.代码实现栈的数据结构 3.栈stack< T >的方法总结 4.火车出入站问题 5.递归的概念 6.递归方法求n的阶乘 7.汉诺塔问题 二.栈与递 ...

  7. 解题笔记(15)——几个栈和递归的问题

    本文介绍了几个栈和递归的问题,当然递归的本质就是栈.这些问题网上都能找到解答,自己思考并实现了一下,供网友参考. 问题1:跳台阶问题.具体描述,一个台阶总共有n级,如果一次可以跳1级,也可以跳2级.求 ...

  8. 利用栈将递归转换为非递归的方法

    通过上述讨论,可以看出递归程序在执行时需要系统提供隐式栈这种数据结构来实现,对于 一般的递归过程,仿照递归算法执行过程中递归工作栈的状态变化可直接写出相应的非递归算法. 这种利用栈消除递归过程的步骤如 ...

  9. 栈模拟递归 遍历二叉树的正确写法

    栈模拟递归 遍历二叉树的正确写法 二叉树的生成 树的层次遍历 前中后序遍历的递归实现 关于栈的实现 Reference 对于二叉树的生成,遍历,应该是树这个数据结构需要的基本功,只有真的理解了树的生成 ...

  10. 九、【栈和队列】栈和递归

    栈和递归 栈的另外一个重要应用就是在程序设计语言中实现递归. 1 递归 Recursion 简单来说,递归就是直接调用自身或通过一系列调用语句间接调用自身的一种编程技巧或方法,使用递归来实现的函数被称 ...

最新文章

  1. 【工业控制】什么是波形
  2. asp.net定点执行任务总结
  3. 第11章 使用Vsftpd服务传输文件
  4. 大数据系统架构的通用模块有哪些
  5. Mac解决安装pip(python2.7)失败
  6. qt将tablewidget导出为excel
  7. python 图像检索系统_python-计算机视觉 - 图像检索
  8. 图像分割论文 “RANet : Region Attention Network for Semantic Segmentation”
  9. arcgis制作分幅图层,并对分幅图进行编号
  10. 【二】情感对话 Control Globally,Understand Locally: A Global-to-Local Hierarchical Graph Network for ESConv
  11. 如何利用STM32和迪文串口屏以及WIFI模组进行数据交互
  12. rand函数和srand函数详解
  13. GGT: Graph-Guided Testing for Adversarial Sample Detection of Deep Neural Network 论文笔记
  14. BAT都怎么泡区块链?假醉网易,炮灰百度,闷骚腾讯,假正经阿里
  15. 【C语言】题目:输入某年某月某日,判断这一天是这一年的第几天?
  16. 软件企业认定的标准要求
  17. STM32F103xx TFT液晶显示ASCII字符串、中文、图片并且显示带有镜像和旋转功能
  18. 谷粒商城-基础篇-商品服务2-品牌管理(P59-P69)+(P75)
  19. 如何实现‘请在微信客户端打开链接’
  20. 宏观经济学-计算题(一)

热门文章

  1. python强制转换整数_python数据类型的强制转换
  2. 漫画别只是看,用“应用之星”自制App才过瘾
  3. m进制转换为n进制-任意进制转换算法
  4. react native 安装watchman flow
  5. 全文检索ElasticSearch(一篇就够了)
  6. ActiveMQ 原理分析—消息发送篇
  7. 易语言调用API之打印函数
  8. Revit二次开发之快速过滤与慢速过滤【比目鱼原创】
  9. window服务器cpu过高的排查_服务器CPU使用率过高排查与解决思路
  10. Xml转Java实体类对象 xml转Javabena 对象 且多级嵌套 复杂嵌套