数据结构基础篇(6)

二十三、队列的表示和操作的实现

  • 相关术语
    • 队列是仅在表尾进行插入操作,在表头进行删除操作的线性表
    • 表尾既a~n段,称对尾;表头a~1段,称队头
    • 它是一种先进先出(FIFO)的线性表
      • 入队:插入元素
      • 出队:删除元素
    • 队列的存储结构为链对或顺序对(常用循环顺序队)
  • 队列的常见应用
    • 脱机打印输出:按申请的先后顺序依次输出
    • 多用户系统中,多个用户排成队,分时循环使用cpu和主存
    • 按用户的优先级排成多个队,每个优先级一个队列
    • 实时控制系统中,信号按接收的先后顺序依次处理
    • 网络电文传输,按到达的时间先后顺序依次进行

队列的顺序表示和实现

  • 队列的物理存储可以用顺序存储结构,链式存储结构,队列的存储方式有两种,顺序队列和链式队列
  • 队列的顺序表示——用一维数组base[MAXQSIZE]
#define MAXQSIZE 100    //最大队列长度
Typedef struct
{QElemType *base;    //初始化的动态分配存储空间int front;    //头指针int rear;    //尾指针
}SqQueue;
  • 队列问题
    • 若数组大小为MAXQSIZE
      • rear=MAXQSIZE,发生溢出
      • front=0,rear=MAXQSIZE,再入队——真溢出
      • front=-,rear=MAXQSIEZE,在入队——假溢出
    • 解决假上溢方法
      • 将队中元素依次相对头方向移动
        • 缺点
          • 浪费时间,每移动依次,对中元素都要移动
  • 引用循环队列
    • 将对空间想象成一个循环的标,分配给队列m个存储单元循环使用,当rear是maxqsize时,向量的开始端空着,从头使用空着的空间,front为maxqsize,一样
    • base[0]接在base[MAXQSIZE-1]后,若rear+1==M,令rear=0;
    • 利用模运算(mod,求余)
      • 插入元素
        • Q.base[Q.rear]=x
        • Q.rear=(Q.rear+1)%MAXQSIZE
      • 删除元素
        • x=Q.base[s.front]
        • Q.front=(Q.front+1)%MAXQSIZE
    • 出现队空堆满都是front==rear
      • 解决方案
        • 再设一个标志区别
        • 再设一个变量,记录元素个数
        • 少用一个元素空间
          • 队空:front==rear
          • 队满:(rear+1)%MAXQSIZE==front
  • 循环队列类型定义
    • 队列初始化
Status InitQueue(SqQueue &Q)
{Q.base=new QElemType[MAXQSIZE]    //分配数组空间    //Q.base=(QElemType *) malloc(MAXQSIZE*sizeof(QElemType));if(!Q.base)exit(OVERFLOW);    //存储分配失败Q.front=Q.rear=0;    //头指针尾指针为0,队列为空return OK;
}

- 求循环队列长度

int QueueLength(SqQueue Q)
{return((Q.rear-Q.front+MAXQSIZE)%MAXQSIZE);
}

- 循环队列入队

Status EnQueue(SqQueue &Q,QElemType e)
{if((Q.rear+!)%MAXQSIZE==Q.front)return ERROR;    //判断是否队满Q.base[Q.rear]=e;    //新元素加入队尾Q.rear=(Q.rear+1)%MAXQSIZE;    //队尾指针+1return OK;
}

- 循环队列出队

Status DeQueue(SqQueue &Q,QElemType &e)
{if(Q.front==Q.rear)reutn ERROR;    //对空e=Q.base[Q.front];    //保存队头元素Q.front=(Q.front+1)%MAXQSIZE    //队头指针+1return OK;
}

- 取队头元素

SElemType GetHead(SqQuere Q)
{if(Q.front!=Q.rear)return Q.base[Q.front];    //返回指针元素的值,队头指针不变
}
  • 队列的链式存储结构
    • 用户无法估计所用队列长度,采用链队列
  • 链队列的类型定义
