定义栈
/**
* className:Statck
*
* @author:zjl
* @version:0.1
* @date:2020/7/1512:22
* @since:jdk1.8
*/
public class Statck {
private int maxSize;//栈最大容量
private int top;//栈顶指针(始终指向栈顶的节点)
private Object[] stack;
public Statck(int maxSize) {
this.maxSize = maxSize;
this.stack = new Object[maxSize];
this.top = -1;
}
public int getMaxSize() {
return maxSize;
}
public void setMaxSize(int maxSize) {
this.maxSize = maxSize;
}
public int getTop() {
return top;
}
public void setTop(int top) {
this.top = top;
}
public Object[] getStack() {
return stack;
}
public void setStack(Object[] stack) {
this.stack = stack;
}
}
工具类(操作栈的相关方法)
/**
* className:Util
*
* @author:zjl
* @version:0.1
* @date:2020/7/1512:16
* @since:jdk1.8
*/
public class Util {
/**
* 入栈
* @param obj
* @param statck
* @return
*/
public boolean push(Object obj,Statck statck){
if(statck.getTop()==statck.getMaxSize()-1)//判断是否栈满
return false;
statck.setTop(statck.getTop()+1);
statck.getStack()[statck.getTop()] = obj;
return true;
}
/**
* 出栈
* @param statck
* @return
*/
public Object pop(Statck statck){
if(statck.getTop()==-1)//判断是否栈空
throw new RuntimeException("栈空,出栈失败!");
Object obj = statck.getStack()[statck.getTop()];
statck.setTop(statck.getTop()-1);
return obj;
}
/**
* 初始化栈
* @param statck
*/
public void initi(Statck statck){
for (int i = 0; i < statck.getTop(); i++) {
statck.getStack()[i] = null;
}
statck.setTop(-1);
}
/**
* 控制台打印栈
* @param statck
*/
public void show(Statck statck){
System.out.println("*************");
System.out.print("*");
for (int i = 0; i <=statck.getTop(); i++) {
System.out.print(statck.getStack()[i]+" ");
}
System.out.print("\n*************");
}
}
测试类
/**
* className:Test
*
* @author:zjl
* @version:0.1
* @date:2020/7/1512:58
* @since:jdk1.8
*/
public class Test {
public static void main(String[] args) {
//建立一个栈
Statck statck = new Statck(6);
//实例化工具类
Util util = new Util();
//进栈3个元素
util.push("1",statck);
util.push("2",statck);
util.push("3",statck);
//打印栈
System.out.println("===================进栈三次后栈状态=================");
util.show(statck);
//出栈两个元素
util.pop(statck);
util.pop(statck);
//打印栈
System.out.println("\n===================出栈两次次后栈状态=================");
util.show(statck);
//再进栈5次
util.push("4",statck);
util.push("5",statck);
util.push("6",statck);
util.push("7",statck);
util.push("8",statck);
//打印栈
System.out.println("\n=============再进栈五次次后栈状态(栈满)==============");
util.show(statck);
//尝试再进栈一个元素
util.push("0",statck);
//打印栈
System.out.println("\n====尝试再进栈一次次后栈状态(进栈失败,栈状态不变)====");
util.show(statck);
//清空栈(初始化)
util.initi(statck);
//打印栈
System.out.println("\n===================初始化栈(栈空)====================");
util.show(statck);
// //尝试再出栈一次
// util.pop(statck);//报出异常
}
}
测试结果(控制台显示)
栈空出栈结果