一、队列
(1)定义:队列是一种先进先出的线性表,只允许在表的一端插入,在另外一端删除元素。
二、链队列的定义及组成:
(1)定义:用链表表示的队列简称为链队列。
(2)组成:
①存储队列元素的单链表结点;
②指向队头和队尾指针的链队头结点。
三、链队列相对于单链表的变化:
①增加一个尾指针;
②头指针变成队头指针。
package linear_list;
/**
*
* Linked queue.
* @author 前夜
*
*/
public class LinkedQueue {
/**
* An inner class. 内部类
*/
class Node {
int data;
Node next;
public Node(int paraValue) {
data = paraValue;
next = null;
} // Of the constructor
}// Of class Node
// The header of the queue and the tail of the queue.
Node header;
Node tail;
/**
********************
* Construct an empty sequential list.
********************
*/
public LinkedQueue() {
header = new Node(-1);
tail = header;
} // Of the first construct
/**
********************
* Enqueue.
* @param paraValue
********************
*/
public void enqueue(int paraValue) {
Node tempNode = new Node(paraValue);
tail.next = tempNode;
tail = tempNode;
}// Of enqueue.
/**
********************
* Dequeue.
* @return
********************
*/
public int dequeue() {
if (header == tail) {
System.out.println("The queue is empty, so there is no element in it.");
return -1;
}// Of dequeue
int resultValue = header.next.data;
header.next = header.next.next;
if (header.next == null) {
tail = header;
} // Of if
return resultValue;
}// Of dequeue
public String toString() {
String resultString = "";
if (header.next == null) {
return "empty";
}
Node tempNode = header.next;
while (tempNode != null) {
resultString += tempNode.data + ", ";
tempNode = tempNode.next;
}
return resultString;
}
/**
********************
*The entrance of the program.
*
* @param args
********************
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedQueue tempQueue = new LinkedQueue();
System.out.println("Initialized, the list is: " + tempQueue.toString());
for (int i = 0; i < 5; i++) {
tempQueue.enqueue(i + 1);
} // Of for i
System.out.println("Enqueue, the queue is: " + tempQueue.toString());
tempQueue.dequeue();
System.out.println("Dequeue, the queue is: " + tempQueue.toString());
int tempValue;
for (int i = 0; i < 5; i++) {
tempValue = tempQueue.dequeue();
System.out.println("After looped delete " + tempValue + ", the new queue is: " + tempQueue.toString());
}// Of for i
for (int i = 0; i < 3; i++) {
tempQueue.enqueue(i + 10);
}// Of for i
System.out.println("Enqueue, the queue is: " + tempQueue.toString());
} // Of main
}// Of LinkedQueue