Java中使用数组模拟栈的压栈和弹栈
2021/4/11 20:56:10
本文主要是介绍Java中使用数组模拟栈的压栈和弹栈,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java中使用数组模拟栈的压栈和弹栈
栈stack的知识
栈是一种数据结构
压栈:将元素放入栈中
弹栈:将元素移除栈中
栈帧:指向栈顶元素
栈顶:栈最上面的那个元素
特点:先进后出,后进先出
Java实现
MyStack类
package com.tqw_zg.stack; //提供一个数组来存储栈中的元素 //Object[] object; // 栈帧(永远指向栈顶部的元素) // 每加1个元素,栈帧+1 // 每减1个元素,栈帧-1 // 构造方法 // 构造方法是不是应该给一维数组一个初始化容量。 public class MyStack {// 栈类 private Object[] object;//数组,模拟栈 private int index = -1;//栈帧 public MyStack() {//无参构造方法,直接赋数组大小为10 this.object = new Object[10];//创建大小为10的Object类的数组,课储存各种类型的数据 } public MyStack(int num) {//有参构造方法,传入一个数,作为数组的大小 this.object = new Object[num];//创建大小为num的Object类的数组,课储存各种类型的数据 } //setter and getter public Object[] getObject() { return object; } public void setObject(Object[] object) { this.object = object; }
压栈
// push方法(push方法压栈) // 压栈表示栈中多一个元素。 // 但是栈如果已满,压栈失败。 // 这个方法的参数以及返回值类型自己定义。 public void push(Object obj) { if (getObject().length - 1 <= index) { System.out.println("压栈失败"); } else { object[++index] = obj;//0,1,2,3,4,5,6 System.out.println("压栈成功"); if (getObject().length - 1 == index) { System.out.println("栈满了"); } } }
弹栈
// pop方法(pop方法弹栈) // 弹栈表示栈中少一个元素。 // 但是栈如果已空,弹栈失败。 // 这个方法的参数以及返回值类型自己定义。 public void pop() { if (index == -1) { System.out.println("弹栈失败"); } else { object[index--] = null; System.out.println("弹栈成功"); if (index == -1) { System.out.println("栈空了"); } } }
总的MyStack类
public class MyStack {// 栈类 private Object[] object;//数组,模拟栈 private int index = -1;//栈帧 public MyStack() {//无参构造方法,直接赋数组大小为10 this.object = new Object[10];//创建大小为10的Object类的数组,课储存各种类型的数据 } public MyStack(int num) {//有参构造方法,传入一个数,作为数组的大小 this.object = new Object[num];//创建大小为num的Object类的数组,课储存各种类型的数据 } //setter and getter public Object[] getObject() { return object; } public void setObject(Object[] object) { this.object = object; } //压栈 public void push(Object obj) { if (getObject().length - 1 <= index) { System.out.println("压栈失败"); } else { object[++index] = obj;//0,1,2,3,4,5,6 System.out.println("压栈成功"); if (getObject().length - 1 == index) { System.out.println("栈满了"); } } } //弹栈 public void pop() { if (index == -1) { System.out.println("弹栈失败"); } else { object[index--] = null; System.out.println("弹栈成功"); if (index == -1) { System.out.println("栈空了"); } } } }
测试代码
package com.tqw_zg.stack; public class Test { public static void main(String[] args) { MyStack myStack=new MyStack(7); myStack.push("i"); myStack.push(" love"); myStack.push(" tqw "); myStack.push(3); myStack.push("b"); myStack.push(4); myStack.push("c"); myStack.push(1); for(int i=0;i<7;i++) { System.out.print(myStack.getObject()[i]); } System.out.println(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); myStack.pop(); } }
测试结果
压栈成功 压栈成功 压栈成功 压栈成功 压栈成功 压栈成功 压栈成功 栈满了 压栈失败 i love tqw 3b4c 弹栈成功 弹栈成功 弹栈成功 弹栈成功 弹栈成功 弹栈成功 弹栈成功 栈空了 弹栈失败 弹栈失败 Process finished with exit code 0
感悟
1、在创建数组时必须先给定数组的大小;
2、Object类的数组可以输入任何类型的数据;
3、一般栈帧初始化为-1
这篇关于Java中使用数组模拟栈的压栈和弹栈的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27数据结构与算法面试题详解及练习
- 2024-12-27网络请求面试题详解与实战
- 2024-12-27数据结构和算法面试真题详解与实战教程
- 2024-12-27网络请求面试真题解析与实战教程
- 2024-12-27数据结构和算法大厂面试真题详解与实战指南
- 2024-12-27TS大厂面试真题解析与应对策略
- 2024-12-27TS大厂面试真题详解与解析
- 2024-12-27网站安全入门:如何识别和修复漏洞
- 2024-12-27SQL注入基础教程
- 2024-12-27初学者指南:理解和修复跨域漏洞