java数据结构与算法学习(四)
这次学习了栈。
一、编写ArrayStack类
package stack;
class ArrayStack {
//1.创建自己的栈属性
public int maxSize; //栈的最大值
public int[] stack; //用数组来代表栈
public int top = -1; //栈的顶部,初始值是-1
//2.构造器
public ArrayStack(int maxSize) {
this.maxSize = maxSize;
stack = new int[this.maxSize]; //初始化栈
}
//3.公有方法
//3.1判断是否栈满:top直接在最大值处了
public boolean isFull() {
// 因为数组栈是从0开始的
return top == maxSize -1;
}
//3.2判断是否栈空
public boolean isEmpty() {
return top == -1;
}
//3.3入栈
public void push(int value) {
//判断是否栈满
if(isFull()){
System.out.println("栈满,无法入栈!");
}
top++;
stack[top] = value;
}
//3.4出栈
public int pop() {
//判断是否栈空
if(isFull()) {
throw new RuntimeException("此栈为空,无法出栈!"); //因为空栈会报错,因此这里抛出错误。 又因为抛出异常后,系统停止运行,因此无需return
}
int value = stack[top];
top--;
return value;
}
//3.5遍历栈
public void showStack() {
//判断是否栈空
if(isEmpty()) {
System.out.println("此栈为空,无元素遍历!");
}
//因为栈是先进后出,因此需要从后面开始遍历
for(int i = top; i > -1; i--) {
// System.out.println(stack[i]);
System.out.printf("stack[%d] = %d\n", i, stack[i]);
}
}
}
二、ArrayStack类的测试方法
package stack;
import java.util.Scanner;
import stack.ArrayStack;
public class textArrayStack {
public static void main(String[] args) {
//1.new一个ArrayStack对象
ArrayStack stack = new ArrayStack(4);
String key = "";
boolean loop = true; //while循环的条件
Scanner scanner = new Scanner(System.in);
while(loop) {
System.out.println("请做出你的选择:");
System.out.println("show: 显示栈");
System.out.println("push: 进栈");
System.out.println("pop: 出栈");
System.out.println("exit: 退出");
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 value2 = stack.pop();
System.out.printf("出栈: %d\n", value2);
} catch(Exception e){
// System.out.println(e);
System.out.println(e.getMessage());
}
break;
case "exit":
scanner.close(); //必须要关掉scanner
loop = false; //跳出循环
break;
}
}
}
}
————————————————————————————————————————————
上一篇
java数据结构与算法学习(三)