博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现数据结构---循环队列
阅读量:3716 次
发布时间:2019-05-22

本文共 2171 字,大约阅读时间需要 7 分钟。

package DataDtructure;/** * ClassName: LoopQueue * Company:华中科技大学电气学院 * date: 2019/8/23 16:23 * author: YEXIN * version: 1.0 * since: JDK 1.8 * Description:实现循环队列,不再使用动态数组了 */public class LoopQueue
implements Queue
{ private E[] data; private int front,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(getCapacity()*2);//扩容 } data[tail] = e; tail = (tail+1)%data.length; size++; } private void resize(int newCapacity){ E[] newdata = (E[])new Object[newCapacity + 1]; for(int i = 0;i < size; i++){ newdata[i] = data[(i+front)% data.length]; } data = newdata; front = 0; tail = size; } @Override public E getFront() { if(isEmpty()){ throw new IllegalArgumentException("the Queue is empty"); } return data[front]; } @Override public E dequeue() { if(isEmpty()){ throw new IllegalArgumentException("the Queue is empty"); } E res = data[front]; data[front]=null; front = (front+1)%data.length; size--; if(size == getCapacity()/4 && data.length/2 != 0){ resize(data.length/2); } return res; } @Override public String toString(){ StringBuilder res = new StringBuilder(); res.append(String.format("Queue:size = %d,capacity = %d\n",size,getCapacity())); res.append("front ["); for(int i = front ;i != tail; i=(i+1)%data.length){ res.append(data[i]); if((i+1)%data.length != tail){ res.append(","); } } res.append("] tail"); return res.toString(); }}

转载地址:http://achjn.baihongyu.com/

你可能感兴趣的文章
Spark Streaming实时流处理项目实战笔记——Kafka单节点单broker的部署及使用
查看>>
查看kafka版本
查看>>
Spark Streaming实时流处理项目实战笔记——使用IDEA+Maven构建开发环境
查看>>
Spark Streaming实时流处理项目实战笔记——Kafka实战之整合Flume和Kafka完成实时数据采集
查看>>
清洗弹幕数据
查看>>
Spark Streaming实时流处理项目实战笔记——从词频统计功能着手入门Spark Streaming
查看>>
ERROR SparkContext: Error initializing SparkContext ,Name node is in safe mode
查看>>
updateStateByKey函数详解及worldcount例子
查看>>
Spark Streaming实时流处理项目实战笔记——updateStateByKey算子的使用
查看>>
Spark Streaming实时流处理项目实战笔记——将统计结果写入到MySQL数据库中
查看>>
Spark中foreachRDD、foreachPartition和foreach解读
查看>>
Spark中foreachRDD的正确使用
查看>>
mysql查看表结构的几种方式
查看>>
Spark Streaming实时流处理项目实战笔记——Spark Streaming整合Spark SQL操作
查看>>
Spark Streaming实时流处理项目实战笔记——Receiver方式整合之概述
查看>>
Spark Streaming实时流处理项目实战笔记——使用KafkaSInk将Flume收集到的数据输出到Kafka
查看>>
SpringBoot系列之集成Thymeleaf用法手册
查看>>
Dubbo面试八连问,这些你都能答上来吗?
查看>>
判断字符串是否是正常IP
查看>>
超简单读懂mapreduce的工作过程
查看>>