欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【数据结构】数组队列的简单实现

程序员文章站 2022-07-14 14:15:51
...

队列的定义:

队列是一种先进先出的线性数据结构,相比与数组,队列对应的操作是数组的子集,只能从一端(队尾)添加元素,也只能从另一端(队首)取出元素。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

(一)定义接口

Queue(E)

①void enqueue(E)

向队尾添加一个元素,入队  

②E dequeue()

取出队首的元素,出队

③E getFront()

查看队首的元素

④int getSize()

查看队列中元素个数

⑤boolean isEmpty()

判断队列是否为空

(二)接口的实现类

ArrayQueue<E>

导入前面我已经封装好的动态数组Array类,基本操作都是复用该类的方法实现的。

------------------------------------------------------------------------------------------------------------------------------------------------

public class ArrayQueue<E> implements Queue<E> {
	private Array<E> array;

	// 构造函数
	public ArrayQueue(int capacity) {
		array = new Array<E>(capacity);
	}

	// 构造函数
	public ArrayQueue() {
		array = new Array<E>();
	}

	@Override
	// 向队尾添加一个元素
	public void enqueue(E e) {
		array.addLast(e);
	}

	@Override
	// 从队首取出一个元素
	public E dequeue() {
		return array.removeFirst();
	}

	@Override
	// 查看队首元素
	public E getFront() {
		return array.getFirst();
	}

	@Override
	// 查看队列元素个数
	public int getSize() {
		return array.getSize();
	}

	// 查看队列的空间大小
	public int getCapacity() {
		return array.getCapacity();
	}

	@Override
	// 查看队列是否为空
	public boolean wsEmpty() {
		return array.isEmpty();
	}

	public String toString() {
		StringBuilder sb = new StringBuilder();
		sb.append("Queue:").append("队首 [");
		for (int i = 0; i < array.getSize(); i++) {
			sb.append(array.query(i));
			if (i != array.getSize() - 1)
				sb.append(", ");
		}
		sb.append("] 队尾");
		return sb.toString();
	}
}

 

我们知道,数组队列有一个很严重的弊端,在出队时删除头元素,相当于使数组后面的元素全部往前挪一位,即数组进行覆盖操作,其复杂度为O(n),在下一篇我将用循环队列解决这个弊端。

相关标签: 数组队列的实现