一、队列的特征
队列的特点是节点的排队次序和出队次序按入队时间先后确定,即先入队者先出队,后入队者后出队,即我们常说的FIFO(first in first out)先进先出。就像我们平常吃饭的时候去食堂排队打饭,去的早,先进队伍,我们就先打到饭,先出队列是一个道理。
队列实现方式也有两种形式,基于数组和基于链表。 对于基于链表,因为链表的长度是随时都可以变的,实现起来比较简单。如果是基于数组的,则复杂一些。这里我们采用链表来实现队列。
二、队列实现
基于链表实现队列还是比较好处理的,只要在尾部后插入元素,在头部删除元素就行了。
代码实现:
public class LinkQueue {
//节点的定义
class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
}
}
private Node front; //队列头
private Node rear; //队列尾
private int size; //队列长度
/*
* 入队
*/
public void push(int val) {
Node newNode = new Node(val);
if (front == null) {
//如果队列为空,那么新节点就等于头节点和尾节点
front = rear = newNode;
} else {
//负责在尾部添加新节点
Node temp = front;
while (temp.next != null) {
temp = temp.next;
}
temp.next = newNode;
rear = newNode;
}
size++;
}
/*
* 出队
*/
public int pull() {
if(front==null) {
System.out.println("队列为空");
return -1;
}
//返回头节点,并且让头节点的下一个节点成为新的头节点
int res = front.data;
front = front.next;
size--;
return res;
}
/*
* 获取队列长度
*/
public int getSize() {
return size;
}
/*
* 展示队列中的元素
*/
public void show() {
Node temp = front;
while (temp != null) {
System.out.print(temp.data + "-->");
temp=temp.next;
}
System.out.println("null");
}
}