
栈(Stack)是限制只能在表的一端进行插入和删除操作的线性表。特点是后进先出(LIFO,Last In, First Out)。

那么生活中有哪些栈的例子呢?

不知道大家有没有用枪的时候注意过弹夹的设计没有,弹夹的结构就符合栈的特点,入栈(塞子弹),出栈(发射子弹),最先放进去的子弹一定是最后一个打出去的,弹夹就是一个栈的结构。
栈里的每一个元素称为一个frame,最上层的称为top frame。 栈只支持三种操作: pop, top, push pop, 取出最上层的元素,叫做出栈,又叫弹栈。 top,查看最上层元素,只是看看,不取出来。 push,将新元素放在栈的最上层,叫做入栈,又叫压栈。
然后就没有其他操作了,如果想要把第三层的元素取出来,就必需进行三次出栈操作。 就好比必须打三枪才能把第三颗子弹打出来。
代码实现 新建一个StackArray类(名字当然是自定义的) 里面需要三个属性,分别是栈数组array,栈顶指针top,栈容量size。
用构造函数初始化栈数组。
public class StackArray {
private int[] array;
private int top;
private int size;
public StackArray(int size){
array = new int[size];
this.size = size;
top = -1;
}
}
压栈方法push()
// 压栈
public void push(int element){
if(top == size-1){
System.out.println("栈满了");
return;
}
array[++top] = element;
}
弹栈方法pop()
// 弹栈
public Integer pop(){
if(top == -1){
System.out.println("栈空了");
return null;
}
return array[top--];
}
查看栈顶元素peek()
// 查看栈顶
public void peek(){
if(top == -1){
System.out.println("栈空了");
return;
}
System.out.println("栈顶元素为: "+array[top]);
}
测试一下吧~
public static void main(String[] args){
StackArray stack = new StackArray(100);
System.out.println("\n入栈 1 2 3 4 5");
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println("查看栈顶元素");
stack.peek();
System.out.println("\n出栈");
System.out.println("出栈元素为:"+ stack.pop());
System.out.println("出栈元素为:"+ stack.pop());
System.out.println("\n查看栈顶元素");
stack.peek();
}
输出结果
入栈 1 2 3 4 5
查看栈顶元素
栈顶元素为: 5
出栈
出栈元素为:5
出栈元素为:4
查看栈顶元素
栈顶元素为: 3
完整代码
public class StackArray {
private int[] array;
private int top;
private int size;
public StackArray(int size){
array = new int[size];
this.size = size;
top = -1;
}
// 压栈
public void push(int element){
if(top == size-1){
System.out.println("栈满了");
return;
}
array[++top] = element;
}
// 弹栈
public Integer pop(){
if(top == -1){
System.out.println("栈空了");
return null;
}
return array[top--];
}
// 查看栈顶
public void peek(){
if(top == -1){
System.out.println("栈空了");
return;
}
System.out.println("栈顶元素为: "+array[top]);
}
public static void main(String[] args){
StackArray stack = new StackArray(100);
System.out.println("\n入栈 1 2 3 4 5");
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
System.out.println("查看栈顶元素");
stack.peek();
System.out.println("\n出栈");
System.out.println("出栈元素为:"+ stack.pop());
System.out.println("出栈元素为:"+ stack.pop());
System.out.println("\n查看栈顶元素");
stack.peek();
}
}