数据结构--队列实现(顺序循环队列、链式队列)

从ESP/ABS选型看轮速传感器:为什么你的车用了AK+PWM+7/14mA三种协议? 本文深入解析了汽车轮速传感器的三种主流协议(7/14mA电流型、PWM型和AK协议型)及其混合应用场景。通过对比不同协议的技术特点、成本效益和工程挑战,揭示了现代车辆采用多种传感器协议背后的设计逻辑,包括成本控制、性能平衡和冗余设计等关键因素。 阅读详情

队列

队列(queue)是一种特殊的线性表,其插入和删除操作分别在线性表的两端进行。

在这里插入图片描述

队列的抽象数据类型

package pers.zhang.queue;

/**
 * @author zhang
 * @date 2020/1/17 - 11:35
 *
 * 队列的接口
 */
public interface QQueue<T> {

    //判断队列是否为空
    boolean isEmpty();

    //元素x入队
    void enqueue(T x);

    //出队,返回队头元素
    T dequeue();
}

队列的实现

在这里插入图片描述

顺序队列

存在假溢出问题!不建议使用
在这里插入图片描述

顺序循环队列

在这里插入图片描述
使用模拟循环的方式避免假溢出:
在这里插入图片描述
实现:

package pers.zhang.queue;

/**
 * @author zhang
 * @date 2020/1/17 - 11:45
 *
 * 顺序循环队列
 */
public class SeqQueue<T> implements QQueue<T> {

    //存储队列数据的Object数组
    private Object element[];

    //队头和队尾引用
    private int front, rear;

    //构造
    public SeqQueue(int length){
        if(length < 64)
            length = 64;
        this.element = new Object[Math.abs(length)];//设置队列容量最小值
        this.front = this.rear = 0;//构造空队列
    }

    //默认构造
    public SeqQueue(){
        this(64);
    }

    //判断队列是否为空
    @Override
    public boolean isEmpty() {
        return this.front == this.rear;
    }

    //元素x入队,空对象不能入队
    @Override
    public void enqueue(T x) {
        if(x == null)
            return;
        if(this.front == (this.rear + 1) % this.element.length){//队满,扩容
            Object[] temp = this.element;
            this.element = new Object[temp.length * 2];//重新申请一个数组
            int j = 0;
            for(int i = this.front; i != this.rear; i = (i + 1) % temp.length)
                this.element[j++] = temp[i];
        }
        this.element[this.rear] = x;//插入数据
        this.rear = (this.rear + 1) % this.element.length;//移动队尾
    }

    //出队,返回队头元素
    @Override
    public T dequeue() {
        if(isEmpty())//空队列返回null
            return null;
        T temp = (T) this.element[this.front];
        this.front = (this.front + 1) % this.element.length;
        return temp;
    }

    @Override
    public String toString(){                     //返回队列所有元素的描述字符串,形式为“(,)”,按照队列元素次序
        String str = "(";
        if (!isEmpty()){
            str += this.element[this.front].toString();
            int i = (this.front+1) % this.element.length;
            while(i != this.rear){
                str += ", "+this.element[i].toString();
                i = (i + 1) % this.element.length;
            }
        }
        return str + ")";
    }
}

链式队列

在这里插入图片描述

package pers.zhang.queue;

import pers.zhang.linearList.Node;

/**
 * @author zhang
 * @date 2020/1/17 - 12:48
 *
 * 链式队列
 */
public class LinkedQueue<T> implements QQueue<T> {

    //头节点和尾节点引用
    private Node<T> front, rear;

    //构造空队列
    public LinkedQueue(){
        this.front = this.rear = null;
    }

    //判断队列是否为空
    @Override
    public boolean isEmpty() {
        return this.front == null && this.rear == null;
    }

    //元素x入队,空对象不操作
    @Override
    public void enqueue(T x) {
        if(x == null)
            return;
        Node<T> q = new Node<T>(x, null);
        if(this.front == null)
            this.front = q;//空队插入
        else
            this.rear.next = q;//插入队尾
        this.rear = q;
    }

    //出队,返回队头元素
    @Override
    public T dequeue() {
        if(isEmpty())
            return null;
        T temp = this.front.data;
        this.front = this.front.next;//删除队头节点
        if(this.front == null)
            this.rear = null;
        return temp;
    }

