您的位置:首页 > 编程语言 > Java开发

队列--基于动态循环数组实现(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());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java queue