栈作为一种存储数据的结构,它的原理是后进先出表(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