一、队列简单介绍
队列是一种常用的数据结构之一,与之前的栈类似,不过队列是“先进先出”。队列有队头(front)和队尾(rear),数据从队尾进入队列,从队头出队列,队头(front)指向队列的第一个数据,队尾(rear)指向队列中的最后一个数据。
二、队列实现
队列有很多种,这里只是介绍最基本的实现,采用链式存储,也就是链式队列,与之前的链表存储形式一样,通过结点对象描述一个数据,结点对象包含具体数据和下一个结点的引用。
public class Node {
int data;
Node next;
public Node() {
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node(int data) {
this.data = data;
}
}
/**
* 队列FIFO: 无头结点 先进先出
*/
public class QueueLink {
private Node front;
private Node rear;
private int length;
public QueueLink() {
this.length = 0;
}
public int getLength() {
return length;
}
public boolean isEmpty(){
if (front == null )
return true;
return false;
}
/**
* 入队列
* @return
*/
public boolean push(int data){
Node newNode = new Node(data);
if (isEmpty()){
front = newNode;
rear = front;
length++;
}else {
rear.next = newNode;
rear = newNode;
length++;
}
return true;
}
/**
* 出队列
* @return
*/
public int pop(){
if (isEmpty())
throw new NullPointerException("空队列");
Node curNode = front;
int temp;
if (curNode == rear){
temp = curNode.data;
}else {
temp = curNode.data;
front = curNode.next;
curNode = null;
}
return temp;
}
public void print(){
Node curNode = front;
while (curNode != null){
System.out.printf(" "+curNode.data+" ,");
curNode = curNode.next;
}
}
/**
* 返回顶点元素
* @return
*/
public int getdata(){
if (isEmpty())
throw new NullPointerException("空战");
return front.data;
}
public static void main(String[] args) {
QueueLink queueLink = new QueueLink();
queueLink.push(1);
queueLink.push(2);
queueLink.push(3);
queueLink.print();
System.out.println("出队列: " + queueLink.pop());
System.out.println("队列顶: " + queueLink.getdata());
}
}