栈是一种先进后出的线性数据结构,只能对它的一端操作,类似于枪械的弹夹。据此可以用一个数组来实现堆栈。具体方法是:用指向第一个元素(栈底)的base下标,和指向最后一个元素(栈顶)的top下标实现。两个下标之间的元素才是栈中元素,所以入栈包含对数组元素赋值,和对下标top和base的操作(base只有空栈时才操作)。出栈只是操作两个下标,并不是真正删除数组中元素。另外,入栈时数组容量不够,入栈操作中要有动态增加数组容量的方法,具体实现见另一篇博文: Java数组动态增加容量。源码如下: public class StdNStack { private int base,top; private final int inicap=4,step=30;//堆栈初始容量和增加的步长 private Object[] sArray; public StdNStack()//堆栈初始化,空栈 { sArray=new Object[inicap]; base=top=-1; } boolean isEmpty() { return base==-1; } void push(Object el) { if(base==-1) base=0; else if(top==sArray.length-1) enlarge(); sArray[++top]=el; } void enlarge() { Object[] dest=new Object[sArray.length+step]; System.arraycopy(sArray, base, dest, 0, sArray.length); sArray=dest; } void clear() { base=top=-1; } Object pop() { Object tmp=sArray[top]; if(top==base) top=base=-1; else top--; return tmp; } Object getTop() { return sArray[top]; } void printAll()//自栈底向上打印 { if(!isEmpty()) { for(int i=base;i<top+1;i++) System.out.print(sArray[i]+" "); } else System.out.println("栈已空");//格式需要 System.out.println();//格式需要 } public static void main(String[] args) { StdNStack sk=new StdNStack(); sk.push(1); sk.push(2); sk.push(3); sk.push(4); System.out.println("栈中元素:"); sk.printAll(); sk.pop(); System.out.println("出栈一次后栈中元素:"); sk.printAll(); sk.push(4); System.out.println("原始容量为:"+sk.sArray.length); sk.push(5);//需要扩容 sk.push(6); sk.push(7); sk.push(8); System.out.println("扩容增加元素后栈中内容为:"); sk.printAll(); System.out.println("扩容后容量为:"+sk.sArray.length); sk.clear(); System.out.println("清除元素后,元素后栈中内容为:"); sk.printAll(); } }