【数据结构】栈
创始人
2024-02-01 02:25:08
0

1.啥是栈

2.栈的使用

3.栈的自定义实现

4.划分栈,虚拟机栈,栈帧概念

(1)首先咱们来介绍一下什么是栈

Stack就是栈:栈是一种元素先进后出的一种数据结构

你可以把它想象成羽毛球筒,这是最直观的了:你拿一个空的羽毛球筒,往里面放羽毛球,假设你放入3个羽毛球,当你想从里面取出一个羽毛球的时候,不就是取的是最后放进去的那个羽毛球吗?第一个放进去的羽毛球被压在了最底部,也是最后才能拿到的羽毛球~

如上图,我要放入1  2  3  4  5  6 这几个元素,我按顺序先放入1  放入  2  再放入  3,现在3就在栈顶,1在栈低,我要是想从栈里取元素,首先取到的栈顶元素,而我想取到1的话,就得把1上面的元素先全部取完才能取到1,这就是说栈是一种先进后出的数据结构,1先放进去了,那就最后才能取,3最后放进去的,那么3就优先被取到 ~

上述就是关于栈的概念介绍


(2)接下来看看怎么在java中去使用栈

(图片来源:比特高博)

上图给出了栈的方法

接下来用代码测试一下(讲解写在注释中)

    public static void main(String[] args) {//创建栈Stack stack = new Stack<>();//往栈里插入元素stack.push(1);stack.push(21);stack.push(13);stack.push(15);//获取栈顶元素System.out.println(stack.peek());//弹出栈顶元素System.out.println(stack.pop());//再次获取栈顶元素System.out.println(stack.peek());//判断此时栈是否为空System.out.println(stack.empty());//接下来把栈中剩下的元素再全部弹出stack.pop();stack.pop();stack.pop();//再次判断栈此时是否为空System.out.println(stack.empty());//该方法不是栈的方法,而是父类方法System.out.println(stack.size());//stack继承了vector,有父类方法}

 

 注意两个方法

(1)peek():这个方法是查看当前的栈顶元素,返回值为栈的元素,这个只是看一下,并没有动元素

(2)pop():这个方法是弹出(删除)栈顶元素,返回值也是栈的元素,这个是不仅看,还把元素给删除了

然后还有最后那个size()方法,这个不是Stack自带的,而是它继承了vector,是父类的方法~


(3)自定义实现一个栈

栈的底层是一个数组,所以栈是顺序储存的

public class MyStack {public int[] elem;public int usedSize;public static final int DEFAULT_CAPACITY = 10;public MyStack(){elem = new int[DEFAULT_CAPACITY];}public void push(int val){if(isFull()){elem = Arrays.copyOf(elem,elem.length*2);}elem[usedSize] = val;usedSize++;}public boolean isFull(){if(elem.length == usedSize) {return true;}else {return false;}}//删除栈顶元素public int pop(){if(empty()){throw new emptyStackException("栈为空了");}int oldVal = elem[usedSize-1];usedSize--;return oldVal;}//判断是否为空public boolean empty(){return usedSize == 0;}public int peek(){if(empty()){throw new emptyStackException("栈为空了");}return elem[usedSize-1];}
}

(4)区分栈,虚拟机栈,栈帧

栈:一种先进后出的数据结构

虚拟机栈:一块JVM内存,定义的局部变量,方法的开辟都存再虚拟机栈上

栈帧:但是方法的开辟出来的这块内存叫做栈帧


以上就是栈的简单介绍~

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...