#define MAXQSIZE 100    //最大队列长度
typedef struct Qnode
{QElemType data;stuct Qnode *next;
}QNode,*QuenePtr;

- 链队列初始化

Status InitQueue(LinkQueue &Q)
{Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));if(!Q.front)exit(OVERFLOW);Q.front->next=NULL;reutrn OK;
}

- 销毁队列

Status DestroyQueue(LinkQueue &Q)
{while(Q.front){p=Q.front->next;free(Q.front);Q.front=p        }    return OK;
}

- 链队列元素入队

Status EnQueue(LinkQueue &Q,QElemType e)
{p=(QueuePtr)malloc(sizeof(QNode));if(!p)exit(OVERFLOW);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;return OK;
}

- 链队列元素出队

Status DeQueue(LinkQueue &Q,QElemType &e)
{if(Q.front==Q.rear)return ERROR;p=Q.front->next;e=p->data;Q.front->next=p->next;if(Q.rear==p)Q.rear=Q.front;delete p;return OK;
}

- 链队列的类型定义

#define MAXQSIZE 100    //最大队列长度
typedef struct Qnode
{QElemType data;stuct Qnode *next;
}QNode,*QuenePtr;

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

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

相关文章

YOLOv8 segment介绍

1.YOLOv8图像分割支持的数据格式: (1).用于训练YOLOv8分割模型的数据集标签格式如下: 1).每幅图像对应一个文本文件:数据集中的每幅图像都有一个与图像文件同名的对应文本文件,扩展名为".txt"; 2).文本文件中每个目标(object)占一行…

iReport的下载与安装

下载官网:Home - Jaspersoft Community 网盘下载: 链接:https://pan.baidu.com/s/1Oy5opY4GxPZ_mllTlBZ-2w 提取码:75do 安装就是双击后一直点击下一步 安装好了之后要配置jdk环境 iReport 目前 并不支持 高版本jdk 只支持…

TQSDRPI开发板教程:UDP收发测试

项目资源分享 链接:https://pan.baidu.com/s/1gWNSA9czrGwUYJXdeuOwgQ 提取码:tfo0 LWIP自环教程:https://blog.csdn.net/mcupro/article/details/139350727?spm1001.2014.3001.5501 在lwip自环的基础上修改代码实现UDP的收发测试。新建一…

嫁接打印:经济与实用的完美结合

在制造领域,寻求经济且好用的技术方案至关重要。而在模具制造中,3D 打印随形水路在提升冷却效率和产品良率方面的卓越表现已得到广泛认同。如何更经济的应用3D打印技术,就不得不说嫁接打印了。 在嫁接打印的制造过程中,产品的一部…

Codeforces Round 900 (Div. 3)

文章目录 A. How Much Does Daytona Cost?题意:题解:代码: B. Aleksa and Stack题意:题解:代码: C. Vasilije in Cacak题意:题解:代码: E. Iva & Pav题意&#xff1…

音视频开发—H264 SPS 和 PPS 参数说明

文章目录 序列参数集 (SPS, Sequence Parameter Set)SPS的主要内容: 图像参数集 (PPS, Picture Parameter Set)PPS的主要内容: Slice Header 结构 在H.264视频编码标准中,SPS和PPS是关键的参数集,它们提供了解码所需的各种配置信息…

Pytorch创建张量

文章目录 1.torch.from_numpy()2. torch.zeros()3. torch.ones()4. torch.arange()5. torch.linspace()6. torch.logspace()7. torch.eye()8. torch.empty()9. torch.full()10. torch.complex()10. torch.rand()10. torch.randint()11. torch.randn12. torch.normal()13. torch…

Django模型的使用

