数据结构(二):队列的Java实现

队列实现的是一种先入先出(FIFO)策略。队列中的INSERT操作称为ENQUEUE,DELETE操作称为DEQUEUE。队列的先入先出特性如同生活中的排队现象一样。因为队列既有队头,又有队尾,所以在实现是需要一个数组和两个分别指向对头和队尾的属性。关于队列属性,现有以下说明:

1.队头属性指向队头元素所在位置,队尾属性指向队尾元素的下一个位置,即下一个元素即将插入的位置。
2.为防止队列的队头移动会引起数组前端空间的浪费,一般设置队头和队尾两属性循环移动。
3.当队尾元素加一取模等于队头元素时,说明此队列存储空间已满。
4.当队头元素和队尾元素相等时,说明此队列为空。

以下Java实现了队列,此队列的初始容量初始化时可自动设置,当队列已满时,队列将自动扩容为先前容量的二倍,并自动实现元素复制。

import java.lang.reflect.Array;
import java.util.Arrays;

public class ListDemo<T> {
    private T[] array;
    private int head = 0;
    private int tail = 0;
    private int size = 0;
    private Class<T> T;

   @SuppressWarnings("unchecked")
   public ListDemo(Class<T> T, int size) {
       this.size = size;
       this.T = T;
       this.array = (T[]) Array.newInstance(T, size);
   }

   public void enqueue(T input) {
       if (tail == size)
           tail = 0;
       array[tail] = input;
       if (++tail % size == head) {
           size *= 2;
           array = Arrays.copyOf(array, size);
       }
   }

   public T dequeue() {
       if(head == size)
           head = 0;
       if(head == tail)
           return null;
       else
           return array[head++];
   }

   public boolean empty() {
       if (head == tail)
           return true;
       else
           return false;
   }

}

转载于:https://www.cnblogs.com/torresliang/p/4773435.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值