    //返回队列所有元素的描述字符串,形式为“(,)”
    @Override
    public String toString(){//算法同不带头结点的单链表
        String str = "(";
        for (Node<T> p=this.front;  p!=null;  p=p.next){
            str += p.data.toString();
            if (p.next != null)
                str += ", ";                               //不是最后一个结点时后加分隔符
        }
        return str + ")";                                    //空表返回()
    }
}

测试

package pers.zhang.queue;

/**
 * @author zhang
 * @date 2020/1/17 - 12:55
 */
public class Queue_ex {
    public static void main(String args[])
    {
        SeqQueue<Integer> que = new SeqQueue<Integer>(5);
        que.enqueue(new Integer(10));
        que.enqueue(new Integer(20));
        System.out.println("dequeue : "+que.dequeue().toString()+"  "+que.dequeue().toString()+"  ");
        System.out.println(que.toString());
        que.enqueue(new Integer(30));
        que.enqueue(new Integer(40));
        que.enqueue(new Integer(50));
        que.enqueue(new Integer(60));
        System.out.println(que.toString());
        que.enqueue(new Integer(70));
        System.out.println(que.toString());

        LinkedQueue<Integer> q = new LinkedQueue<Integer>();
        System.out.print("enqueue: ");
        for (int i=1; i<=5; i++)
        {
            Integer intobj = new Integer(i);
            q.enqueue(intobj);
            System.out.print(intobj+"  ");
        }
        System.out.println("\n"+q.toString());

        System.out.print("dequeue : ");
        while (!q.isEmpty())
            System.out.print(q.dequeue().toString()+"  ");
        System.out.println();
    }
}
/*
dequeue : 10  20  
()
(30, 40, 50, 60)
(30, 40, 50, 60, 70)
enqueue: 1  2  3  4  5  
(1, 2, 3, 4, 5)
dequeue : 1  2  3  4  5  


*/
一文吃透 BMS:动力电池与储能共用的电池管控全架构详解 BMS作为电池系统的核心控制器,其技术深度和系统复杂性不容小觑。动力电池与储能系统虽然应用场景不同,但在核心架构上共享大量基础技术。成功的BMS设计需要在精度、可靠性、成本、功耗之间找到最佳平衡点。未来,随着电池技术的进步和智能化需求的提升,BMS将向着更高集成度、更强智能化、更优经济性的方向发展。无论是汽车工程师还是储能系统设计师,深入理解BMS的全栈架构,掌握其核心技术原理,都将是应对未来能源存储挑战的关键能力。核心要点回顾BMS采用分层分布式架构,硬件是基础,算法是灵魂。 阅读详情

相关推荐

老N卡福音:GT1030/GTX1050在MacOS Ventura 13.2上的完整驱动指南(附实测截图)

本文详细介绍了如何在MacOS Ventura 13.2上通过OCLP工具链驱动GT1030和GTX1050等老款NVIDIA显卡,涵盖硬件兼容性验证、BIOS设置、OpenCore配置、驱动安装及性能测试全流程。实测数据显示,这些基于Pascal和Maxwell架构的显卡在当代MacOS系统中仍能发挥实用价值,为老N卡用户提供完整解决方案。

weixin_30832143的博客 633

队列

文章目录队列定义类型复杂度队列的属性及概念队列的方法类型及适用场景消息队列概念模式优点缺点消息队列的选择注意事项使用场景注意事项 队列 定义 队列是一种特殊的线性表,其特殊之处在于它只允许表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 队列是一种受限的线性结构 队列只允许在头部...

SToNE的博客 445

activiti(六):activiti7的数据表和字段的解释

介绍activiti7的数据表和各表字段的含义,对于学习activiti7工作流引擎的运行过程很有帮助!

no problem的博客 1万+

java数据结构-顺序循环队列与顺序优先级队列及进程管理应用

