您的位置:首页 > 理论基础 > 数据结构算法

数据结构:循环队列--Java实现

2014-03-08 17:47 806 查看
import java.util.Arrays;

public class LoopQueue<T> {
private int DEFAULT_SIZE = 10;
// 保存数组长度
private int capacity;
// 用于保存循环队列的数组
private Object[] elementData;
// 循环队列中的首元素
private int front;
// 循环队列中的尾元素
private int rear;

// 一默认数组长度创建存储数组
public LoopQueue() {
elementData = new Object[DEFAULT_SIZE];
capacity = DEFAULT_SIZE;
}

// 初始化元素创建循环队列
public LoopQueue(T element) {
this();
elementData[0] = element;
rear++;
}

// 指定长度及元素初始化循环队列
public LoopQueue(T element, int initsize) {
this.capacity = initsize;
elementData = new Object[initsize];
elementData[0] = element;
rear++;
}

// 判定队列是否为空
public boolean empty() {
return rear == front && elementData[rear] == null;
}

// 获取循环队列的大小
public int length() {
if (empty()) {
return 0;
}
return rear > front ? rear - front : capacity - (front - rear);
}

// 插入队列
public void add(T element) {
if (rear == front && elementData[front] != null) {
throw new IndexOutOfBoundsException("队列已满");
}
elementData[rear++] = element;
rear = rear == capacity ? 0 : rear;
}

// 队列移除
public T remove() {
if (empty()) {
throw new IndexOutOfBoundsException("队列已空");
}
T oldvalue = (T) elementData[front];
elementData[front++] = null;
front = front == capacity ? 0 : front;
return oldvalue;
}

// 返回队列元素
public T element() {
if (empty()) {
throw new IndexOutOfBoundsException("队列已空");
}
return (T) elementData[front];
}

// 清空循环队列
public void clear() {
Arrays.fill(elementData, null);
}

// 队列输出
public String toString() {
if (empty()) {
return "[]";
}
StringBuilder sb = new StringBuilder();
if (front < rear) {
sb.append("[");
for (int i = front; i < rear; i++) {
sb.append(elementData[i] + ",");
}
sb.append("]");
} else {

sb.append("[");
for (int i = front; i < capacity; i++) {
sb.append(elementData[i] + ",");
}
for (int i = 0; i < rear; i++) {
sb.append(elementData[i] + ",");
}
sb.append("]");

}
return sb.toString();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: