✎ 栈(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();
}
}