系统Ubuntu20.04 1.安装Mysql 2.用pip3安装mysqlclient,这个连接Python和Mysql的工具 3.更改配置文件 setting.py其中 DATABASES文件如下。 ...76 DATABASES {77 default: {78 ENGINE: django.db.backends.mysql,79 NAME: sqltest,80 …

[数据集][目标检测]剪刀石头布检测数据集VOC+YOLO格式1973张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1973 标注数量(xml文件个数):1973 标注数量(txt文件个数):1973 标注…

Docker 简介和安装

目录 Docker 是什么 跟普通虚拟机的对比 打包、分发、部署 Docker 部署的优势 Docker 通常用来做什么 重要概念:镜像、容器 安装 镜像加速源 Docker 是什么 Docker 是一个应用打包、分发、部署的工具 你也可以把它理解为一个轻量的虚拟机,它只虚…

SAP揭秘者- SAP PP模块日常常见运维问题之工单入库失败原因分析及快速处理

文章摘要: 无论您是负责SAP实施项目还是负责SAP运维项目,当用户发现有SAP PP模块的各种异常问题的时都需要作为SAP PP顾问的您快速地理解用户提交的问题,并快速地解决这些问题, 上篇文章跟大家聊了基本单位维护错了怎么修改的解决…

ARC学习(2)基本编程模型认识(二)

笔者继续来学习一下arc的编程模型的寄存器信息。 1、core寄存器深入 参数寄存器:r0-r7,8个参数,暂存器:r10-r15保存寄存器:r16-r25 调用函数需要保存的寄存器指针寄存器:gp(全局指针&#xff09…

functional函数对象库学习

类模板 std::function 是一种通用多态函数包装器。std::function 的实例能存储、复制及调用任何可复制构造 (CopyConstructible) 的可调用 (Callable) 目标——函数(通过其指针)、lambda 表达式、bind 表达式或其他函数对象,以及成员函数指针…

FPGA基于DE2-115开发板驱动HC_SR04超声波测距模块|集成蜂鸣器,led和vga提示功能

文章目录 前言一、实验原理二、Verilog文件2.1 时钟分频2.2 超声波测距2.3 超声波驱动 三、实现过程3.1 模块说明3.2 引脚分配 三、演示视频总结参考 前言 环境 硬件 DE2-115 HC-SR04超声波传感器 软件 Quartus 18.1 目标结果 使用DE2-115开发板驱动HC-SR04模块&#xff0…

Windows 下 PostgreSQL 图形化界面安装、配置详解

相信大家对PostgreSQL都不陌生吧,自从MySQL被Oracle所控制后,PostgreSQL就成为了国内去O的首选数据库了,并且PostgreSQL目前不受任何商业公司控制,所以国内很多厂商都是基于PostgreSQL做二次开发来实现数据库自主可控的目标(国内很…

简单模拟实现shell(Linux)

目录​​​​​​​ 前言 展示效果 实现代码 前言 该代码模拟了shell的实现,也就是解析类似于“ls -a -l"的命令,当我们启动我们自己写的shell的可执行程序时,我们输入"ls"的命令,也可以展示出在shell中输入&…

学习笔记——网络参考模型——TCP/IP模型(物理层)

一、TCP/IP模型-物理层 1、数据传输(交换)的形式 (1)电路交换 特点:通信双方独占通信链路。 优点:数据传输时延小,适用于实时通信;数据按序发送,不存在失序问题;适合模拟信号和数字信号传输。 缺点&am…

【前缀和】42. 接雨水

本文涉及知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入&am…

IDEA+MyBatisX根据mapper方法自动添加注解和生成xml方法结构

前提:确保IDEA已安装并启用了MyBatisX插件 在service层写dao或mapper的方法结构,反向生成dao层方法声明,如下: void updateStock(Long skuId, Long wareId, Integer skuNum); 由于该方法传递多个参数,为了让MyBatis识…

心链6----开发主页以及后端数据插入(多线程并发)定时任务

心链 — 伙伴匹配系统 开发主页 信息搜索页修改 主页开发&#xff08;直接list用户&#xff09; 在后端controller层编写接口去实现显示推荐页面的功能 /*** 推荐页面* param request* return*/GetMapping("/recommend")public BaseResponse<List<User>&…