Java实现顺序栈原理解析
这篇文章主要介绍了Java实现顺序栈原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
什么是栈
1.栈的英文是stack
2.栈是一个先入后出的有序列表
3.栈是限制线性表元素的插入和删除只能在线性表的同一端进行的一种特殊的线性表,允许插入和删除的一端是,为变化的一端,成为栈顶,另外的一端为固定的一端为栈底
4.栈的定义可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除的情况刚好相反,最后放入的元素先删除,最先放入的元素后删除
栈的应用场景
1.子程序的调用,在跳向子程序之前会先将下一条指令的地址存放在堆栈中,直到子程序执行后再将地址取出,最后回到原来的程序之中
2.递归的调用,和子程序的调用类似,只是出了存储下一个指令的地址外,也将参数、区域变量、等数据压入栈中
3.表达式的转换与求值
4.二叉树的遍历
5.图形的深度优先搜索
代码
栈
packagestack;
publicclassArrayStack{
privateintmaxSize;//最大值
privateint[]stack;//栈
privateinttop=-1;//栈顶
//构造器
publicArrayStack(intmaxSize){
this.maxSize=maxSize;
stack=newint[this.maxSize];
}
//栈满
publicbooleanisFull(){
returntop==maxSize-1;
}
//栈空
publicbooleanisEmpty(){
returntop==-1;
}
//入栈-push
publicvoidpush(intvalue){
//先判断是否栈满了
if(isFull()){
System.out.println("栈已经满了~");
return;
}else{
top++;
stack[top]=value;
}
}
//出栈-pop
publicintpop(){
if(isEmpty()){
thrownewRuntimeException("栈已经空了~");
}
intvalue=stack[top];
top--;
returnvalue;
}
//遍历栈
publicvoidlist(){
if(isEmpty()){
System.out.println("栈空,没有数据~");
}
for(inti=top;i>=0;i--){
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
}
测试类
packagestack;
importjava.util.Scanner;
publicclassTestArrayList{
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
ArrayStackstack=newArrayStack(4);
Stringkey="";
booleanloop=true;
Scannerscanner=newScanner(System.in);
while(loop){
System.out.println("show:显示栈");
System.out.println("exit:退出测试");
System.out.println("push:压栈");
System.out.println("pop:出栈");
System.out.println("请输入你的选择:");
key=scanner.next();
switch(key){
case"show":
stack.list();
break;
case"push":
System.out.println("请输入一个数:");
intvalue=scanner.nextInt();
stack.push(value);
break;
case"pop":
try{
intres=stack.pop();
System.out.printf("出栈的元素为:%d\n",res);
}catch(Exceptione){
//TODO:handleexception
System.out.println(e.getMessage());
}
break;
case"exit":
scanner.close();
loop=false;
break;
default:
break;
}
}
System.out.println("程序退出!");
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。