Java实现三种(顺序,链式,循环)队列

本文详细介绍了如何使用Java实现三种队列:顺序队列、链式队列和循环队列。通过实例代码,阐述了各种队列的数据结构特性和操作方法。
摘要由CSDN通过智能技术生成

1.顺序队列的实现

package lang;  

import java.io.Serializable;  
import java.util.Arrays;  

/** 
 * @ClassName: ArrayQueue 
 * @Description: 顺序队列 
 * @date 2014年1月20日 下午3:46:19 
 * @param <T> 
 */  
public class ArrayQueue<T> implements Serializable{
     
  /** 
   * @Fields serialVersionUID : TODO 
   */  
  private static final long serialVersionUID = 7333344126529379197L;  

  private int DEFAULT_SIZE = 10;  

  private int capacity;//保存数组的长度  

  private Object[] elementData;//定义一个数组用于保存顺序队列的元素  

  private int front = 0;//队头  

  private int rear = 0;//队尾  

  //以默认数组长度创建空顺序队列  
  public ArrayQueue() {  
    capacity = DEFAULT_SIZE;  
    elementData = new Object[capacity];  
  }  

  //以一个初始化元素来创建顺序队列  
  public ArrayQueue(T element) {  
    this();  
    elementData[0] = element;  
    rear++;  
  }  

  public ArrayQueue(int initSize) {  
    elementData = new Object[initSize];  
  }  

  /** 
   * 以指定长度的数组来创建顺序队列 
   * @param element 指定顺序队列中第一个元素 
   * @param initSize 指定顺序队列底层数组的长度 
   */  
  public ArrayQueue(T element, int initSize) {  
    this.capacity = initSize;  
    elementData = new Object[capacity];  
    elementData[0] = element;  
    rear++;  
  }  

  /** 
   * @Title: size      
   * @Description: 获取顺序队列的大小     
   * @return 
   */  
  public int size() {  
    return rear - front;  
  }  

  /** 
   * @Title: offer      
   * @Description: 入队     
   * @param element 
   */  
  public void offer(T element) {  
    ensureCapacity(rear + 1);  
    elementData[rear++] = element;  
  }  

  private void ensureCapacity(int minCapacity) {  
    //如果数组的原有长度小于目前所需的长度  
    int oldCapacity = elementData.length;  
    if (minCapacity > oldCapacity) {  
      int newCapacity = (oldCapacity * 3) / 2 + 1;  
      if (newCapacity < minCapacity)  
        newCapacity = minCapacity;  
      // minCapacity is usually close to size, so this is a win:  
      elementData = Arrays.copyOf(elementData, newCapacity);  
    }  

  }  

  /** 
   * @Title: poll      
   * @Description: 出队     
   * @return 
   */  
  public T poll() {  
    if (isEmpty()) {  
      throw new IndexOutOfBoundsException("空队列异常");  
    }  
    //保留队列的front端的元素的值  
    T oldValue = (T) elementData[front];  
    //释放队列的front端的元素  
    ele
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值