顺序栈就是基于数组的栈
数组实现栈的思路
栈有两个主要功能,入栈和出栈
数组定长后习惯从index=0
开始向后遍历操作。那么可以以数组的头index=0
处作为栈底,而index=length-1
为最大栈顶位置。如果定义一个字段stackSize
作为当前栈的实际存储元素个数,那么入栈就是在数组的index=stackSize
放入元素,出栈就是在数组的index=stackSize-1
取出元素。
顺序栈的代码
import java.util.Arrays;
public class ArrayStack<T> {
private T[] array;
private int arrayLength;
private int stackSize;
public ArrayStack(int length) {
this.arrayLength = length;
this.array = (T[]) new Object[length];
}
public boolean push(T element) {
if (arrayLength == stackSize) {
System.out.println("stack is full");
return false;
}
array[stackSize++] = element;
return true;
}
public T pop() {
if (stackSize == 0) {
return null;
}
return array[--stackSize];
}
@Override
public String toString() {
T[] printArray = Arrays.copyOf(array, stackSize);
return "arrayStack" + Arrays.toString(printArray);
}
public static void main(String[] args) {
ArrayStack<String> stack = new ArrayStack<>(7);
System.out.println(stack);
stack.push("A");
System.out.println(stack);
stack.push("B");
System.out.println(stack);
stack.push("A");
System.out.println(stack);
stack.push("B");
System.out.println(stack);
stack.push("A");
System.out.println(stack);
stack.push("B");
System.out.println(stack);
stack.push("A");
System.out.println(stack);
stack.push("B");
System.out.println(stack);
stack.push("A");
System.out.println(stack);
stack.push("B");
System.out.println(stack);
stack.push("A");
System.out.println(stack);
stack.push("B");
System.out.println(stack);
stack.pop();
System.out.println(stack);
stack.pop();
System.out.println(stack);
stack.pop();
System.out.println(stack);
stack.pop();
System.out.println(stack);
stack.push("C");
System.out.println(stack);
stack.push("C");
System.out.println(stack);
}
}
执行结果
arrayStack[]
arrayStack[A]
arrayStack[A, B]
arrayStack[A, B, A]
arrayStack[A, B, A, B]
arrayStack[A, B, A, B, A]
arrayStack[A, B, A, B, A, B]
arrayStack[A, B, A, B, A, B, A]
stack is full
arrayStack[A, B, A, B, A, B, A]
stack is full
arrayStack[A, B, A, B, A, B, A]
stack is full
arrayStack[A, B, A, B, A, B, A]
stack is full
arrayStack[A, B, A, B, A, B, A]
stack is full
arrayStack[A, B, A, B, A, B, A]
arrayStack[A, B, A, B, A, B]
arrayStack[A, B, A, B, A]
arrayStack[A, B, A, B]
arrayStack[A, B, A]
arrayStack[A, B, A, C]
arrayStack[A, B, A, C, C]