问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用java语言设计顺序循环队列类

发布网友 发布时间:2022-04-30 17:24

我来回答

1个回答

热心网友 时间:2022-06-28 09:07

代码如下:

import java.io.Serializable;
import java.util.Arrays;

public class LoopQueue<T> implements Serializable {
/**
 * @Fields serialVersionUID : TODO
 */
private static final long serialVersionUID = -3670496550272478781L;

private int DEFAULT_SIZE = 10;

private int capacity;// 保存数组的长度

private Object[] elementData;// 定义一个数组用于保存循环队列的元素

private int front = 0;// 队头

private int rear = 0;// 队尾

// 以默认数组长度创建空循环队列
public LoopQueue() {
capacity = DEFAULT_SIZE;
elementData = new Object[capacity];
}

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

/**
 * 以指定长度的数组来创建循环队列
 * 
 * @param element
 *            指定循环队列中第一个元素
 * @param initSize
 *            指定循环队列底层数组的长度
 */
public LoopQueue(T element, int initSize) {
this.capacity = initSize;
elementData = new Object[capacity];
elementData[0] = element;
rear++;
}

// 获取循环队列的大小
public int size() {
if (isEmpty()) {
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 = rear == capacity ? 0 : rear;
}

// 移除队列
public T remove() {
if (isEmpty()) {
throw new IndexOutOfBoundsException("空队列异常");
}
// 保留队列的rear端的元素的值
T oldValue = (T) elementData[front];
// 释放队列的rear端的元素
elementData[front++] = null;
// 如果front已经到头,那就转头
front = front == capacity ? 0 : front;
return oldValue;
}

// 返回队列顶元素,但不删除队列顶元素
public T element() {
if (isEmpty()) {
throw new IndexOutOfBoundsException("空队列异常");
}
return (T) elementData[front];
}

// 判断循环队列是否为空队列
public boolean isEmpty() {
// rear==front且rear处的元素为null
return rear == front && elementData[rear] == null;
}

// 清空循环队列
public void clear() {
// 将底层数组所有元素赋为null
Arrays.fill(elementData, null);
front = 0;
rear = 0;
}

public String toString() {
if (isEmpty()) {
return "[]";
} else {
// 如果front < rear,有效元素就是front到rear之间的元素
if (front < rear) {
StringBuilder sb = new StringBuilder("[");
for (int i = front; i < rear; i++) {
sb.append(elementData[i].toString() + ", ");
}
int len = sb.length();
return sb.delete(len - 2, len).append("]").toString();
}
// 如果front >= rear,有效元素为front->capacity之间、0->front之间的
else {
StringBuilder sb = new StringBuilder("[");
for (int i = front; i < capacity; i++) {
sb.append(elementData[i].toString() + ", ");
}
for (int i = 0; i < rear; i++) {
sb.append(elementData[i].toString() + ", ");
}
int len = sb.length();
return sb.delete(len - 2, len).append("]").toString();
}
}
}

public static void main(String[] args) {
LoopQueue<String> queue = new LoopQueue<String>("aaaa", 3);
// 添加两个元素
queue.add("bbbb");
queue.add("cccc");
// 此时队列已满
System.out.println(queue);
// 删除一个元素后,队列可以再多加一个元素
queue.remove();
System.out.println("删除一个元素后的队列:" + queue);
// 再次添加一个元素,此时队列又满
queue.add("dddd");
System.out.println(queue);
System.out.println("队列满时的长度:" + queue.size());
// 删除一个元素后,队列可以再多加一个元素
queue.remove();
// 再次加入一个元素,此时队列又满
queue.add("eeee");
System.out.println(queue);
}
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
广东省考考哪3科 六个月宝宝缺铁吃什么好 疯狂动物园 大猩猩栖息地升级技巧 疯狂动物园怎么办boss任务 boss任务过法 疯狂动物园怎么驯服火山猩猩 疯狂动物园驯服火山猩猩 疯狂动物园火山猩猩 在陌生的城市如何辨别东南西北? 女羊男虎千万别在一起 女羊男虎婚配好不好 属羊女与属虎男婚姻能否长久 属羊女的和什么属相最配 拜托了.... 家好月圆里面于素秋小时候的扮演者是谁? 什么是队列,如何快速 编写一个java的队列类 溏心风暴之家好月圆中的于素秋是谁演的?? java队列类 家好月圆中的于素秋是谁演的?为什么大家不喜欢她?原因,20分 家好月圆当中,于素秋的扮演者是谁?为什么说她的声音不好听? 苹果游戏充值如何用另一个手机微信支付? 如何编写一个JAVA的队列类 李自成到底当了几天皇帝? 李自成当皇帝,当了多长时间 李自成当了多久皇帝? 李自成做了多长时间的皇帝 只当了一个多月皇帝的李自成,他的皇帝生涯究竟是怎样的? 李自成当了多久皇帝 李自成当了多少天皇帝? 大顺王朝在历史上只存在一天,这个王朝的皇帝是谁? 李自成当了多久的皇帝? 闯王李自成当了多久皇帝?拜托各位大神 李自成占领北京后,坐了多久的皇帝 用java语言设计一个先进先先出的队列类 好彩妹是谁演的? java编程 设计队列类。(先进先出) 钟嘉欣演的于素秋怎么样? 钟嘉欣主演的电视剧 手机锁屏签名怎么设置 java中创建队列Queue的问题 溏心风暴两部都有出演的演员有哪些 iPhone可以设定锁屏签名吗 溏心風暴演于素秋噶系邊個,真名? 用java编一个队列 家好月圆里扮演小时候于素秋的伍楚莹的资料 溏心风暴之家好月圆中,黄宗泽有饰演角色麽?要所有演员表。 溏心风暴之家好月圆的结局? java.util.concurrent的队列 有谁知道演方世玉他老妈的演员是谁? 珠光宝气中 宋世万的孙女 宋子林是谁演的? 和成龙一起演夏日福星的外国男的叫什么 在上面扮演杀手 钟嘉欣演过的全部电视剧 豆腐皮存放用放水吗