循环队列的介绍与实现

文章目录

        • 1 循环队列定义
        • 2 循环队列基本操作
        • 3 循环队列代码实现
        • 4 补充

1 循环队列定义

循环队列:即顺序存储的队列,是为了避免“假溢出”而利用%运算符将队列首尾相接连成一个环状的队列,称为循环队列。

引入循环队列克服顺序队列中存在的“假上溢”现象。

假上溢:

因为在入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。因此,尽管队列中实际的元素个数远远小于向量空间的规模,但也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为“假上溢”。
简而言之就是数组中有空位置却不能再做入队,出队操作

2 循环队列基本操作

  1. 队空与队满
    为什么要分析队空队满的条件?

循环队列是顺序存储的队列,而顺序队列在做入队时要先判断队列是否已满,即是否已经用完预分配的空间,出队时要判断队列是否已空。

在这里插入图片描述
约定:

front指向队列中实际头元素的位置
rear 指向队列中实际尾元素的后一位置

  1. 入队

在这里插入图片描述

rear=(rear+1%MAXSIZE
queue[rear]=x
  1. 出队

在这里插入图片描述

front=(front+1%MAXSIZE
x=queue[front]
  1. 队空:front==rear

在这里插入图片描述

  1. 队满:front==(rear+1)% MAXSIZE

在这里插入图片描述

3 循环队列代码实现

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAXSZIE (20)typedef int ElementType;
typedef struct SqQueue {ElementType data[MAXSZIE];int front;int rear;
} *Queue;Queue InitQueue(void)
{Queue Q = (Queue)malloc(sizeof(struct SqQueue));Q->front = 0;Q->rear = 0;return Q;
}int IsEmpty(Queue Q)
{return Q->front == Q->rear;
}int IsFull(Queue Q)
{return (Q->rear + 1) % MAXSZIE == Q->front;
}void EnQueue(Queue Q, ElementType e)
{if (IsFull(Q)) {return;}Q->data[Q->rear] = e;Q->rear = (Q->rear + 1) % MAXSZIE;
}void DeQueue(Queue Q, ElementType *e)
{if (IsEmpty(Q)) {return;}*e = Q->data[Q->front];Q->front = (Q->front + 1) % MAXSZIE;
}int main(void)
{ElementType e;Queue Q = InitQueue();srand((unsigned)time(NULL));for (int i = 0; i < 10; i++) {e = rand() % 100;EnQueue(Q, e);}while (!IsEmpty(Q)) {DeQueue(Q, &e);printf("%d ", e);}
}

在这里插入图片描述

4 补充

  1. 为什么要设计堆栈?它有什么独特用途?

① 调用函数或子程序非它莫属;
② 递归运算的有力工具;
③ 用于保护现场和恢复现场;
④ 简化了程序设计的问题。

  1. 为什么要设计队列?它有什么独特用途?

① 离散事件的模拟(模拟事件发生的先后顺序,例如 CPU芯片中的指令译码队列);
② 操作系统中的作业调度(一个CPU执行多个作业);
③ 简化程序设计。

  1. 什么叫“假溢出” ?如何解决?

答:在顺序队中,当尾指针已经到了数组的上界,不能再有入队操作,但其实数组中还有空位置,这就叫“假溢出”。
解决假溢出的途径———采用循环队列。

  1. 线性表、栈、队的异同点:

相同点

逻辑结构相同,都是线性的;都可以用顺序存储或链表存储;栈和队列是两种特殊的线性表,即受限的线性表(只是对插入、删除运算加以限制)。

不同点

① 运算规则不同:线性表为随机存取;
而栈是只允许在一端进行插入和删除运算,因而是后进先出表LIFO;
队列是只允许在一端进行插入、另一端进行删除运算,因而是先进先出表FIFO。
② 用途不同:线性表比较通用;堆栈用于函数调用、递归和简化设计等;队列用于离散事件模拟、OS作业调度和简化设计等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482202.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5年内开炸第一颗小行星,改变其轨道!中国计划建立小行星预警监测系统

来源&#xff1a;大数据文摘不知道多少科幻片中&#xff0c;小行星成为了人类灭绝的罪魁祸首。在超高的速度加持下&#xff0c;直径只有十几公里的小行星撞击地球&#xff0c;都有可能造成人类毁灭。为了提前预警这样的事件发生&#xff0c;人类做出了不少努力。美国航天局NASA…

算术逻辑单元设计

文章目录1 基本逻辑符号1.1 ALU1.2 逻辑符号1.3 复合逻辑2 加法器设计2.1 一位加法器2.2 进位产生原理2.2 多位二进制位加法器1 基本逻辑符号 1.1 ALU ALU功能&#xff1a; 算术运算&#xff1a;加、减、乘、除等 逻辑运算&#xff1a;与、或、非、异或等 辅助功能&#xff1a…

数字孪生城市框架与全球实践洞察(2022)

来源 &#xff1a; 世界经济论坛编辑 &#xff1a;蒲蒲全球数字孪生市场蓬勃发展。据预测&#xff0c;到2030年&#xff0c;数字孪生技术的应用将为城市规划、建设、运营节省成本达到2800亿美元。市场规模方面&#xff0c;2020年全球数字孪生市场规模为31亿美元&#xff0c;预计…

2 计算机组成原理第二章 数据的表示和运算 定点数运算 浮点数运算

文章目录1 进制转换2 定点数表示及其运算2.1 定点数表示2.1.1 真值→补码2.1.2 补码→真值2.1.3 [XT]补 →[-XT]补2.1.4 真值、原码、反码、补码转换关系图形总结2.2.4 移码2.2 定点数运算2.2.1 移位运算2.2.2 定点数加减运算2.2.3 溢出判断判溢出方法一判溢出方法二判溢出方法…

Gartner:AI和自动化将是新一代SASE的关键能力

来源&#xff1a;安全内参近年来&#xff0c;安全访问服务边缘&#xff08;SASE&#xff09;技术快速发展&#xff0c;得到了较广泛的行业应用。SASE架构通常包括了SD-WAN、FWaaS、安全Web网关、云访问安全代理&#xff08;CASB&#xff09;和零信任网络访问&#xff08;ZTNA&a…

MIPS指令与MIPS汇编语言

文章目录1 MIPS简介2 MIPS指令系统的特点3 MIPS寄存器4 MIPS指令格式4.1 R-Type型指令4.2 l-Type型指令4.3 J-Type型指令4.4 三类指令小结5 MIPS例题6 MIPS过程调用6.1 过程调用和栈6.2 MIPS中栈的实现6.3 栈帧的概念6.4 MIPS中的过程调用&#xff08;假定P调用Q&#xff09;6.…

DeepMind爆发史:决定AI高峰的“游戏玩家”|深度学习崛起十年

来源&#xff1a;OneFlow社区翻译&#xff1a;刘晓祯、沈佳丽、胡燕君、许晨阳、周亚坤很少有人会否认&#xff0c;过去十年&#xff0c;AI领域最耀眼的明星组织当属DeepMind&#xff0c;没有之一。那个震动世界的高光时刻发生在2016年3月的一天&#xff0c;AI选手AlphaGo击败了…

链队的介绍与实现

文章目录1 链队定义2 链队基本操作3 代码实现1 链队定义 队列的链式存储结构简称为链队列&#xff0c;它是限制仅在表头删除和表尾插入的单链表。显然仅有单链表的头指针不便于在表尾做插入操作&#xff0c;为此再增加一个尾指针&#xff0c;指向链表上的最后一个结点。 type…

二叉树介绍与代码实现

文章目录1 树的基本概念1.1 树的形式定义1.2 树的递归定义1.3 树的基本术语1.4 二叉树的递归定义1.5 存储方法1.6 满二叉树VS完全二叉树2 二叉树的性质3 代码实现1 树的基本概念 1.1 树的形式定义 T{D&#xff0c;R} D为树T中包含n个结点的有限集合&#xff0c;R为树中结点之间…

2022先进计算七大趋势

来源&#xff1a;CBInsights 中文编辑&#xff1a;蒲蒲作为智能社会的底座、数字经济的引擎&#xff0c;算力的重要性已经被提到一个前所未有的高度。当下&#xff0c;算力的提升仍然面临着来自多个维度的挑战。不论是硬件层面还是架构层面&#xff0c;算力发展都亟需变革。先进…

类脑计算将何去何从?

来源&#xff1a;内容由半导体行业观察&#xff08;ID&#xff1a;icbank&#xff09;编译&#xff1a;nature.摘要类脑计算新技术有望通过完全不同的方式处理信息&#xff0c;能效极高&#xff0c;并能处理我们加速产生的大量非结构化和嘈杂的数据。为了实现这一承诺&#xff…

1 计算机网络体系结构与OSI参考模型

文章目录1 计算机网络概述1.1 计算机网络概念1.2 计算机网络的分类2 OSI 七层参考模型应用层表示层会话层传输层网络层数据链路层物理层3 OSI参考模型与网络排错4 OSI参考模型与网络安全5 TCP/IP协议和OSI参考模型1 计算机网络概述 1.1 计算机网络概念 计算机网络概念&#xf…

一个故事讲完 CPU 的工作原理

来自&#xff1a;知乎 作者&#xff1a;柳两丛 www.zhihu.com/question/40571490/answer/718942643上二年级的小明正坐在教室里。现在是数学课&#xff0c;下午第一节&#xff0c;窗外的蝉鸣、缓缓旋转的吊扇让同学们昏昏欲睡。此时&#xff0c;刘老师在黑板上写下一个问题&a…

2 计算机网络性能指标

文章目录速率带宽吞吐量时延时延带宽积往返时间网络利用率速率 连接在计算机网络上的主机在数字信道上传送数据位数的速率&#xff0c;也称为data rate或bit rate。 单位是b/s, kb/s, Mb/s, Gb/s. 比特&#xff08;bit&#xff09;是计算机中数据量的单位&#xff0c;也是信息论…

Anthropic 公司研究人员从简单的 AI 中获得关于 Transformer 的新理解

来源&#xff1a;ScienceAI编辑 &#xff1a;橘子皮在过去的两年里&#xff0c;人工智能程序的语言流畅度达到了惊人的水平。其中最大和最好的都是基于 2017 年发明的称为 Transformer 的架构。它以方程式列表的形式作为程序遵循的一种蓝图。但除了这个简单的数学大纲之外&…

3 物理层 数据通信基础知识 奈氏准则与香农定理 物理层传输介质 信道复用技术

文章目录1 物理层基本概念2 数据通信的基础知识2.1 典型的数据通信系统模型2.2 与通信相关的几个术语2.3 有关信道的几个概念2.4 基带(baseband)信号和带通(band pass)信号2.5 几种最基本的调制方法2.6 网卡传送信号时的编码格式2.7 信道的极限容量2.8 信道能够通过的频率范围2…

向真实世界应用进军:持续自监督学习的挑战

来源&#xff1a;图灵人工智能编译&#xff1a;OGAI编辑&#xff1a;陈彩娴在 Yann Lecun 等人的推动下&#xff0c;自监督学习成为了深度学习领域最受瞩目的技术之一。互联网世界源源不断产生的数据流无疑是充分发挥自监督学习能力的最佳土壤。然而&#xff0c;将自监督学习应…

人类“超级大脑”背后的规模法则

来源&#xff1a;集智俱乐部作者&#xff1a;郭瑞东 编辑&#xff1a;邓一雪摘要不同动物的大脑具有不同形状和大小。大自然赋予像人类这样脑容量大的灵长类动物比例较大的大脑皮层。然而&#xff0c;比较研究表明&#xff0c;分配给大脑白质连接&#xff08;大脑区域间长距离沟…

Meta AI 宣布对人脑和语言处理进行长期研究

来源&#xff1a;ScienceAI编辑&#xff1a;绿萝人类的大脑长期以来一直是一个难题——它是如何发展的&#xff0c;它如何继续进化&#xff0c;它被开发和未开发的能力。人工智能 (AI) 和机器学习 (ML) 模型也是如此。正如人类大脑创建的 AI 和 ML 模型日益复杂一样&#xff0c…

10年100亿!“新基石研究员”项目正式发布

来源&#xff1a; 中国科学报文&#xff1a;《中国科学报》记者 赵广立4月30日&#xff0c;《中国科学报》获悉&#xff0c;一项总投入达100亿元、面向基础研究领域的社会资助项目——“新基石研究员项目”正式发布。在国家有关部门的指导下&#xff0c;“新基石研究员项目”由…