数据结构 - 基于数组的队列

队列Queue

  *队列也是一种线性结构

  *相比于数组,队列对应的操作是数组的子集

  *只能从一端(队尾)添加元素,从另一端(队首)取出元素

  *队列是一种先进先出的数据结构(先到先得 First In First Out)

  

  基于数组的队列实现的源码如下:

package queue;

public interface Queue<E> {
    
    public void enqueue(E e);
    
    public E dequeue();
    
    public E getFront();
    
    public int getSize();
    
    public boolean isEmpty();
}

package queue;

import array.Array;

/**
 * 基于数组实现的队列
 *
 * @author zhangtianci
 */
public class ArrayQueue<E> implements Queue<E>{

    private Array<E> array;
    
    /**
     * 构造方法
     *
     * @param capacity
     * 队列的容量
     */
    public ArrayQueue(int capacity){
        array = new Array<>(capacity);
    }
    
    /**
     * 无参构方法,默认容量大小为10
     */
    public ArrayQueue(){
        array = new Array<>();
    }
    
    /**
     * 获取队列中元素的个数
     */
    @Override
    public int getSize() {
        return array.getSize();
    }
    
    /**
     * 判断队列是否为空,为空则返回true,反之false
     */
    @Override
    public boolean isEmpty() {
        return array.isEmpty();
    }
    
    /**
     * 返回队列的容量
     * @return
     */
    public int getCapacity(){
        return array.getCapacity();
    }
    
    
    /**
     * 向队尾添加一个 元素
     */
    @Override
    public void enqueue(E e) {
        array.addLast(e);
    }
    
    /**
     * 移出队首的元素并返回
     */
    @Override
    public E dequeue() {
        return array.removeFirst();
    }
    
    /**
     * 瞧一眼队首的元素
     */
    @Override
    public E getFront() {
        return array.getFirst();
    }
    
    @Override
    public String toString(){
        StringBuilder res = new StringBuilder();
        
        res.append(String.format("capacity = %d size = %d\n", getCapacity(),getSize()));
        res.append("Front: ");
        res.append('[');
        for (int i = 0; i < getSize(); i++) {
            res.append(array.get(i));
            if (i != getSize() - 1) {
                res.append(", ");
            }
            
        }
        res.append(']');
        res.append("tail");
        
        return res.toString();
    }
    
    
}

  简单的时间复杂度分析:

  * void enqueue(E e) : O(1) 均摊

  *E dequeue() : O(n)

  *E getFront() : O(1)

  *int getSize() : O(1)

  *boolean isEmpty() : O(1)

猜你喜欢

转载自www.cnblogs.com/tc971121/p/10010562.html
今日推荐