Java_LinkedQueue 链队列分享

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()));
    }
}

运行结果

结果截图


以上就是本文全部内容,如果它对您有帮助,请您帮我点个赞,这对我真的很重要

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值