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

队列的定义

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

  • 队尾:只能从队尾添加元素,叫做入队(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);
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我为双鱼狂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值