队列(Queue)

1,抽象数据类型:

public interface Queue {
	public boolean isEmpty();
	public Object getFrontElement();
	public Object getRearElement();
	public void put(Object theObject);
	public Object remove();
}

2,数组表示:

public class ArrayQueue implements Queue {
	int front; // one counterclockwise from first element
	int rear; // position of rear element of queue
	Object[] queue; // element array

	public ArrayQueue(int initialCapacity) {
		if (initialCapacity < 1)
			throw new IllegalArgumentException("initialCapacity must be >= 1");
		queue = new Object[initialCapacity + 1];
	}

	public ArrayQueue() {
		this(10);
	}

	public boolean isEmpty() {
		return front == rear;
	}

	public Object getFrontElement() {
		if (isEmpty())
			return null;
		else
			return queue[(front + 1) % queue.length];
	}

	public Object getRearElement() {
		if (isEmpty())
			return null;
		else
			return queue[rear];
	}

	public void put(Object theElement) {
		if ((rear + 1) % queue.length == front) {
			Object[] newQueue = new Object[2 * queue.length];

			int start = (front + 1) % queue.length;
			if (start < 2)
				System.arraycopy(queue, start, newQueue, 0, queue.length - 1);
			else {
				System.arraycopy(queue, start, newQueue, 0, queue.length
						- start);
				System.arraycopy(queue, 0, newQueue, queue.length - start,
						rear + 1);
			}
			front = newQueue.length - 1;
			rear = queue.length - 2;
			queue = newQueue;
		}
		rear = (rear + 1) % queue.length;
		queue[rear] = theElement;
	}

	public Object remove() {
		if (isEmpty())
			return null;
		front = (front + 1) % queue.length;
		Object frontElement = queue[front];
		queue[front] = null;
		return frontElement;
	}
}

3,链节点定义:

public class ChainNode {
	Object element;
	ChainNode next;

	ChainNode() {
	}

	ChainNode(Object element) {
		this.element = element;
	}

	ChainNode(Object element, ChainNode next) {
		this.element = element;
		this.next = next;
	}
}

4,链表表示

public class LinkedQueue implements Queue {
	protected ChainNode front;
	protected ChainNode rear;

	public LinkedQueue(int initialCapacity) {
	}

	public LinkedQueue() {
		this(0);
	}

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

	public Object getFrontElement() {
		if (isEmpty())
			return null;
		else
			return front.element;
	}

	public Object getRearElement() {
		if (isEmpty())
			return null;
		else
			return rear.element;
	}

	public void put(Object theElement) {
		ChainNode p = new ChainNode(theElement, null);
		if (front == null)
			front = p; // empty queue
		else
			rear.next = p; // nonempty queue
		rear = p;
	}

	public Object remove() {
		if (isEmpty())
			return null;
		Object frontElement = front.element;
		front = front.next;
		if (isEmpty())
			rear = null; // enable garbage collection
		return frontElement;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值