《java数据结构》--栈的详解

一.栈的认识

栈是一种不同于链表和顺序表的储存数据结构,它对存储数据和取出数据有着特殊的要求🤔。

首先栈只能从一端存储数据,也就是从一端进,还从这一端出这也是栈最大的特点,这也导致在栈中存取数据都必须遵循先进后出的原则😊,即先存入的数据只能最后拿出来,嗯🤔你可以把它想做一个细长的圆桶,你要往里放东西肯定是先放在最下面,当放满这个圆桶后你要再拿出刚开始放的那个,就必须把它上面的东西都拿出来才行。下面我来画图演示一下(画的不好请见谅🦊):

一般我们将栈用来存取的一端叫做栈顶,我们常常说取栈顶元素就是去取离栈顶最近的元素(也就是图中的3),另一端叫做栈底,向栈中存储数据叫做压栈,取出数据叫做出栈。

🐱以上就是关于栈的基本概念,接下来我们来自己实现一个栈,并进行增删查改😊。

二.栈的手动实现

因为栈不像顺序表和链表,可以随便访问到任意一个位置的数据,栈只能对栈顶元素进行操作并且遵循先进后出原则。那具体怎么操作呢🧐,接着看😉。

1.创建栈🐱

栈可以用数组来实现也可以用链表来实现

数组栈:用数组实现比较方便,而且再尾部插入和删除的代价小时间复杂度为O(1),且没有其他额外开销。这种实现方式适合于栈的常见操作,如进栈和出栈,因为这些操作在数组的尾部进行,效率较高。然而,数组的缺点是大小固定,需要预先分配足够的空间,且在栈满时无法动态扩展。

链表栈:可以灵活地添加或删除元素,无需预先分配固定大小的存储空间。链表栈通过维护一个指向栈顶元素的引用(头插,头删),可以实现快速的进栈和出栈操作。然而,链表在实现栈时,每个元素都需要额外的空间来存储指向下一个元素的引用,这可能导致空间上的开销。

具体使用哪种更据具体需要😊

博主这里使用数组来实现栈😊

2.判断是否压满🐱

方法和顺序表一样直接判断数组长度和栈内元素数量是否相同

3.压栈🐱

压栈的操作其实很容易实现首先还是和顺序表一样先判断是否扩容,然后直接在最后插入一个数据即可😉

4.出栈🐱

博主这里设定如果栈为空就抛出一个错误

出栈操作依然简单😸,让数据容量减一,然后返回栈顶元素就行😼

5.获取栈顶元素🐱

到这里你应该已经可以自己完成这个操作了吧😸,试着自己操作一下吧,实现方法和出栈类似。

6.获取长度和判空🐱

7.打印栈的元素🐱

到这里我们栈的内容就聊完了😋,如果你有什么不懂得地方或者其他见解,欢迎在下方评论或者私信博主,最后也希望可以多多支持一下博主🥰🥰!!!下一篇我们来聊一聊队列😸🙉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值