码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-11-24 11:47:57      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:over   数据结构   capacity   efi   stringbu   数组   hang   判断   tca   

队列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)

 

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

标签:over   数据结构   capacity   efi   stringbu   数组   hang   判断   tca   

原文地址:https://www.cnblogs.com/tc971121/p/10010562.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!