用数组实现栈(java)

数据结构与算法学习(java)-栈

题目一:用数组实现栈

  • 要求:
    * 用数组形式实栈的基本功能,入栈,出栈及显示栈元素功能
  • 思路:
    1.准备一个数组int[] stack;需要变量maxSize表示栈的大小
    2.入栈(push):需要一个变量(top)来表示栈顶,初始化为-1;当有数据入栈时,top增加,同时将数据传递给stack[top].
    3.出栈(pop):需要定义变量来接住stack[top],然后top减少,同时返回该变量.
    4.特殊情况:入栈前需要判断栈是否已满;出栈时需要判断栈是否为空.
//倒包
import java.util.Scanner;
public class ArrayToStackDemo {
	public static void main(String[] args) {
		//Test
		//创建一个栈
		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.showStack();
					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) {
					//直接获取异常信息并打印即可
						System.out.println(e.getMessage());
					}
					break;
				case "exit":
					//首先关闭键盘
					scanner.close();
					//将循环标志位置为false
					loop=false;
					break;
			}
		}
		System.out.println("程序退出");
	}

}
class ArrayStack{
	private int maxSize;//栈的大小
	private int[] stack;//数组,栈的数据放在该数组中
	private int top=-1;//栈顶的指针
	//构造器
	public ArrayStack(int maxSize){
		this.maxSize=maxSize;
		//数组初始化大小 
		this.stack=new int[maxSize];
	}
	//栈是否已满判断
	public boolean isFull(){
		return top==maxSize-1;
	}
	//栈是否为空判断
	public boolean isEmpty(){
		return top==-1;
	}
	//入栈
	//参数:入栈的值
	public void push(int value){
		//判断栈是否已满
		if(this.isFull()){
			System.out.println("此栈已满");
		    return;
		}
		top++;
		stack[top]=value;
	}
	//出栈
	public int pop(){
		//判断是否为空
		if(this.isEmpty()){
			//System.out.println("此栈为空栈");
			//因为无法返回具体的值,但是函数又是需要返回的类型,因此用抛出异常的形式表达
			throw new RuntimeException("此栈为空栈");
		}
		int value=stack[top];
		top--;
		return value;
	}
	//显示栈
	//遍历时,需要从栈顶开始
	public void showStack(){
		//先判断是否为空
		if(this.isEmpty()){
			System.out.println("此栈为空");
		    return;
		}
		//遍历栈
		for(int i=top;i>=0;i--){
			System.out.println(stack[i]);
		}
	}
}

总结:
1.在出栈的方法中,因为方法需要返回值,因此在判断为空的情况下,我们无法返回具体的值,可以用抛出异常的方式来提醒:throw new RuntimeException("…");而在调用的过程中,因此存在异常,我们需要采用try{}catch的方式来调用即可.
2.[暂时忘记,后续补充]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值