顺序循环队列 class SeqQueue { static final int defaultSize=10; int front; int rear; int maxSize; Object[] value; int count; public SeqQueue() { initiate(defaultSiz...

m0_37942202的博客 336

计量经济学——事件研究法/事件分析法

计量经济学——事件研究法/事件分析法

weixin_46189461的博客 6752

利用 vivado实现加减法器的设计

本科计组实验:利用 vivado实现加减法器的设计

qq_52052302的博客 1万+

循环队列的插入与删除

队列:一种可以实现“先进先出”的存储结构

Lookdrama的博客 6302

GD32 TLI+IPA实战:5分钟搞定RGB888屏幕显示,并开启2D图形加速

本文详细介绍了如何使用GD32微控制器的TLI和IPA功能快速驱动RGB888屏幕并开启2D图形加速。通过硬件配置、时序设置和显存管理,开发者可以高效实现图形界面渲染,并利用IPA加速器提升性能,适用于嵌入式GUI开发等场景。

weixin_29163797的博客 231

数据结构(四)队列

队列 队列的定义及基本运算   栈是一种后进先出的数据结构,在实际问题中还经常使用一种“先进先出”的数据结构: 即插入在表一端进行,而删除在表的另一端进行,将这种数据结构称为队或队列,把允许插入的一端叫队尾(rear) ,把允许删除的一端叫队头(front)。 队列的存储实现及运算实现 与线性表、栈类似,队列也有顺序存储和链式存储两种存储方法。 基本操作: (1) InitQ...

b13766339702的博客 632

AI故障预测系统架构设计:5个核心模块+3种主流架构,收藏这篇就够了

深夜11点,某汽车工厂的生产线突然停机——核心机器人的轴承磨损过度导致卡壳。维修人员连夜抢修,直接损失超过50万元,还延误了客户的交货期。传统的“事后维修”或“定期维护”要么代价高昂,要么防不胜防。AI故障预测系统的出现,让“精准维护”成为可能——它能通过传感器数据提前7-30天预警故障,将停机损失降低80%以上。知道要做故障预测,却不知道怎么搭系统——数据怎么采集?特征怎么提取?模型怎么部署?架构怎么选?本文将解决这些问题:我们会拆解AI故障预测系统的5个核心模块,分析3种主流架构。

AIGC应用创新大全的博客 1020

PMP第一章:引论介绍

PMP第一章:引论介绍 1.PMBOK指南概述和目的 项目管理标准 通用词汇 道德与专业行为规范 2.基本要素 项目 项目管理的重要性 项目、项目集、项目组合以及运营管理之间的关系 指南的组成部分 裁剪 项目管理商业文件 3.项目管理标准 标准是基于权威、惯例或共识而建立并用作模式或范例的文件。 标准确认了在大多数时候都被大多数项目视作良好实践的过程。 4.道德与专业行为规范 责任:对自己所做的决策或未做决策、所采取的行为或未采取行为,以及相应的后果,承担责任 尊重:对自己、他人和委托给自己的资源

zhengzaifeidelushang的博客 827

PTA-队列练习题

选择题 2-1在少用一个元素空间的循环队列(m为最大队列长度)是满队列的条件( )。 A.rear== front B.(rear+1)%m==front C.(rear+1) == front D.front ==(front+1)%m 2-2循环队列存储在数组A[0…n-1]中,其头尾指针分别为f和r,头指针f总是指向队头元素,尾指针r总是指向队尾元素的下一个位置,假设队列不空,元素出队时头尾指针的操作为( )。 A.f=(f+1)%n B.f=f+1 C.r=(r+1)%n D.f=(f+1)%(n

ZYQ_37210462的博客 5092

SAP FICO CBS接口-银企直连付款平台功能开发说明书(包括测试样例、FS)

SAP FICO CBS接口-银企直连付款平台功能开发说明书(包括测试样例、FS)

我好像病了的博客 2449

《数据结构初阶》实现顺序循环队列和链式队列

数组实现循环队列、单链表实现队列接口实现全解

m0_62171658的博客 4355

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

数据结构之顺序队列、链式队列、循环队列-c语言实现

文章来源:http://blog.seclibs.com/数据结构之顺序队列、链式队列、循环队列-c语言实/ 在上一篇文章里,说了队列的相关内容,其中除了这篇文章说的顺序队列、链式队列和循环队列三个,还提到了阻塞队列和并发队列,这两个因为能力原因,还没能实现,这个坑等以后再来补。 回来说这次实现的三个队列,首先是顺序队列,顺序队列是基于数组来实现的队列,在原数组的实现基础上增加了head和tail...

无心的博客 585

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【数据结构】队列知识点总结--定义;基本操作;队列的顺序实现;链式存储;双端队列;循环队列

队列;队列的顺序实现和链式存储;双端队列;循环队列的知识点总结

小人物,大梦想! 1568

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数据结构的顺序栈、链式栈、链队列、循环队列的实现

如何实现栈和队的操作

love_786的博客 803

通过Java实现数据结构:链式队列以及顺序循环队列

通过Java实现链式队列、顺序循环队列以及相关方法

2301_79698279的博客 1445

重温数据结构:队列的链式实现、顺序实现及循环队列

1.队列的链式存储实现 队列接口: package edu.njupt.zhb; /* *@author: ZhengHaibo *web: http://blog.youkuaiyun.com/nuptboyzhb *mail: zhb931706659@126.com *2014-3-12 Nanjing,njupt,China */ public interface MyQ

郑海波(莫川)的优快云博客 1719

《数据结构与算法之美》笔记——队列,数组实现顺序队列,数组实现循环队列,链式队列

一、什么是队列? 1.先进者先出,这就是典型的「队列」结构。 2.支持两个操作: 入队 enqueue(),放一个数据到队尾; 出队 dequeue(),从队头取一个元素。 3.所以,和栈一样,队列也是一种操作受限的线性表。 二、如何实现队列? 1.队列API public interface Queue<T> { public void enqueue(T item); //入...

Shine_rise的博客 485

队列实现一个排队系统c语言_数据结构之顺序队列、链式队列、循环队列-c语言实现...

文章来源:数据结构之顺序队列、链式队列、循环队列-c语言实现 | Vesel『无心』'Blog在上一篇文章里,说了队列的相关内容,其中除了这篇文章说的顺序队列、链式队列和循环队列三个,还提到了阻塞队列和并发队列,这两个因为能力原因,还没能实现,这个坑等以后再来补。回来说这次实现的三个队列,首先是顺序队列,顺序队列是基于数组来实现的队列,在原数组的实现基础上增加了head和tail两个结构体成员,用...

weixin_39997310的博客 393

《数据结构初阶》【顺序栈 + 链式队列 + 循环队列】

博客的内容主要划分为:数据结构的介绍+数据结构的实现+数据结构的OJ练习。主要涉及的数据结构有:顺序栈、链式队列表、循环队列。

序属秋秋秋的博客 2903

数据结构(线性表的顺序实现、循环队列的实现、栈的链式实现、栈的顺序实现)

数据结构(线性表的顺序实现、循环队列的实现、栈的链式实现、栈的顺序实现)

m0_64562382的博客 591

【数据结构算法】⑤、栈和队列、栈的结构-顺序实现栈流程、链式表的栈实现流程、栈和递归的概念、递归的斐波那契实现、队列和循环队列的基本原理、队列溢出情况下应该做用什么替代、为什么需要循环队列

【数据结构算法】⑤、栈和队列、栈的结构-顺序实现栈流程、链式表的栈实现流程、栈和递归的概念、递归的斐波那契实现、队列和循环队列的基本原理、队列溢出情况下应该做用什么替代、为什么需要循环队列

慢慢来就很快。 816

循环队列的顺序实现和链式实现 #数据结构(C,C++)

数据结构队列实现代码合集 文章主要记录了队列数据结构的两种实现方式:顺序循环队列和链式队列。顺序循环队列通过牺牲一个存储单元解决假溢出问题,提供了初始化、判空、判满、入队、出队和获取队首等操作。链式队列采用带头尾节点的单链表实现,同样包含初始化、判空、入队、出队和获取队首等功能。所有代码实现强调实用性,参考了王道和严蔚敏的数据结构教材。完整代码可在GitCode仓库查看。

mengzh的博客 277

数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

本文转载至:http://www.cnblogs.com/smyhvae/p/4793339.html 一、队列的概念:   队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作。 队列中允许进行插入操作的一端称为队尾,允许进行删除操

zhouzhiwengang的专栏 908
上一篇: Java并发--CountDownLatch类
下一篇: 数据结构--优先队列实现、模拟线程调度
吴声子夜歌
博客等级 码龄9年 2688粉丝 2269原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值