✎ 栈(Stack)
📌 什么是栈 ?
• 栈也是一种线性数据结构.
• 例如在一个死胡同里, 有5辆汽车(1~5)依次停放, 但当汽车需要倒出时我们发现, 最先进去的汽车1需要等待汽车5~汽车2依次倒出后才能出来;由此我们可以得出栈的特点:先进后出(后进先出)
这里的死胡同其实就相当于我们的栈,汽车就是需要操作的数据,将数据存放到栈中的过程称为入栈(也称压栈push),拿出的过程称为出栈(也称弹栈pop) .
• 栈的底部成为栈底,顶部也就是操作数据的入口称为栈顶 .
注意:我们操作数据是在栈顶处操作
🎀 创建Stack接口,并实现功能
public interface Stack<T> { //压栈 void push(T ele); //弹栈 T pop(); //查找栈顶元素 T peek(); //是否为空 boolean isEmpty(); //栈中元素个数 int getSize(); }
🎀 创建一个类,对接口中的抽象方法进行重写,将功能具体化
import com.learn.study1.MyArray; public class Arraystack<T> implements Stack<T>{ private MyArray<T> date; private int size; //构造函数(初始化) public Arraystack(){ this.size = 0; this.date = new MyArray() ; } @Override public void push(T ele) { this.date.addTail(ele); this.size++; } @Override public T pop() { if (isEmpty()) { throw new IllegalArgumentException("stack is null"); } T ele = this.date.removeTail(); this.size--; return ele; } @Override public T peek() { if (isEmpty()) { throw new IllegalArgumentException("stack is null"); } return this.date.getLastElement(); } @Override public boolean isEmpty() { return this.size==0; } @Override public int getSize() { return this.size; } @Override public String toString() { return this.date.toString(); } }
✎ 队列(Queue)
📌 什么是队列 ?
• 队列就是排队,例如我们排队打饭,我们从对尾排队,打完饭后从对首离开。
特点:先进先出 FILO(只能从对尾进,对首出)
🎀 创建Queue接口,并实现功能
public interface Queue<T> { //入队 void offer(T ele); //出队 T poll(); //判断是否为空 boolean isEmpty(); //获取元素个数(长度) int getSize(); //获取对首元素 T getFront(); }
🎀 创建一个类,对接口中的抽象方法进行重写,将功能具体化
import com.learn.study1.MyArray; public class ArrayQueue<T> implements Queue<T> { //数据容器 private MyArray<T> date; //元素个数 private int size; //初始化(构造方法) public ArrayQueue() { this.size = 0; this.date = new MyArray<>(20); } @Override public void offer(T ele) {//入队 this.date.addTail(ele); this.size++; } @Override public T poll() {//出队 if (isEmpty()) { throw new IllegalArgumentException("queue is empty!"); } T res = this.date.getFirstElement(); this.size--; return res; } @Override public boolean isEmpty() { return this.size == 0; } @Override public int getSize() { return this.size; } @Override public T getFront() { if (isEmpty()) { throw new IllegalArgumentException("queue is empty!"); } return this.date.getFirstElement(); } }