數據結構 - 基於數組的隊列
隊列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)
數據結構 - 基於數組的隊列