栈的定义
栈数据特点:先进后出,后进先出
定义栈体
实现入栈方法push()
实现出栈方法pop()
实现遍历栈信息方法stackList()
import javax.management.RuntimeErrorException;
/*
* 栈体。
* 实现判断栈满isFull,栈空isEmpty
* 入栈push,出栈pop
* 遍历 stackList
*/
public class stackBody {
private int maxSize;//栈的容量
private int top=-1;//栈底指针
private int[] stackArr=null;//栈体数组
/*
* 构造器,输入栈容量
*/
public stackBody(int maxSize) {
this.maxSize=maxSize;
this.stackArr=new int[maxSize];
}
/*
* 判断栈满
*/
public boolean isFull() {
return top==maxSize-1;
}
/*
* 判断栈空
*/
public boolean isEmpty() {
return top==-1;
}
/*
* 入栈
*/
public void push(int stackDate) {
//判断是否栈满
if(isFull()) {
System.out.println("栈满");
return;
}
//栈未满,执行入栈,尾指针top上移
top++;
stackArr[top]=stackDate;
}
/*
* 出栈
*/
public int pop() {
//先判断是否栈空
if(isEmpty()) {
throw new RuntimeException("栈空");
}
//栈非空,执行出栈
int stackDate=stackArr[top];
top--;
return stackDate;
}
/*
* 遍历
*/
public void satckList() {
//先判断是否栈空
if(isEmpty()) {
throw new RuntimeException("栈空");
}
for(int i=top+1;i>0;i--) {
System.out.printf("stackArr[%d]=%d\n",i,stackArr[i]);
}
}
}
测试类
package 栈stack;
import java.util.Scanner;
/*
* 测试类
*/
public class text {
public static void main(String[] args) {
boolean loop=true;
Scanner scanner=new Scanner(System.in);
stackBody stack=new stackBody(5);
while(loop) {
System.out.println("输入exit,退出程序");
System.out.println("输入show,显示栈数据");
System.out.println("输入push,执行入栈操作");
System.out.println("输入pop,执行出栈操作");
System.out.println("------------------------------------------------");
String key = scanner.next();
switch(key) {
case "exit":
scanner.close();//关闭scanner,避免数据泄露
loop=false;
System.out.println("退出程序成功");
break;
case "show":
stack.satckList();
break;
case "push":
System.out.println("请输入:");
int stackDate=scanner.nextInt();
stack.push(stackDate);
break;
case "pop":
stack.pop();
}
}
}
}
测试结果