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,Object,object,push,public 来源: https://blog.csdn.net/qq_47660615/article/details/115605485