
正文
出栈入栈JAVA代码 java进栈出栈函数
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java内部有没有定义好的栈的类?
有。
数据结构中的栈,在解决很多问题都有用处,比如括号匹配,迷宫求解,表达式求值等等,java中有封装好的类,可以直接调用。
使用链表来实现栈比用数组更加方便,也易于节省空间,因为栈只能在栈顶进行操作,不需要进行随机访问栈元素。首先实现栈接口IStack,提供出栈、入栈、获取栈顶元素、判断是否为空以及清空栈等基本功能:定义一个Node类,用于保存链中点的信息。
栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
相关问答
Q1: Java如何实现出栈入栈并获取栈中最小值的程序
你得明白栈的定义。代码执行的时候是执行一个方法,执行完,返回方法的上一个代码块继续往下执行后面的内容。这样的话是不是就是一个栈结构了?先进后出。方法一边执行,一边往栈里面存数据,等执行完了就取出数据(取出的是返回值,是最后一个存进去的 栈结构是后进先出),然后执行外面的代码。这么说你可能不明白,我给你举个例子。
int sub(int a,int b){
return a+b;
}
int c = sub(2,3);//注意执行这条语句的时候是不是执行了一个方法?
//那么语句执行的时候是要从左往右执行的对吧,但是事实的逻辑却是先算出来sub(2,3)这个方
//法的返回值,然后再把返回值(5)赋值给 c ,那么这个怎么实现,肯定是一个栈的数据结构,编译的时候先把”int c = “入栈,然后再把 sub(2,3),入栈,执行的时候,从栈里面取,取的第一个肯定是sub(2,3)吧?于是就计算出等于5,继续取,取出了int c =,然后就和5对接上了,就把值赋给c了。这只是一个小例子。
道理是这样,但是具体的存取可不是这样的哦。具体的存取应该分的非常细腻,应该是按照java语法的最小单位来往栈里存取的。说白了一句话,程序运行的时候的先后顺序是跟人大脑想问题的顺序一样的,但是代码不是按照这样的顺序写的(从左到右),于是就用栈结构来达到这样的效果。
这么说,明白了吗?
Q2: Java运算问题
我的建议是不要研究也不要写出这样的代码。这种代码在C/C++中是未定义行为。虽然我没有查到Java文档对此的定义,但鉴于大多数开发机器安装的都是Oracle的jdk,结果还是有参考性的。查看一下这段代码的bytecode:
解释一下每一行:
0: iconst_1 常数1入栈
1: istore_1 栈顶元素出栈并赋值给位置1的int型变量 (0~1对应Java代码:i=1)
2: iload_1 从位置1的int型变量中读出值并入栈
3: iinc 1,1 将位置1的int型变量自增1 (对应Java代码:++i)
4: iload_1 从位置1的int型变量中读出值并入栈
5: iadd 弹出栈顶两个int型变量并做加法,结果入栈 (对应Java代码:i+=i,结果为1+2=3)
6: istore_1 将第5步的结果写回变量i,此时i就变为3。
出栈入栈JAVA代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java进栈出栈函数、出栈入栈JAVA代码的信息别忘了在本站进行查找喔。







