链式存储实现队列:
/**
* 链式队列
* @author liangxiamoyi
*
* @param <T>
*/
public class LQueue<T> {
/**
* 队首指针
*/
private SLNode<T> front;
/**
* 队尾指针
*/
private SLNode<T> rear;
/**
* 队中元素的个数
*/
private int count;
/**
* 判断是否为空
* @return
*/
public boolean isEmpty(){
return count==0;
}
/**
* 插入队尾元素
* @param item 元素值
*/
public void insert(T item){
if(isEmpty()){
front=rear=new SLNode<>(item,null);
count=1;
}
else{
rear.nextNode=new SLNode<>(item,null);
rear=rear.nextNode;
count++;
}
}
/**
* 删除队首元素
* @return
*/
public T delete(){
if(isEmpty()){
throw new RuntimeException("empty queue");
}
SLNode<T> temp=front;
front=front.nextNode;
count--;
if(count==0){
rear=null;
}
return temp.data;
}
/**
* 获得队首元素
* @return 返回T类型的队首元素值
*/
public T getFront(){
if(isEmpty()){
throw new RuntimeException("empty queue");
}
return front.data;
}
/**
* 清空队列
*/
public void clear(){
front=rear=null;
count=0;
}
//测试
public static void main(String[] args){
LQueue<Integer> lqueue=new LQueue<Integer>();
lqueue.insert(1);
lqueue.insert(2);
lqueue.insert(3);
lqueue.insert(4);
lqueue.delete();
System.out.println(lqueue.getFront());
lqueue.delete();
System.out.println(lqueue.getFront());
lqueue.delete();
System.out.println(lqueue.getFront());
lqueue.delete();
System.out.println(lqueue.getFront());
}
}