Java实现顺序栈原理解析
作者:梦小冷 时间:2021-08-26 15:47:16
这篇文章主要介绍了Java实现顺序栈原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
什么是栈
1.栈的英文是stack
2.栈是一个先入后出的有序列表
3.栈是限制线性表元素的插入和删除只能在线性表的同一端进行的一种特殊的线性表,允许插入和删除的一端是,为变化的一端,成为栈顶,另外的一端为固定的一端为栈底
4.栈的定义可知,最先放入栈中的元素在栈底,最后放入的元素在栈顶,而删除的情况刚好相反,最后放入的元素先删除,最先放入的元素后删除
栈的应用场景
1.子程序的调用,在跳向子程序之前会先将下一条指令的地址存放在堆栈中,直到子程序执行后再将地址取出,最后回到原来的程序之中
2.递归的调用,和子程序的调用类似,只是出了存储下一个指令的地址外,也将参数、区域变量、等数据压入栈中
3.表达式的转换与求值
4.二叉树的遍历
5.图形的深度优先搜索
代码
栈
package stack;
public class ArrayStack {
private int maxSize;//最大值
private int[] stack;//栈
private int top=-1;//栈顶
//构造器
public ArrayStack(int maxSize) {
this.maxSize=maxSize;
stack=new int[this.maxSize];
}
//栈满
public boolean isFull() {
return top==maxSize-1;
}
//栈空
public boolean isEmpty() {
return top==-1;
}
//入栈-push
public void push(int value) {
//先判断是否栈满了
if(isFull()) {
System.out.println("栈已经满了~");
return;
}else {
top++;
stack[top]=value;
}
}
//出栈-pop
public int pop() {
if(isEmpty()) {
throw new RuntimeException("栈已经空了~");
}
int value=stack[top];
top--;
return value;
}
//遍历栈
public void list() {
if(isEmpty()) {
System.out.println("栈空,没有数据~");
}
for(int i=top;i>=0;i--) {
System.out.printf("stack[%d]=%d\n",i,stack[i]);
}
}
}
测试类
package stack;
import java.util.Scanner;
public class TestArrayList {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayStack stack=new ArrayStack(4);
String key="";
boolean loop=true;
Scanner scanner=new Scanner(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("请输入一个数:");
int value=scanner.nextInt();
stack.push(value);
break;
case "pop":
try {
int res=stack.pop();
System.out.printf("出栈的元素为:%d\n",res);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
}
break;
case "exit":
scanner.close();
loop=false;
break;
default:
break;
}
}
System.out.println("程序退出!");
}
}
来源:https://www.cnblogs.com/mengxiaoleng/p/11620995.html
标签:java,实现,顺序,栈
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
java判断今天,昨天,前天,不能用秒间隔的简单实例
2021-07-27 23:01:35
Java案例使用比较排序器comparator实现成绩排序
2023-10-16 01:37:24
java.lang.Void类源码解析
2022-07-15 04:07:46
Java中StringTokenizer的用法简介汇总
2023-05-29 00:52:24
Java序列化常见的三个问题
2023-11-21 08:40:52
Java分页查询--分页显示(实例讲解)
2023-02-05 11:07:15
Java实现word/pdf转html并在线预览
2022-09-09 09:16:49
![](https://img.aspxhome.com/file/2023/5/65635_0s.png)
MVVM和MVVMLight框架介绍及在项目中的使用详解
2021-07-29 06:59:10
![](https://img.aspxhome.com/file/2023/5/106875_0s.png)
Java Volatile 变量详解及使用方法
2023-03-13 13:27:10
使用SpringMVC响应json格式返回的结果类型
2022-06-29 20:29:46
![](https://img.aspxhome.com/file/2023/7/90957_0s.png)
Unity实战之FlyPin(见缝插针)小游戏的实现
2022-05-21 19:46:31
![](https://img.aspxhome.com/file/2023/1/69201_0s.jpg)
java日期工具类实例分享
2023-05-17 17:50:40
Android自定义控件ListView下拉刷新的代码
2023-04-07 23:51:06
![](https://img.aspxhome.com/file/2023/9/97859_0s.png)
Silverlight将图片转换为byte的实现代码
2022-03-07 11:07:15
![](https://img.aspxhome.com/file/2023/6/100086_0s.png)
Android多媒体应用使用MediaPlayer播放音频
2023-07-08 15:37:52
![](https://img.aspxhome.com/file/2023/7/102607_0s.jpg)
springboot使用单元测试实战
2023-05-17 11:55:29
详解Java设计模式之桥接模式
2022-08-05 23:27:08
![](https://img.aspxhome.com/file/2023/3/83053_0s.png)
Spring的连接数据库以及JDBC模板(实例讲解)
2023-03-21 05:56:36
![](https://img.aspxhome.com/file/2023/1/63101_0s.png)
springboot自定义异常视图过程解析
2023-06-29 09:44:36
![](https://img.aspxhome.com/file/2023/3/71173_0s.png)
SpringMVC中的Model对象用法说明
2022-12-15 02:24:34