队列Queue的链表实现(FIFO)
程序员文章站
2024-03-18 11:08:28
...
实现FIFO(先进先出)的队列
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Created by ZYQ on 2016/7/26.
* 实现FIFO(先进先出)的队列
*/
public class Queue<String> {
private Node first; // 最早添加的结点连接
private Node last; // 最近添加的结点连接
private int N; // 元素数量
// 定义结点的嵌套类
private class Node{
String string;
Node next;
}
// 判断链表是否为空
public boolean isEmpty() {
return first == null;
}
// 统计链表结点数
public int size() {
return N;
}
// 向表尾添加元素
public void enqueue(String s) {
Node oldlast = last;
last = new Node();
last.string = s;
last.next = null;
if (isEmpty()) {
first = last;
} else {
oldlast.next = last;
}
N++;
}
// 从表头删除元素
public String dequeue() {
String s = first.string;
first = first.next;
if (isEmpty()) {
last = null;
}
N--;
return s;
}
// 测试用例
public static void main(java.lang.String[] args ) throws IOException {
Queue<java.lang.String> queue = new Queue<java.lang.String>();
// 创建输入流对象,读取一行数据,并以空格为分隔转化为String数组
System.out.println("Enter the statement:");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
java.lang.String intput = reader.readLine();
java.lang.String[] item = intput.split(" ");
for (java.lang.String s : item) {
// 输入"-"代表出列,非"-"则入列
if (!s.equals("-")) {
queue.enqueue(s);
} else if (!queue.isEmpty()) {
System.out.println(queue.first.string + " left on queue");
queue.dequeue();
}
}
// 遍历链表输入队列的值
System.out.println("The Queue:");
int number = queue.size();
while (number != 0) {
System.out.print(queue.first.string + "");
queue.first = queue.first.next;
number--;
}
}
}
上一篇: 非递归实现DFS的DFS函数体
下一篇: 队列的链表实现