数据结构:循环队列--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(); } }
相关文章推荐
- 快速排序的优化 - 数据结构和算法97
- HashMap的工作原理
- 《数据结构》必看知识点
- 数据结构面试之六——二叉树的常见操作2(非递归遍历&二叉排序树)
- 数据结构面试之五—二叉树的常见操作(递归实现部分
- 数据结构面试之四——队列的常见操作
- 数据结构面试之三——栈的常见操作
- 数据结构面试之二——双向链表表、循环链表、有序链表的常见操作
- 数据结构面试之一——单链表常见操作
- Lua 的数据结构
- Inna and Binary Logic
- 算法2.2
- 数据结构--线段树--区间涂色问题
- 数据结构--线段树--区间涂色问题
- 数据结构:循环队列(C语言实现)
- 第二章算法2.1
- 数据结构专题训练一 C Bits
- 【数据结构】二叉树的递归遍历
- CUGB专题训练之数据结构:D - Period (kmp中的next判断循环节)
- CUGB专题训练之数据结构:B - Count Color 线段树区间更新