Java_LinkedQueue 链队列分享
理解链队列
队列的运行方式就是从入队到出队,如下图所示
而链队列,它在链表的基础上实现的队列结构,说到顺序表和链表的区别,即在实际的物理空间中,数据集中存储的队列是顺序队列,分散存储的队列是链队列。
我们用图片来理解一下
代码的实现
public class LinkedQueue<T> {
private LinkedNode<T> front,rear;//声明队头和队尾
public LinkedNode<T> getFront() { //写入无参构造函数
return front;
}
public void setFront(LinkedNode<T> front) { //写入有参构造函数
this.front = front;
}
public LinkedNode<T> getRear() { //写入有参构造函数
return rear;
}
public void setRear(LinkedNode<T> rear) { //写入无参构造函数
this.rear = rear;
}
public void enQueue(T element){ //用于表达入队的方法
LinkedNode<T>node = new LinkedNode<T>(element);
if (front == null && rear ==null){ //先判断是否是要插入第一个元素
front = node;
rear = node ; //让队头和队尾都指向第一个插入的元素
}else { //如果不是插入第一个元素
rear.setNext(node); //让队尾此时的指向元素的引用域为插入元素
rear = node; //把队尾指针移动到插入元素的头上
}
}
public T deQueue(){ //用于表达出队的方法
if (isEmpty()) //先判断是否为空队
throw new RuntimeException("队空");
LinkedNode<T>head=front; //复制队头指针指向的位置
front=front.getNext(); //让队头指针后移
return head.getData(); //返回队头指针指向的元素
}
public T getHead() { //用于表达取队头元素的方法
if (isEmpty()) //先判断是否为空队
throw new RuntimeException("队空");
T headElement = front.getData(); //获取头指针读到的元素
return headElement; //返回读到的元素
}
public boolean isEmpty() { //用于表达判空的方法
if (rear == front)
return true;
return false;
}
}
class LinkedNode<T>{ //用来定义指针
private T data;
private LinkedNode<T> next;
public LinkedNode(T i){
data = i;
next = null;
}
public LinkedNode(){
data = null;
next = null;
}
public T getData(){
return data;
}
public void setData(T element){
data = element;
}
public LinkedNode<T>getNext(){
return next;
}
public void setNext(LinkedNode<T>successor){
next = successor;
}
}
class ShiJian1{ //实践类
public static void main(String[] args){
LinkedQueue<String>queue=new LinkedQueue<String>();
System.out.println("入队中");
queue.enQueue("q"); //元素依次挨个进行调用方法进行入队
queue.enQueue("s");
queue.enQueue("c");
queue.enQueue("f");
queue.enQueue("t");
System.out.println();
System.out.println("从队头到队尾依次输出队列中所有元素");
LinkedNode<String> i = queue.getFront();
LinkedNode<String> j = queue.getRear();
while (i !=j.getNext()){
System.out.println(i.getData());
i=i.getNext();
}
System.out.println("出队两个元素并将元素输出");
System.out.println(queue.deQueue());
System.out.println(queue.deQueue());
System.out.println("此时再取队头元素并输出,即:"+queue.getHead());
System.out.println("从队头到队尾输出剩余对内元素");
LinkedNode<String> p = queue.getFront();
do {
System.out.println(p.getData());
p=p.getNext();
}while (p != (j.getNext()));
}
}
运行结果
以上就是本文全部内容,如果它对您有帮助,请您帮我点个赞,这对我真的很重要