1. 栈(Stack)定义
栈,是一种受限的线性表,后进先出 (LIFO)
其限制是仅允许在表的一端进行插入和删除运算,这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈,入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
从一个栈中删除元素又称为栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈的优势:最擅长操作栈顶;
但是操作栈底就比较麻烦,需要将栈顶一个个出栈。
2. 自定义栈结构
栈的实现可以使用数组,也可以使用链表,在这里我基于数组来实现栈结构。继承自定义的ArrayList类即可
我们规定:数组中最后一个元素的位置是栈顶,那么索引为0的位置就是栈底。
package com.henu.demo.stack;
import com.henu.demo.array.MyArrayList;
/**
* @Date: 2020/8/11 12:33
* @Author: Pangpd
* @FileName: MyStack.java
* @IDE: IntelliJ IDEA
* @Description:
*/
public class MyStack extends MyArrayList {
// 入栈
public void push(Object ele) {
super.addEle(ele);
}
// 出栈,删除栈顶元素
public void pop() {
super.deleteEleByIndex(super.getSize() - 1);
}
// 查询栈顶元素
public Object peek() {
return super.findEleByIndex(super.getSize() - 1);
}
}
3. 定义测试类
public class MyStackDemo {
public static void main(String[] args) {
MyStack myStack = new MyStack();
myStack.push("a");
myStack.push("b");
myStack.push("c");
System.out.println(myStack);
myStack.pop();
System.out.println(myStack);
System.out.println(myStack.peek());
}
}
输出:
[a,b,c]
[a,b]
b