首页 > 编程语言 >栈(Java代码实现)

栈(Java代码实现)

时间:2024-05-28 14:01:56浏览次数:25  
标签:Java 实现 代码 System stack int println top out



import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
		//测试一下ArrayStack 是否正确
		//先创建一个ArrayStack对象->表示栈(容量为10)
		ArrayStack stack = new ArrayStack(10);
		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("top:  访问栈顶元素 ");			
			System.out.println("请输入你的选择(比如输入“show”就会显示栈):");
			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;
			case"top":
				stack.top();
			default:
				break;
			}
		}
		
		System.out.println("程序退出~~~");
	}

}

//定义一个 ArrayStack 表示栈
class ArrayStack {
	private int maxSize; // 栈的大小
	private int[] stack; // 数组,数组模拟栈,数据就放在该数组
	private int top = -1;// top表示栈顶,初始化为-1
	
	//构造器
	public ArrayStack(int maxSize) {
		this.maxSize = maxSize;
		stack = new int[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;
		}
		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("栈空,没有数据~~");
			return;
		}
		//需要从栈顶开始显示数据
		for(int i = top; i >= 0 ; i--) {
			System.out.printf("stack[%d]=%d\n", i, stack[i]);
		}
	}
	//访问栈顶元素
	public void top() {
		if(isEmpty()) {
			System.out.println("栈空,没有数据~~");
			return;
		}
		System.out.println(stack[top]);
	}
	
}

//构造器

public ArrayStack(int maxSize) {

this.maxSize = maxSize;

stack = new int[maxSize];

}

//栈满

public boolean isFull() {

return top == maxSize - 1;

}

//栈空

public boolean isEmpty() {

return top == -1;

}

 //入栈



public void push(int value) {

//先判断栈是否满

if(isFull()) {

System.out.println("栈满");

return;

}

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("栈空,没有数据~~");

return;

}

//需要从栈顶开始显示数据

for(int i = top; i >= 0 ; i--) {

System.out.printf("stack[%d]=%d\n", i, stack[i]);

}

}

//访问栈顶元素

public void top() {

if(isEmpty()) {

System.out.println("栈空,没有数据~~");

return;

}

System.out.println(stack[top]);

}

标签:Java,实现,代码,System,stack,int,println,top,out
From: https://blog.csdn.net/2301_80484340/article/details/139264997

相关文章

  • 代码界的超级英雄:GitHub的奇幻冒险之旅
    GitHub简介GitHub是一个用于代码托管、版本控制和协作开发的平台。它于2008年2月8日由ChrisWanstrath、PJHyett和TomPreston-Werner创立,目前由微软拥有。GitHub是目前最流行的代码托管平台之一,拥有超过8000万个项目和超过2.7亿活跃用户。它被广泛用于各种软件开发项目,包括开......
  • 企业文件加密实现数据泄露防护
    在数字化时代,数据成为企业最宝贵的资产之一。然而,数据泄露事件频发,给企业带来了巨大的经济损失和声誉风险。为了保护企业的核心利益,实现数据泄露防护,企业必须采取有效的文件加密措施。一、数据泄露的严重性数据泄露不仅会导致商业机密的外泄,还可能引发以下严重后果:经济损失:重......
  • IP地址证如何实现HTTPS访问?(内网IP、公网IP)
    不能提供域名只能提供IP地址也可以通过部署特定的SSL证书来实现HTTPS访问,这一特定的SSL证书就是IP地址证书。市面上常见的SSL证书多为以域名申请的,以IP地址来申请的SSL证书相对较少见。下面是IP地址证书的申请方法和流程:1选择证书品牌选择能支持公网和内网IP申请SSL证......
  • java+Angular+Nginx微服务架构+VUE 基于SaaS云部署、云计算的区域医院云HIS系统源码
    java+Angular+Nginx微服务架构+VUE基于SaaS云部署、云计算的区域医院云HIS系统源码HIS系统:可以根据医院规模、个性流程定制个性化程序;以临床工作为核心,方便医生的临床医疗行为,提高医疗服务质量,能提供临床专科数据分析系统,可用于医疗评估、生物医学研究、教育和医疗保健管理......
  • ChatGPT结合ArcGIS,快速实现空间分析+制图+遥感数据处理
    在数字化和智能化的浪潮中,GIS(地理信息系统)和GPT(生成式预训练模型)的结合正日益成为推动科研、城市规划、环境监测等领域发展的关键技术。GIS以其强大的空间数据处理、先进的空间分析工具、灵活的地图制作与可视化能力、广泛的扩展性和定制性,成为地理信息科学的核心工具。它在多......
  • mybatis异常: Invalid value type for attribute 'factoryBeanObjectType': java.lang
    问题描述:  springboot3.2.0版本以上编写mapper报错解决方案: 排查mybatilsplus自带的mybatils-spring,重新引入1<dependency>2<groupId>com.baomidou</groupId>3<artifactId>mybatis-plus-boot-starter</artifactId>4......
  • Rust语言实现的去中心化AI网络节点
    一、概述去中心化和人工智能(AI)是两个极具潜力的发展方向。Gaia项目正是将这两者结合起来,创造了一个去中心化的AI网络节点。本文将深入探讨Gaia项目的技术细节,通过丰富的示例和详细描述,帮助读者全面理解并掌握该技术。二、什么是Gaia?Gaia是一个去中心化的人工智能网络,它旨......
  • 学习JavaScrip 中常见的6种数组方法
    学习JavaScrip中常见的6种数组方法1.find()方法2.forEach()方法3.join()方法4.map()方法5.reduce()方法6.filter()方法1.find()方法find()方法取得数组中第一个满足回调函数中指定条件的元素。如果没有元素满足条件,这个方法返回undefined。下面的例子能够帮助你......
  • 基于Python的量子遗传算法实现(免费提供全部源码)
    下载地址如下:基于Python的量子遗传算法实现(免费提供全部源码)资源-CSDN文库项目介绍项目背景随着量子计算和人工智能技术的迅猛发展,量子遗传算法(QuantumGeneticAlgorithm,QGA)作为一种结合量子计算和经典遗传算法的优化方法,受到了广泛关注。传统遗传算法在处理复杂优化问......
  • 基于SSM和VUE的五子棋手机网络对战游戏的设计与实现(免费提供全套java开源项目源码+论
    下载地址如下:【免费】基于SSM和VUE的五子棋手机网络对战游戏的设计与实现(免费提供全套java开源项目源码+论文)资源-CSDN文库项目介绍项目背景五子棋是一种古老且流行的棋类游戏,简单易学但变化无穷。随着移动互联网和智能手机的普及,手机端网络对战游戏的需求日益增长。为了满......