队列
概念
队列: 只允许在表的一端进行插入,而在另一端删除元素的线性表,操作被限制;
队尾(rear):允许插入的一端;
队头(front):允许删除的一端;
空队:队内没有元素;
基本操作:front=rear
满队:队内填满元素;
基本操作:(rear+1)%maxSize=front
入队( enquence ):从队尾追加元素的操作;
基本操作:rear=(rear+1)%maxSize
出队(dequence):从队头删除元素的操作;
基本操作:front=(front+1)%maxSize
特点
先进先出,后进后出(FIFO)
图解
按实现分类
链式队列、顺序队列、循环队列;
何为“假溢出”,如何解决?
“假溢出”是顺序队列才存在的一种“满队”假象,如下图,初始时对头front和队尾rear都指向数组的第一个元素,然后在队尾入队a1、a2…a7元素,这时队尾指向数组的最后一个元素,接着从对头出队a1、a2元素,最后在队尾入队a8元素,此时将发生队尾指针溢出的现象就叫“假溢出”。
解决办法:采用循环队列;
适用场景
缓冲、银行排队、图的广度优先或树的层序遍历;
队列实现
package cn.hlmc.mfg.structure;
import java.util.LinkedList;
/**
* @autor 作者 E-mail:
* @date 创建时间:2020年9月6日 下午1:01:48 @version 1.0
* @parameter
* @since
* @return
*/
public class MyQueue<T> {
private LinkedList<T> ll=new LinkedList<T>();
public void enquence(T e) {
ll.addLast(e);
}
public T dequence() {
T e=ll.removeFirst();
System.out.println(e);
return e;
}
public T peek() {
return ll.peekFirst();
}
public int size() {
return ll.size();
}
public boolean isEmpty() {
return ll.isEmpty();
}
}
栈
概念
栈:只允许在表的一端进行插入和删除元素的线性表;
栈顶:允许进行插入和删除元素的一端;
入栈(push):允许在栈顶插入的操作;
出栈(pop): 允许在栈顶删除的操作;
特点
后进先出、先进后出(FILO)
图解
实现方式
数组、链表;
适用场景
函数递归、括号配对等