栈作为一种存储数据的结构,它的原理是后进先出表(Last In First Out, 简称LIFO,有人说是先进后出道理一样别被绕晕233)其限制是仅允许在表的一端进行插入和删除运算,把对栈进行运算的一端称为栈顶,另一端称为栈底,当我们向一个栈插入新元素称为入栈或进栈此时调用Push()方法,从栈删除元素称为退栈或出栈,调用Pop()方法。就像子弹夹,先压入子弹的最后才射出。关于它的举例像括号匹配问题,迷宫问题等将在后面文章更新中列出。下面是是栈的代码(实际运用中,它是已封装好的类可直接调用,但我们也要了解掌握好它的思路)。
package csnd; public class Stackx { private int array[]; private int top; private int maxSize; public Stackx() { } public Stackx(int max) { top=-1; maxSize = max; array = new int[maxSize]; } public void push(int number) {//进栈,将每个元素压入栈底 array[++top] = number; } public int pop() {//出栈,可理解为删除,但不是真正意义上的让它消失,在内存中它还是在那里,只有当其他元素进来时才会将它覆盖 return array[top--];//这里要top--了,如果是--top那在出栈时判断是否为空会发生数组越界,因为--top会先减一 } public int peek() {//查看栈顶的元素 return array[top]; } public boolean isEmpty() { return (top == -1); } public boolean isFull() { return (top == maxSize-1); } public static void main(String[] args) { Stackx theStack = new Stackx(10); //用户在调用push()方法时,实际上还要调用isFull()方法判断栈是否是满的,这里省了 theStack.push(10); theStack.push(25); theStack.push(78); theStack.push(15); while(!theStack.isEmpty()) { int value = theStack.pop();//出栈,从栈顶逐个弹出元素 System.out.print(value+" "); } System.out.println(); } }//运行结果
15 78 25 10