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

手把手教你玩转CPU微架构专栏--​​​​第二章:流水线——微架构的“效率引擎”​​​​2.4 超标量与超线程:如何突破“单指令流”的限制? 例如,Intel酷睿i5-13600K拥有6个性能核(P核,支持超线程,共12线程)和8个能效核(E核,无超线程,共8线程),兼顾多线程性能与能效比。通过引入“物理寄存器”替代“逻辑寄存器”(如x86的RAX、RBX),消除数据冒险中的“假依赖”(False Dependency)。引入“混合架构”(Performance Core+Efficient Core),大核(P核)专注高性能任务,小核(E核)处理后台任务;​:6发射超标量,IPC≈3.5(通过3D V-Cache优化缓存,进一步提升效率)。 阅读详情

队列

队列(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  


*/
实战:RK3568 Android14 调试 MIPI DSI 液晶屏 LCD1_RST -> 对应原理图网络连接到 GPIO。LCD1_PWR_EN ->用于给屏幕 VCC 供电。LCD0_BL_EN / LCD0_BL_PWM -> MP3302 升压芯片驱动 LED 灯条。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/100f2be7f763494da1032464e272e63b.png&pinctrl {/* 配置 LCD_RST 和 LCD_EN */ 阅读详情

相关推荐

金智维KRPA实战:Excel自动化数据处理全流程解析

本文详细解析了金智维KRPA在Excel自动化数据处理中的全流程应用,涵盖COM接口和文件读写两种核心技术方案,以及销售报表生成、数据清洗和可视化仪表盘等实战案例。通过企业级应用的异常处理、性能优化和安全合规实践,显著提升数据处理效率和准确性,助力企业降本增效。

weixin_30329623的博客 598

队列

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

SToNE的博客 445

告别点不亮!STM32F103驱动HT1621段码屏的常见坑点与调试心得

本文详细解析了STM32F103驱动HT1621段码屏的五大常见问题及解决方案,包括硬件连接、时序控制、RAM地址映射等关键难点。通过实测数据和代码示例,帮助开发者快速排查显示异常问题,提升驱动开发效率。特别针对HT1621与STM32F103的兼容性问题提供了专业调试建议。

weixin_30925435的博客 379

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

STM32学习笔记 二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发

系列文章目录 一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁 文章目录系列文章目录前言一、配置CubeMX二、逻辑代码部分 前言 这次我用的板子是一个用STM32F103C8T6作为主控芯片的一个数据采集卡,两个LED灯连接的引脚是PB3与PB4,TX与RX引脚分别是PA9和PA10。 一、配置CubeMX 1、新建工程; 2、配置时钟源,在RCC里面的HSE配置的是晶振时钟; 3、配置程序烧录引脚SYS为SWD模式; 4、配置GPIO口,配置一个LE

遗忘丶的博客 1万+

三模冗余设计

在数字电路设计中,Voter模块(表决器) 和 三模冗余(Triple Modular Redundancy, TMR) 是高可靠性系统的核心设计技术,主要用于容错和抗辐射(如航天、医疗设备等关键领域)。容错机制:若任一模块故障(如SEU,单粒子翻转),其他两个模块仍能保证正确输出。功耗与面积:TMR会显著增加资源占用(约3倍),需权衡可靠性和成本。航天电子:抗辐射芯片(如FPGA)中用于防止单粒子翻转(SEU)。故障检测:可扩展设计以检测并隔离故障模块(如通过BIST)。

qq_45776815的博客 2055

循环队列的插入与删除

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

Lookdrama的博客 6302

echarts的坐标轴处理算法

参考原文:https://www.cnblogs.com/vicky-li/p/11653415.html。2、可用于双轴的情况,指定splitNumber,保证左右两边的线没有交叉显示的情况。1、设置echarts显示的最大最小值,让数据显示比较有起伏。处理echarts的一些问题。

HYeeee的博客 801

数据结构(四)队列

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

b13766339702的博客 632

基于深度学习YOLOv5的草莓成熟度检测系统详解(深度学习模型+UI界面+Python代码+训练数据集)

数据采集与预处理模块:负责收集草莓图像,并进行数据增强和标注。深度学习模型训练模块:使用YOLOv5模型进行草莓成熟度检测模型的训练。模型推理模块:加载训练好的模型,对输入图像或视频进行草莓成熟度检测。UI界面模块:提供用户交互界面,方便用户上传图像或视频进行成熟度检测。本文详细介绍了基于YOLOv5的草莓成熟度检测系统的构建过程,包括数据集的构建、模型的训练与推理、以及UI界面的设计。通过本文的指导,读者可以快速搭建一个高效的草莓成熟度检测系统,并应用于实际场景中。

斌擎科技 525

SAP CPI 如何代理第三方接口?

代理接口是指在系统 A 和系统 B 之间引入一个中间层(如 SAP CPI),由中间层负责接收来自系统 A 的请求,进行必要的处理或转换,然后将请求转发给系统 B。由于 OData 服务通常使用 JSON 格式的数据,而某些内部系统可能需要 XML 格式,因此我们添加一个 JSON 到 XML 的转换器,以确保数据格式的兼容性。为了确保返回的数据格式符合内部系统的要求,添加一个 XML 到 JSON 的转换器,将 OData 服务的响应从 XML 转换为 JSON。在集成包中,添加一个新的集成流,命名为。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1748

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

Python 实战:手语翻译系统——从视频到文本的智能转换

今天,我们用 Python 构建了一个。

Echo_Wish 344

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

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

m0_62171658的博客 4355

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

无心的博客 585

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

小人物,大梦想! 1568

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

如何实现栈和队的操作

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粉丝 2268原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值