算法题5 用数组实现队列

先定义队列的接口

public interface IQueue<T> {

	
	/*
	 * 初始化一个空队列
	 */
     IQueue InitQueue();
     
     /*
      * 销毁一个队列
      */
     IQueue DestroyQueue();
     
     /*
      * 清空一个队列
      */
     IQueue  ClearQueue();
     
     /*
      * queue charge isEmpty()
      */
     Boolean  	isEmpty();
     
     /*
      * return queue`s length;
      */
     Integer  QueueLength();
     
     /*
      * return the head queue
      */
     
     T GetHead();
     
     /*
      * insert the tail queue
      */
     Boolean EnQueue(T t);
     
     
     /*
      * delete the head ,or out queue
      */
     T DeQueue();
}

将队列接口实现

public class ArrayQueue<T> implements IQueue<T> {
	/**
	 * 数组型队列
	 * <p>
	 * 同样需要一个头指针,一个尾指针 当头指针=尾指针=0时候为空 需要实现分配一个固定大小的数组
	 * 正常情况下下,尾指针永远指向队尾元素的下一个位置,比如说队尾元素在0 尾指针则在1
	 * <p>
	 * 注意!:数组型队列有很大的劣势,容易造成存储空间浪费,而且不易扩容。 比如说,最大空间为6的数组队列,
	 * 进去了6个了元素,然后从队头出去了5个元素,此时,仍然不能插入新的元素
	 * 因为队尾指针仍然指向第6个元素,其仍然占据了最后一个位置,而队头是不允许插入的。这样造成前面5个位置浪费。
	 * <p>
	 * 解决方法:1.元素移动位置,出队一个 后面的元素往前挪。 缺点:每次出队都需要移动位置 很麻烦 效率也低 2.动态扩容, 缺点:浪费了前面的空间
	 * 3.最佳解决方案:构造环形队列
	 */

	private Integer size;
	private Integer header;
	private Integer tail;
	private final Integer length = 6;
	private Object[] arr;

	@Override
	public IQueue InitQueue() {
		// TODO Auto-generated method stub
		arr = new Object[length];
		tail = header = size = 0;
		return this;
	}

	@Override
	public IQueue DestroyQueue() {
		// TODO Auto-generated method stub
		arr = null;
		tail = header = size = 0;
		return this;
	}

	@Override
	public IQueue ClearQueue() {
		// TODO Auto-generated method stub
		tail = header = size = 0;
		for (int i = 0; i < arr.length; i++) {
			arr[i] = null;
		}
		return this;
	}

	@Override
	public Boolean isEmpty() {
		return header == tail ? true : false;
	}

	@Override
	public Integer QueueLength() {
		// TODO Auto-generated method stub
		return size;
	}

	@Override
	public T GetHead() {
		// TODO Auto-generated method stub
		return (T) arr[header];
	}

	@Override
	public Boolean EnQueue(T t) {
		// TODO Auto-generated method stub
		if (size >= length)
			return false;
		if (header == tail) {
			header = 0;
		    arr[header] = t;
		    tail =1;
		    size++;
		return true;}
		else {
			arr[tail]=t;
		tail = tail +1;
		size++;
		return true;}
	}

	@Override
	public T DeQueue() {
		// TODO Auto-generated method stub
		if(header == tail) {
			return null;
		}else {
			T t = (T)arr[header];
			header=header-1;
			size--;return t;
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

活得真实

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值