链队列节点类
package cn.hbrj.CollectionDemo;
//链队列
public class QueueNode<T> {
private T pData;//元素数据
private QueueNode<T> next;
//后继
public QueueNode(){
pData=null;
next=null;
}
public QueueNode(T data){
pData=data;
next=null;
}
public T getpData() {
return pData;
}
public void setpData(T pData) {
this.pData = pData;
}
public QueueNode<T> getNext() {
return next;
}
public void setNext(QueueNode<T> next) {
this.next = next;
}
}
链队列实现
package cn.hbrj.CollectionDemo;
/**
* 先进先出
* @author XuYang
*
* @param <T>
*/
public class ListQueue<T> {
private QueueNode<T> mFront=null;//队头对象 (出队方便)
private QueueNode<T> mRear=null;//队尾对象 (入队方便)
private int mCount=0;//队伍的长度
public boolean isEmpty(){
return mFront==null&&mRear==null?true:false;
}
public int count(){
return mCount;//获取长度的
}
public ListQueue(){
mFront=mRear=null;
mCount=0;
}
//入队 队列中添加元素
public void eQueue(T pdata){
//包装元素
QueueNode<T> pnewData=new QueueNode<>(pdata);
//节点放到队尾 排队
if (isEmpty()) {
mFront=mRear=pnewData;
//空队列 头尾是一个节点
}
else {
mRear.setNext(pnewData);
mRear=pnewData;
//添加新元素在队尾 更新队尾
}
mCount++;
}
//出队 队头的元素 出队列
public T dQueue(){
if (isEmpty()) {
System.out.println("队列空");
return null;
}
else {
//队列中有元素的时候 出的是队头元素 更新对头
QueueNode<T> pNode=mFront;//获取队头
mFront=mFront.getNext();//更新
mCount--;
return pNode.getpData();
}
}
//清除
public void clear(){
QueueNode<T> temp=mFront;
while (temp!=null) {
mFront=mFront.getNext();
temp=null;
temp=mFront;
}
mFront=mRear=null;
mCount--;
System.gc();//强制清除
}
}