不多哔哔,直接上代码,多于的话请看
链表实现队列时,不需要考虑ElementOutOfBoundary问题,因此不需要做成循环队列。
Before:这里实现时,使用的链表不是Java自带的链表,是我自己写的链表,代码见:
下面是链式队列实现代码(LinkedListQueue)
/**
* Created by Hzc on 2019/1/28.
* 队列的链表实现
* 使用的链表是单向链表
* 使用上一节中实现的代码
*/
public class LinkedListQueue<Type> {
/**
* queue:用作队列的链表
*/
private SingleList<Type> queue;
/**
* 两种构造方法
*/
public LinkedListQueue(){//空构造方法
queue = new SingleList<>();
}
public LinkedListQueue(Type[] list){//根据给定数组构造队列
for (int i = 0; i < list.length; i++) {
queue.addNodeAfterTail(list[i]);
}
}
/**
* 数据入队
* @param data:需要入队的数据
*/
public void enQueue(Type data){
queue.addNodeAfterTail(data);
}
/**
* 数据出队
* @return 队首数据
*/
public Type deQueue(){
Type data =(Type) queue.getHead().getData();//获得队首数据
queue.removeNodeByData(data);//删除队首
return data;//返回队首数据
}
/**
* 获取队首数据
* @return 队首数据
*/
public Type getQueueHead(){
return (Type) queue.getHead().getData();
}
/**
* 获取队列长度
* @return 队列长度
*/
public int getLength(){
return queue.getListLength();
}
/**
* 清空队列
*/
public void clear(){
queue.clear();
}
/**
* 判断队列是否为空
* @return 队列是否为空
*/
public boolean isEmpty(){
return queue.isEmpty();
}
/**
* 打印队列数据
*/
public void display(){
queue.display();
}
}
下面是测试代码(LinkedListQueueTest)
public class LinkedListQueueTest {
private static final int MULTI = 6;
private static final int LENGTH = 20;
private LinkedListQueue<Integer> queue;
public static void main(String[] args) {
LinkedListQueueTest a = new LinkedListQueueTest();
a.run();
}
public void run(){
queue = new LinkedListQueue();
testEnQueue();//将队列填满
testDeQueue();//让队首元素出队
for (int i = 0; i < 3; i++) {//再添加几个数据
queue.enQueue(i*7);
}
queue.display();
testDeQueue();
testDeQueue();//再出队两个元素
testGetQueueHead();
testGetLength();
testClear();
}
public void testEnQueue(){
System.out.println("----测试enQueue()----");
for (int i = 0; i < LENGTH; i++) {
queue.enQueue(i*MULTI);
}
queue.display();
}
public void testDeQueue(){
System.out.println("----测试deQueue()----");
System.out.println("出队:" + queue.deQueue());
queue.display();
}
public void testGetQueueHead(){
System.out.println("----测试getQueueHead()----");
System.out.println("当前队首:" + queue.getQueueHead());
queue.display();
}
public void testGetLength(){
System.out.println("----测试getLength()----");
System.out.println("当前队列长度:" + queue.getLength());
queue.display();
}
public void testClear(){
System.out.println("----测试clear()----");
queue.clear();
queue.display();
}
}