数据结构与算法(3)—— 队列(java)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/83317187

1 数组实现的队列

public class ArrayQueue {
private String[] items;
private int n=0; //数组的大小
private int head=0;
private int tail = 0;

public ArrayQueue(int capacity){
	items = new String[capacity];
	n = capacity;
}

//入队列
public boolean enQueue(String item){
	// tail == n,表示队列已满
	if(tail == n) return fasle;
	else{
		items[tail++] = item;
		return true;
	}
}

//出队列
public String deQueue(){
	// head==tail,表示队列空
	if(head == tail) return null;
	else{
		String s = items[head];
		++head;
		return s;
	}
}
}

2 简单循环数组实现队列

在这里插入图片描述

public class ArrayQueue {
private int front;
private int rear;
private int capacity;
private int[] array;

private ArrayQueue(int size){
	capacity = size;
	front = -1;
	rear = -1;
	array = new int[size];
}

public static ArrayQueue createQueue(int size){
	return new ArrayQueue(szie);
}

public boolean isEmpty(){
	return front == -1;
}

public boolean isFull(){
	retrun (rear+1) % capacity == front;
}

public int getQueueSize(){
	return (capacity - front + rear+1) % capacity;
}

public void enQueue(int data){
	if(isFull()) {
		throw new QueueOverFlowException("OverFlow");
	}else{
		rear = (rear + 1) % capacity;
		array[rear] = data;
		if(front == -1) {
			front = rear;
		}
	}
}

public void deQueue(){
	int data = null;
	if(isEmpty()) {
		throw new EmptyQueueException("Empty");
	}else{
		data = array[front];
		if(front == rear) {
			front = rear -1;
		}else{
			front = (front + 1) % capacity;
		}

		return data;
	}
}



}

3 基于链表实现队列

public class LLQueue {
private LLNode frontNode;
private LLNode rearNode;

private LLQueue(){
	this.frontNode = null;
	this.rearNode = null;
}

public static LLQueue createQueue {
	return new LLQueue();
}

public boolean isEmpty(){
	return frontNode == null;
}

public void enQueue(int data){
	LLNode newNode = new LLNode(data);

	if(rearNode != null) {
		rearNode.setNext(newNode);
	}

	rearNode = newNode;
	if(frontNode == null) {
		frontNode = rearNode;
	}

}

public int deQueue(){
	int data = null;
	if(isEmpty()) {
		throw new EmptyQueueException("Empty");
	}else{
		data = frontNode.getData();
		frontNode = frontNode.getNext();
	}

	return data;
}

}

猜你喜欢

转载自blog.csdn.net/u012292754/article/details/83317187