队列的定义
队列也是一种线性表,只能在
头尾两端
进行操作,主要特点:
-
队尾:只能从
队尾添加
元素,叫做
入队(enQueue)
-
队头:只能从
队头移除
元素,叫做
出队(deQueue)
-
先进先出元素,
First In First Out(FIFO)
接口设计
根据
队列的定义
设计接口如下表:
函数 | 释义 |
---|---|
|
元素数量 |
|
是否为空 |
|
清空 |
|
入队 |
|
出队 |
|
获取队列的头元素 |
- E 是泛型类型
实现
看队列,需要操作它的头部和尾部,所以从探究过的
动态数组
、
链表
中选择时,可以优先选择
双向链表
。
public class Queue<E> {
private List<E> list = new LinkList<>();
/**
* 元素数量
* @return
*/
int size() {
return list.size();
}
/**
* 是否为空
* @return
*/
boolean isEmpty() {
return list.isEmpty();
}
/**
* 清空
*/
void clear() {
list.clear();
}
/**
* 入队
* @param element
*/
void enQueue(E element) {
list.add(element);
}
/**
* 出队
* @return
*/
E deQueue() {
return list.remove(0);
}
/**
* 获取队头元素
* @return
*/
E front() {
return list.get(0);
}
}
双端队列(Deque)
双端队列
是可以在队列的两头都可以操作入队和出队。所以增加了相关的接口
函数 | 释义 |
---|---|
|
从队尾入队 |
|
从队头出队 |
|
从队头出队 |
|
从队尾出队 |
|
获取队列的头元素 |
|
获取队列的尾元素 |
实现
public class Deque<E> {
private LinkList<E> list = new LinkList<>();
/**
* 元素数量
* @return
*/
int size() {
return list.size();
}
/**
* 是否为空
* @return
*/
boolean isEmpty() {
return list.isEmpty();
}
/**
* 清空
*/
void clear() {
list.clear();
}
/**
* 从队头入队
* @param element
*/
void enQueueFront(E element) {
list.add(0, element);
}
/**
* 从队尾入队
* @param element
*/
void enQueueRear(E element) {
list.add(element);
}
/**
* 从队头出队
*/
E deQueueFront() {
return list.remove(0);
}
/**
* 从队尾出队
*/
E deQueueRear() {
return list.remove(list.size() - 1);
}
/**
* 获取队列的头元素
* @return
*/
E front() {
return list.get(0);
}
/**
* 获取队列的尾元素
* @return
*/
E rear() {
return list.get(list.size() -1);
}
}
版权声明:本文为weixin_43636096原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。