zoukankan      html  css  js  c++  java
  • 数据结构与算法-基础(五)队列(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);
    	}
    }
    
  • 相关阅读:
    python开发第二十六天CMDB
    python模块(requests,logging)
    python自动开发之第二十五天
    python自动开发之第二十四天(Django)
    python自动开发之第二十三天(Django)
    python自动开发之第二十二天
    python自动开发之第二十一天
    python自动开发之(ajax)第二十天
    python自动开发之(django)第十九天
    python自动开发之第十八天
  • 原文地址:https://www.cnblogs.com/shsuper/p/15332642.html
Copyright © 2011-2022 走看看