您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法-基础(五)队列(Qeque)

2021-09-24 21:07 656 查看

队列的定义

队列也是一种线性表,只能在头尾两端进行操作,主要特点:

  • 队尾:只能从队尾添加元素,叫做入队(enQueue)
  • 队头:只能从队头移除元素,叫做出队(deQueue)
  • 先进先出元素,First In First Out(FIFO)

接口设计

根据队列的定义设计接口如下表:

函数 释义
int size()
元素数量
boolean isEmpty()
是否为空
void clear()
清空
void enQueue(E element)
入队
E dequeue()
出队
E front()
获取队列的头元素
  • 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)

双端队列是可以在队列的两头都可以操作入队和出队。所以增加了相关的接口

函数 释义
void enQueueRear(E element)
从队尾入队
E deQueueFront()
从队头出队
void enQueueFront(E element)
从队头出队
E deQueueRear()
从队尾出队
E front()
获取队列的头元素
E rear()
获取队列的尾元素

实现

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: