文章目录
java 实现链队列
用节点类实现;
代码
/**
* 链队列
* 泛型
*/
public class LinkQueue<E> {
// 队头,是一个空的节点,不储存数据
private Node<E> front;
// 队尾
private Node<E> rear;
// 队列中元素个数
private int size = 0;
// 初始化队列
public LinkQueue(){
front = new Node<>();
front.next = null;
rear = front; // 对头队尾为同一个节点
}
// 获取队列中元素个数
public int getSize(){
return size;
}
// 入队
public void enQueue(E e){
Node<E> rear1 = new Node<>();
rear1.setData(e);
// 原来的队尾指向新的队尾
rear.next = rear1;
rear = rear1;
size ++; // 队列内元素个数+1
}
// 出队
public E deQueue(){
E e = null;
if(size != 0){
e = front.next.getData();
// 队头指向下下一个节点
front.next = front.next.next;// front = front.next --> 这样写不好
size --; // 队列内元素个数-1
}
else
System.out.println("抱歉,队列中没有元素,无法出队");
return e;
}
// 取对头元素
public E getHead(){
E e =null;
if(size != 0)
e = front.next.getData();
else
System.out.println("队列为空,无法取出队头元素");
return e;
}
// 取对头元素
public E getLast(){
E e =null;
if(size != 0)
e = rear.getData();
else
System.out.println("队列为空,无法取出队尾元素");
return e;
}
}
/**
* 链队列的节点
*/
public class Node<E> {
private E data;// 储存的数据
public Node<E> next; // 向下一个节点
public void setData(E data){
this.data = data;
}
public E getData(){
return data;
}
}
public class Demo {
// 输出相关数据
public static void print(LinkQueue queue){
System.out.println("队内元素个数:" + queue.getSize());
System.out.println("队头:" + queue.getHead());
System.out.println("队尾:" + queue.getLast());
}
public static void main(String[] args){
LinkQueue<String> queue = new LinkQueue<>();
// 入队
queue.enQueue("1");
queue.enQueue("2");
queue.enQueue("3");
queue.enQueue("4");
print(queue);
// 出队
queue.deQueue();
queue.deQueue();
print(queue);
// 入队
queue.enQueue("5");
queue.enQueue("6");
print(queue);
// 入队
queue.enQueue("7");
print(queue);
}
}
结果:
队内元素个数:4
队头:1
队尾:4
队内元素个数:2
队头:3
队尾:4
队内元素个数:4
队头:3
队尾:6
队内元素个数:5
队头:3
队尾:7