Java深入理解数据结构_java数据结构系列——深入了解“栈”结构

本文深入浅出地讲解了栈的基本概念,包括其工作原理和特点,重点介绍了栈在子程序调用、递归、表达式转换及图形搜索中的实际应用。并提供了用数组实现栈的代码示例,包括判断栈空、满、压栈和弹栈的方法。适合初学者理解和实践栈的数据结构。
摘要由CSDN通过智能技术生成

栈作为一个常用的数据结构(如果有不太理解什么是数据结构的请点这里),其使用范围还是非常广泛的。今天我们就一起了解一下“栈”。

简介

栈是线性结构当中一种特殊的线性表,它会限制元素的插入和删除,并且是一个有序的列表。栈存取数据都是在线性表的一端进行的,存取数据的一端称为“栈顶”,另一端则是“栈底”。这种存取方式就造就了栈具有先入后出的特点,也就是第一个存储的数据会在最后一个取出来。举个例子来说栈就像是一个弹夹,栈中的数据就好比是一枚枚的子弹。开枪射出的第一枚子弹都是最后一个压入弹夹的。这样说大家是不是大概都能明白栈是一种什么样的结构?如果还是不太清楚的话请看下图。

a51e567c058cde116107acf4cc2f7ecc.png

通过上面的描述和图片相信大家对栈这个数据结构有了一个大致的概念。学习一个新东西肯定是为了使用,那么它有什么用途呢?别急别急,拿好小板凳让们来了解一下。

cb783e3b39de16ac35125165763a9454.png

应用场景1、子程序的调用:在跳往子程序前,会先将下个指令的地址存到栈中,直到子程序执行完再将地址取出,以回到原来的程序中。

2、处理递归调用:和子程序调用类似,除了存储下一个指令的地址外,也将参数、区域变量等数据存入栈中。

3、表达式的转换【中缀表达式转后缀表达式】。

4、二叉树的遍历。

5、图形的深度优先(depth-first)搜索法。

以上就是栈比较常见的一些应用场景。在之后的文章中我也会为大家仔细介绍这些场景下是如何运用栈的。

79bc5a19da7c5748e0d77e1172feda96.png

下面重头戏来喽,让我们一起来动手实现一个“栈”!

代码实现

通过数组实现栈:

6d5567d57dad56ae7ae73609e20c544b.png

判断栈空的方法:

dbf41736a9bdee1c0bea4f1851963305.png

判断栈满的方法:

7cb2c3d77951ec6d01dec880d1a602a6.png压栈(入栈)的方法:

096257bdae196fedd887161006731665.png弹栈(出栈)的方法:

a3af95a815d16a9dac2fb341df1efa09.png今天的分享就到这了,如果感觉写得不错的记得点赞加关注哟!文章有问题的地方也希望大家可以提出,我会及时更改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值