队列--基于动态循环数组实现(Java)
2018-02-03 16:49
761 查看
基于动态循环数组实现队列
class DynamicArrayQueue {
private int front;
private int rear;
private int capacity;
private int[] array;
public DynamicArrayQueue() {
capacity = 1;
front = -1;
rear = -1;
array = new int[1];
}
public boolean isEmpty() { //判断是否为空
return (front == -1);
}
public boolean isFull() { //判断队列是否已满
return ((rear + 1) % capacity == front);
}
public int getQueueSize() { //队列的大小
if (front == -1) {
return 0;
}
int size = ((capacity - front + rear + 1) % capacity);
if (size == 0) {
return capacity;
} else {
return size;
}
}
private void resizeQueue() { //改变队列的大小
int iniCapacity = capacity;
capacity *= 2;
int[] oldArray = array;
array = new int[this.capacity];
for (int i = 0; i < oldArray.length; i++) {
array[i] = oldArray[i];
}
if (rear < front) {
for (int i = 0; i < front; i++) {
array[i + iniCapacity] = this.array[i];
array[i] = 0;
}
rear = rear + iniCapacity;
}
}
public void enQueue(int date) { //入队
if (isFull()) {
resizeQueue();
}
rear = (rear + 1) % capacity;
array[rear] = date;
if (front == -1) {
front = rear;
}
}
public int deQueue() { //出队
int date = 0;
if (isEmpty()) {
System.out.println("Over Flow");
} else {
date=array[front];
if(front==rear){
front=rear=-1;
}else {
front=(front+1)%capacity;
}
}
return date;
}
}
public class Main {
public static void main(String[] args) {
// write your code here
DynamicArrayQueue dynamicArrayQueue=new DynamicArrayQueue();
dynamicArrayQueue.enQueue(1);
dynamicArrayQueue.enQueue(2);
dynamicArrayQueue.enQueue(3);
dynamicArrayQueue.enQueue(4);
System.out.println(dynamicArrayQueue.getQueueSize());
System.out.println(dynamicArrayQueue.deQueue());
System.out.println(dynamicArrayQueue.deQueue());
System.out.println(dynamicArrayQueue.deQueue());
System.out.println(dynamicArrayQueue.deQueue());
}
}
class DynamicArrayQueue {
private int front;
private int rear;
private int capacity;
private int[] array;
public DynamicArrayQueue() {
capacity = 1;
front = -1;
rear = -1;
array = new int[1];
}
public boolean isEmpty() { //判断是否为空
return (front == -1);
}
public boolean isFull() { //判断队列是否已满
return ((rear + 1) % capacity == front);
}
public int getQueueSize() { //队列的大小
if (front == -1) {
return 0;
}
int size = ((capacity - front + rear + 1) % capacity);
if (size == 0) {
return capacity;
} else {
return size;
}
}
private void resizeQueue() { //改变队列的大小
int iniCapacity = capacity;
capacity *= 2;
int[] oldArray = array;
array = new int[this.capacity];
for (int i = 0; i < oldArray.length; i++) {
array[i] = oldArray[i];
}
if (rear < front) {
for (int i = 0; i < front; i++) {
array[i + iniCapacity] = this.array[i];
array[i] = 0;
}
rear = rear + iniCapacity;
}
}
public void enQueue(int date) { //入队
if (isFull()) {
resizeQueue();
}
rear = (rear + 1) % capacity;
array[rear] = date;
if (front == -1) {
front = rear;
}
}
public int deQueue() { //出队
int date = 0;
if (isEmpty()) {
System.out.println("Over Flow");
} else {
date=array[front];
if(front==rear){
front=rear=-1;
}else {
front=(front+1)%capacity;
}
}
return date;
}
}
public class Main {
public static void main(String[] args) {
// write your code here
DynamicArrayQueue dynamicArrayQueue=new DynamicArrayQueue();
dynamicArrayQueue.enQueue(1);
dynamicArrayQueue.enQueue(2);
dynamicArrayQueue.enQueue(3);
dynamicArrayQueue.enQueue(4);
System.out.println(dynamicArrayQueue.getQueueSize());
System.out.println(dynamicArrayQueue.deQueue());
System.out.println(dynamicArrayQueue.deQueue());
System.out.println(dynamicArrayQueue.deQueue());
System.out.println(dynamicArrayQueue.deQueue());
}
}
相关文章推荐
- 队列--基于简单循环数组实现(Java)
- 基于Java数组实现循环队列的两种方法小结
- 基于数组的循环队列(C++模板实现)
- Java数组实现循环队列
- Java循环队列(数组实现)
- 基于数组实现Java 自定义Queue队列及应用
- Java数组实现可以动态增长的队列
- java数据结构与算法之双向循环队列的数组实现方法
- Java基于数组和循环实现的控制台五子棋
- (数据结构与算法分析 四)------数组循环队列的实现( Java语言描述)
- 循环数组实现队列(java)。
- 这里实现一个基于数组的线程安全的循环队列
- java 基于数组实现的队列
- 算法(第四版)笔记<一>-------动态队列的数组实现(Java语言)
- 基于数组的循环队列(C++模板实现)
- 使用数组实现栈和循环队列(JAVA语言)
- 数据结构之——基于数组实现的循环队列
- 动态数组实现循环队列
- java使用数组实现循环队列
- Java数组实现循环队列的两种方法