资讯专栏INFORMATION COLUMN

【数据结构】——队列 (链队列和基于Java的运算实现)

ZoomQuiet / 1186人阅读

摘要:目录链队列链队列基本运算实现基本运算实现链队列概述一种限制在表头删除和表尾插入操作的单链表。

目录

链队列

基本运算实现

链队列

概述:一种限制在表头删除和表尾插入操作的单链表。

图示:

基本运算实现

//链表结点类public class QueueNode {    //数据域    private Object data;    //指针域    private QueueNode next;    public QueueNode() {    }    public QueueNode(Object data, QueueNode next) {        this.data = data;        this.next = next;    }    public Object getData() {        return data;    }    public void setData(Object data) {        this.data = data;    }    public QueueNode getNext() {        return next;    }    public void setNext(QueueNode next) {        this.next = next;    }}
public class LinkQueue {    //定义队头指针    QueueNode front = new QueueNode();    //定义队尾指针    QueueNode rear = new QueueNode();    //构造空队列    public void InitQueue() {        //尾指针指向头结点        rear = front;        rear.setNext(null);    }    //判队空    public boolean QueueEmpty() {        //头尾指针相等队列为空        return rear == front;    }    //入队列    public void EnQueue(Object x) {        //申请新结点        QueueNode queueNode = new QueueNode();        //数据域赋值        queueNode.setData(x);        //指针域置空        queueNode.setNext(null);        //新结点链到原队尾结点之后        rear.setNext(queueNode);        //队尾指针指向新的队尾结点        rear = queueNode;    }    //取队头元素    public Object GetFront() {        //判断队列是否为空        if (QueueEmpty()) {            System.out.println("Queue underflow!");            return null;        } else {            //返回原队头元素值            return front.getNext().getData();        }    }    //出队列    public Object DeQueue() {        //判断队列是否为空        if (QueueEmpty()) {            System.out.println("Queue underflow!");            return null;        } else {            //申请新结点            QueueNode queueNode;            //新结点指向头结点            queueNode = front;            //头指针指向原队头结点            front = front.getNext();            //返回原队头结点的数据值            return queueNode.getData();        }    }    //遍历队列    public void LinkQueueShow() {        //申请新结点        QueueNode p;        //新结点指向头结点        p = front;        //定义一个状态值        int i = -1;        //循环输出队列元素结点值        while (p != null) {            //跳过输出为null的头结点            if (i == -1) {                i++;                p = p.getNext();            }            System.out.println(p.getData());            //移动指针,使其指向下一个结点            p = p.getNext();        }    }}
public class LinkQueueTest {    public static void main(String[] args) {        //创建链队列对象        LinkQueue linkQueue = new LinkQueue();        //构造空队列        linkQueue.InitQueue();        //判队空        boolean b = linkQueue.QueueEmpty();        System.out.println("队列是否为空:" + b);        //入队列        linkQueue.EnQueue("qq");        linkQueue.EnQueue("ww");        linkQueue.EnQueue("ee");        linkQueue.EnQueue("rr");        //遍历队列        System.out.println("遍历队列:");        linkQueue.LinkQueueShow();        //取队头元素        Object o = linkQueue.GetFront();        System.out.println("队头元素为:" + o);        System.out.println();        //出队列        linkQueue.DeQueue();        linkQueue.DeQueue();        //遍历队列        System.out.println("遍历队列:");        linkQueue.LinkQueueShow();        //取队头元素        Object o1 = linkQueue.GetFront();        System.out.println("队头元素为:" + o1);        //判队空        boolean b1 = linkQueue.QueueEmpty();        System.out.println("队列是否为空:" + b1);    }}

运行结果:


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123035.html

相关文章

  • SegmentFault 技术周刊 Vol.31 - 码农也要学算法

    摘要:记作称为算法的渐进时间复杂度,简称时间复杂度。学习数据结构与算法之链表链表一种常见的数据结构,可以存储有序的元素集合。首先在大的分类上,它们都是散列算法。 showImg(https://segmentfault.com/img/bVSDvj?w=900&h=385); 当人工智能、AlphaGo、无人驾驶、智能投顾等词语不断在人们视野中出现的时候,意味着我们正步入一个算法的时代。计算...

    cgspine 评论0 收藏0
  • 【备战春招/秋招系列】美团Java面经总结进阶篇 (附详解答案)

    摘要:我在前面的文章中也提到了应该怎么做自我介绍与项目介绍,详情可以查看这篇文章备战春招秋招系列初出茅庐的程序员该如何准备面试。因此基于事件消息对象驱动的业务架构可以是一系列流程。 showImg(https://user-gold-cdn.xitu.io/2018/11/14/16711ac29c2ae52c?w=928&h=531&f=png&s=798562); 一 消息队列MQ的...

    chengjianhua 评论0 收藏0
  • Java知识点总结

    摘要:线程池中的和有什么不同直接提交的队列该功能由对象提供。若大于最大线程数,则执行拒绝策略。因为对于固定大小的线程池来说,不存在线程数量的动态变化,所以最大线程数等于核心线程数。返回核心线程数为,最大线程数为无穷大的线程池。 索引的实现方式 1、B+树 我们经常听到B+树就是这个概念,用这个树的目的和红黑树差不多,也是为了尽量保持树的平衡,当然红黑树是二叉树,但B+树就不是二叉树了,节点下...

    I_Am 评论0 收藏0
  • Java知识点总结

    摘要:线程池中的和有什么不同直接提交的队列该功能由对象提供。若大于最大线程数,则执行拒绝策略。因为对于固定大小的线程池来说,不存在线程数量的动态变化,所以最大线程数等于核心线程数。返回核心线程数为,最大线程数为无穷大的线程池。 索引的实现方式 1、B+树 我们经常听到B+树就是这个概念,用这个树的目的和红黑树差不多,也是为了尽量保持树的平衡,当然红黑树是二叉树,但B+树就不是二叉树了,节点下...

    ACb0y 评论0 收藏0
  • Java知识点总结

    摘要:线程池中的和有什么不同直接提交的队列该功能由对象提供。若大于最大线程数,则执行拒绝策略。因为对于固定大小的线程池来说,不存在线程数量的动态变化,所以最大线程数等于核心线程数。返回核心线程数为,最大线程数为无穷大的线程池。 索引的实现方式 1、B+树 我们经常听到B+树就是这个概念,用这个树的目的和红黑树差不多,也是为了尽量保持树的平衡,当然红黑树是二叉树,但B+树就不是二叉树了,节点下...

    Lorry_Lu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<