基于數(shù)組的循環(huán)隊列
/**
* 基于數(shù)組的循環(huán)隊列實現(xiàn)
*
* @param <E> 泛型
* @author ZhuZongxing
*/
public class LoopQueue<E> implements Queue<E> {
private E[] data;
private int front;
private int tail;
private int size;
public LoopQueue(int capacity) {
data = (E[]) new Object[capacity + 1];
front = 0;
tail = 0;
size = 0;
}
public LoopQueue() {
this(10);
}
public int getCapacity() {
return data.length - 1;
}
@Override
public int getSize() {
return size;
}
@Override
public boolean isEmpty() {
return tail == front;
}
@Override
public void enQueue(E e) {
if ((tail + 1) % data.length == front) {
resize(2 * getCapacity());
}
data[tail] = e;
tail = (tail + 1) % data.length;
size++;
}
private void resize(int newCapacity) {
E[] newData = (E[]) new Object[newCapacity];
for (int i = 0; i < getSize(); i++) {
newData[i] = data[(i + front) % data.length];
}
data = newData;
front = 0;
tail = getSize();
}
@Override
public E deQueue() {
if (isEmpty()) {
throw new IllegalArgumentException("隊列中沒有數(shù)據(jù)了!");
}
E ret = data[front];
front = (front + 1) % data.length;
size--;
if (size == getCapacity() / 4 && getCapacity() / 2 != 0) {
resize(getCapacity() / 2);
}
return ret;
}
@Override
public E getFront() {
return data[front];
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(String.format("LoopQueue: Capacity: %d , Size: %d \nfront [", getCapacity(), getSize()));
for (int i = front; i != tail; i = (i + 1) % data.length) {
sb.append(data[i]);
if (tail != (i + 1) % data.length) {
sb.append(", ");
}
}
sb.append("] tail");
return sb.toString();
}
}
基于鏈表的隊列實現(xiàn)
package queue;
/**
* 基于鏈表的隊列實現(xiàn)
*
* @param <E> 泛型
* @author ZhuZongxing
*/
public class LinkedListQueue<E> implements Queue<E> {
private class Node {
public E e;
public Node next;
public Node(E e) {
this(e, null);
}
public Node(E e, Node next) {
this.e = e;
this.next = next;
}
@Override
public String toString() {
return e.toString();
}
}
private Node head, tail;
private int size;
public LinkedListQueue() {
head = null;
tail = null;
size = 0;
}
@Override
public int getSize() {
return size;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public void enQueue(E e) {
if (tail == null) {
tail = new Node(e);
head = tail;
} else {
tail.next = new Node(e);
tail = tail.next;
}
size++;
}
@Override
public E deQueue() {
if (isEmpty()) {
throw new IllegalArgumentException("隊列中已經(jīng)沒有元素了?。。?);
}
Node retNode = head;
head = head.next;
retNode.next = null;
if (head == null) {
tail = null;
}
size--;
return retNode.e;
}
@Override
public E getFront() {
if (isEmpty()) {
throw new IllegalArgumentException("隊列中已經(jīng)沒有元素了?。?!");
}
return head.e;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("LinkedListQueue: Front [");
Node curNode = this.head;
while (curNode != null) {
sb.append(curNode.e + "-->");
curNode = curNode.next;
}
sb.append("Null] Tail");
return sb.toString();
}
public static void main(String[] args) {
LinkedListQueue<Integer> linkedListQueue = new LinkedListQueue<>();
for (int i = 0; i < 10; i++) {
linkedListQueue.enQueue(i);
}
System.out.println(linkedListQueue);
linkedListQueue.deQueue();
System.out.println(linkedListQueue);
System.out.println(linkedListQueue.getFront());
}
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。