一、代码如下
public class SequenceStack{ final int MaxSize=10; private T[] stackArray; private int top; //初始化栈 public SequenceStack(){ top = -1; stackArray = (T[]) new Object[MaxSize]; } public SequenceStack(int n){ if (n<=0){ System.out.println("栈长度不合法"); System.exit(1); } top = -1; stackArray = (T[]) new Object[n]; } //在栈顶位置插入一个新元素 public void push(T obj){ if (top == stackArray.length-1){ T[] p = (T[]) new Object[top*2 + 2]; for (int i = 0;i<=top;i++){ p[i] = stackArray[i]; } stackArray = p; } top++; stackArray[top] = obj; } //删除栈顶元素 public T pop( ){ if (top == -1){ System.out.println("空栈无法执行弹栈操作"); return null; } top--; return stackArray[top+1]; } //取栈顶数据元素 public T getHead(){ if (top == -1){ System.out.println("空栈无法取出栈顶元素"); return null; } return stackArray[top]; } //判断当前栈是否为空 public boolean isEmpty( ){ return top == -1; } //求出栈中数据元素的个数 public int size(){ return top + 1; } //依次访问栈中每个元素并输出 public void nextOrder(){ for (int i = top;i >= 0;i--){ System.out.println(stackArray[i]); } } //销毁一个已存在的栈 public void clear(){ top = -1; } }
二、测试代码如下
public class testSequenceStack {
public static void main(String[] args) {
SequenceStack stack = new SequenceStack<>();
int[] a = {1,4,6,23,45,78,25};
for (int i = 0;i < a.length;i++){
//执行压栈操作
stack.push(a[i]);
}
System.out.println("原始栈内数据为:");
stack.nextOrder();
//弹栈操作
stack.pop();
System.out.println("执行弹栈后栈内数据为:");
stack.nextOrder();
System.out.println("当前栈顶元素为:"+stack.getHead());
System.out.println("当前栈为"+stack.isEmpty());//false意为非空
System.out.println("当前栈的长度为:"+stack.size());
stack.clear();
stack.getHead();
}
}
三、总结
顺序栈本质是一种连续存储空间且只在栈顶进行相关操作的线性表,重点把握对top指针的操作。



