1.什么是栈(Stack)栈是一种数据结构。要解释栈的定义,首先要从栈的特性说起。只要数据结构符合这个特性,就可以称为栈。下面我们就来看看栈的特点是什么。栈的特点是栈中存放的元素先进后出。先进后出是什么意思?我们考虑一个有5层的桶,每层只能装一个球,只有桶的顶部有一个放球和取球的开口。现在假设我们有名为A、B和C的三个球,桶也是空的。我们将球按照A、B、C的顺序放入桶中,那么此时桶中球的排列如下:|第四层||第三层|丙|第二层|B|第一层|A|这时候我们把球从桶里一个一个拿出来。首先只能拿C球,拿掉C球后才能拿B球,再拿A球。根据上面的场景,我们可以知道放球的顺序是A、B、C;取球的顺序是C,B,A。也就是上面说的栈的特点:先进后出,栈只提供栈顶给我们放元素和取元素。2、java实现栈可以通过链表或者数组来实现。Backstab选择双链表作为载体来实现栈。链表和双向链表的实现可以参考上一篇:SegmentFaultBugkitpackageorg.bugkit.structure;/***@authorbugkit*@since2021.10.27*/publicclassLinkedListextendsAbstractList实现List,Queue,Stack{privateNodehead;私人节点尾部;//创建一个空栈publicLinkedList(){tail=head=null;}//将元素放入栈中@Overridepublicbooleanpush(Ee){Nodenode=newNode<>(e);如果(isEmpty()){尾=头=节点;}else{node.prev=tail;tail.next=节点;尾=节点;}大小++;返回真;}//从栈中获取一个元素@OverridepublicEpop(){if(isEmpty()){thrownewRuntimeException("Stackisempty");}Ee=tail.e;如果(大小()==1){尾=头=空;}else{tail=tail.prev;tail.next=null;}尺寸-;返回e;}@OverridepublicStringtoString(){StringBuildersb=newStringBuilder();sb.append("链表:{");节点节点=头;while(node!=null){sb.append(node.e).append("<->");节点=节点.下一个;}sb.append("null}");返回sb.toString();}privatestaticclassNode{Ee;下一个节点;节点上一个;公共节点(Ee){this.e=e;}}}