1. 程式人生 > >數據結構 - 基於數組的隊列

數據結構 - 基於數組的隊列

復雜 ray vat interface pri ast orm 一個 復雜度分析

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

數據結構 - 基於數組的隊列