数据结构——队列

news2024/11/23 22:09:51

数据结构——队列

文章目录

  • 数据结构——队列
  • 前言
  • 队列基本概念
  • 队列的基本操作
    • 队列的顺序存储结构
      • 创建顺序队列代码
      • 入队操作代码
      • 出队操作代码
      • 顺序队列的关键语句
    • 队列的链式存储结构
      • 链式队列初始化
      • 链式队列判断空
      • 链式队列的入队操作
      • 链式队列的出队操作
    • 循环队列
      • 循环队列基本思想
      • 1. 循环队列入队列操作
      • 2.循环队列出队列操作
      • 获取循环队列首元素的算法
    • 循环队列六要素
  • 总结


前言

  1. 队列的基本概念
  2. 顺序队列
  3. 链式队列
  4. 循环队列

队列基本概念

1.队列的定义: 队列是一个操作受限的线性表,是一个只允许在表的一端进行插入,在表的另一端进行删除的线性表
2.队尾(rear): 允许插入的一端
3.队头(front): 允许删除的一端
4.队列的特点: 先进先出,后进后出

队列的基本操作

队列的顺序存储结构

队列的顺序存储:附设两个指针front和rear分别指示队头元素和队尾元素的下一个位置
在这里插入图片描述

创建顺序队列代码

Create_Qs(front,rear,max){
	elemtypr Qs[max];
	front=0;
	rear=0;
	return OK;
}

注:非空队中,头指针始终指向队列头元素的前一个元素,而尾元素始终指向队列尾元素

入队操作代码

指针先动,再赋值

rear++;
a[rear]=x;
或
a[++rear]=x;

出队操作代码

先移动指针,再赋值

front++;
x=[front];
或
x=[++front];

顺序队列的关键语句

队列为空的条件

front==rear;

队列满的条件

rear=maxsize-1;

队列的链式存储结构

队列的链式存储:是一个同时带有队头指针和队尾指针的单链表,头指针指向队头结点,尾指针指向队尾结点

链式队列初始化

void InitQueue(LinkQueue &Q){
	Q.front=Q.rear=(LinkNode *)malloc(sizeof(LinkBode));	//建立头结点
	Q.front->next=NULL;		//初始为空
}


当Q.front == Q.rear ==NULL时链队列为空,通常将链队列设计一个头结点

链式队列为空条件

Q.front == Q.rear ==NULL

链式队列判断空

bool isEmpty(LinkQueue Q){
	if(Q.front==Q.rear)	return true;
	else return false;
}

链式队列的入队操作

void EnQueue(LinkQueue &Q,ElemType x){
	s=(LinkNode *)malloc(sizeof(LinkNode));
	s->data=x;	s->next=NULL;		//创建新结点,插入到链尾
	Q.rear->next=s;
	Q.rear=s;
}

链式队列的出队操作

bool DeQueue(LinQueue &Q,ElemType &x){
	if(Q.front==Q.rear)	return false;		//空队
	p=Q.front->next;
	x=p->data;
Q.front->next=p->next;
if(Q.rear==p)
	Q.rear=Q.front;
free(p);
}

循环队列

**循环队列定义:**循环队列就是把队列的头和尾连接到一起,从而构成一个环状,实现了有空余空间就能入队的操作
**基本思想:**把队列设成环状,让Qs[0]接在Qs[M-1]之后,若rear+1==M,则令rear=0;
实现: 利用"模"运算
在这里插入图片描述

循环队列基本思想

1. 循环队列入队列操作

Insert_Cq(Cq,Cq_rear,Cq_front,Cq_max,x){
	if((Cq_rear+1)%Cq_max==Cq_front)
		return ERROR;
	Cq_rear=(Cq_rear+1)%Cq_max;
	Cq[Cq_rear]=x;
	return OK;
}

2.循环队列出队列操作

Delete_Cq(Cq,Cq_rear,Cq_front,Cq_max,x){
	if(Cq_front==Cq_rear){
		printf("The circular queue is empty!");
		return Error;
	}
	Cq_front=(Cq_front+1)%Cq_max;
	x=Cq[Cq_front];
}

出队队位号: Cq_front=(Cq_front+1)%Cq_max;

获取循环队列首元素的算法

Head_Cq(Cq,Cq_rear,Cq_front,Cq_max,x){
	if(Cq_front == Cq_rear)		//队列为空的条件
		printf("The circular queue is emply!");
	else
		x=Cq[(Cq_front+1)%Cq_max)];
}

循环队列牺牲一个空间,存储头尾指针,如果用a[N]存储一个循环队列,则最多存储N-1个

循环队列六要素

  1. 入队: rear=(rear+1)%M; Qs[rear]=x; 或Qs[++rear%M]=x;
  2. 出队: front=(front+1)%M; x=Qs[front]; 或 x=Qs[++front%M];
  3. 队空: rear==front;
  4. 队满:(rear+1)%maxsize==front;
  5. 出队队位号: Cq_front=(Cq_front+1)%Cq_max;
  6. 循环队列中元素的个数: (Q.rear-Q.front+maxsize)%maxsize;

总结

队列操作核心语句总结

  1. 顺序队列入队操作: rear++; a[rear]=x; 或 a[++rear]=x;
  2. 顺序队列出队操作: front++; x=[front]; 或 x=[++front];
  3. 顺序队列为空的条件: front==rear;
  4. 顺序队列满的条件: rear=maxsize-1;
  5. 链式队列为空的条件: Q.front == Q.rear
  6. 循环队列入队: rear=(rear+1)%M; Qs[rear]=x; 或Qs[++rear%M]=x;
  7. 循环队列出队: front=(front+1)%M; x=Qs[front]; 或 x=Qs[++front%M];
  8. 循环队列队空: rear==front;
  9. 循环队列队满:(rear+1)%maxsize==front;
  10. 出队队位号: Cq_front=(Cq_front+1)%Cq_max;
  11. 循环队列中元素的个数: (Q.rear-Q.front+maxsize)%maxsize;

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

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

相关文章

「Tech初见」Linux驱动之chrdev

目录 免责声明I. MotivationII. SolutionS1 - 主次设备号S2 - 设备驱动程序S3 - 字符设备驱动程序 III. Result 免责声明 「Tech初见」系列的文章,是本人第一次接触的话题 对所谓真理的理解暂时可能还不到位,避免不了会出现令人嗤鼻的谬论 所以&#…

Oracle中改变表的Owner和tablespace

初用Oracle,很多的不熟悉,建完库,没有建用户,也没创建表空间,就直接system用户建表添加数据,几个月过去,表建了近百个,数据添加了几万条,才越来越觉得这种方式缺点太多&a…

docker对cpu资源做限制

系列文章目录 文章目录 系列文章目录一、cgroup1.groups四大功能2.CPU 资源控制 二、1.限制可用的 swap 大小, --memory-swap2.对磁盘IO配额控制(blkio)的限制 总结 一、cgroup 1.groups四大功能 资源限制:可以对任务使用的资源…

华为OD机试真题 JavaScript 实现【相对开音节】【2022Q4 100分】,附详细解题思路

一、题目描述 相对开音节构成的结构为辅音元音(aeiou)辅音(r除外)e,常见的单词有life,time,woke,coke,joke,note,nose,communicate,use,gate,same,late等。 给定一个字符串,以空格…

递归算法在编程中的重要应用

递归算法在编程中的重要应用 引言一、引言1.1、什么是递归算法?1.2、递归算法的特点和优缺点 二、树和图的遍历2.1、深度优先搜索(DFS)和广度优先搜索(BFS)2.2、二叉树遍历、树的深度、节点个数等问题2.2.1、二叉树遍历…

关于对【oracle索引】的理解与简述

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131094864 出自【进步*于辰的博客】 无论使用的是oracle、mysql,亦或者其他数据库&a…

如何吃透一个Java项目?

现在Austin的文档我觉得还是比较全的,但到了看代码的时候,可能有的同学就不知道应该怎么看,有想知道模块之间的调用链路,有想一点一点把细节给全看了。这时候就很可能在项目里犯迷糊了,绕不出不来了。 Java开源项目消息…

MySQL的下载安装以及环境配置---图文教程

目录 一.下载 二.安装 三.设置环境变量 四.MySQL数据库的使用及注意事项 SQL语句注意事项 一.下载 1.打开 MySQL 数据库的网站。 2.往下滑 3.进入新的页面之后,点击 MySQL Installer for Windows 4.进入新的页面时,就可以下载MySQL数据库了&#x…

数据结构05:树的定义与双亲、孩子表示法[更新中]

参考用书:王道考研《2024年 数据结构考研复习指导》 参考用书配套视频:5.1.1 树的定义和基本术语_哔哩哔哩_bilibili 特别感谢: Chat GPT老师[部分名词解释、修改BUG]、BING老师[封面图]~ 备注:博文目前是未完成的状态&#xff…

Web安全:拿到 Web 服务器 最高权限.(vulntarget 靶场 A)

Web安全:拿到 Web 服务器 最高权限. Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览;可以放置数据…

43 最佳实践-性能最佳实践-IOThread配置

文章目录 43 最佳实践-性能最佳实践-IOThread配置43.1 概述43.2 配置说明 43 最佳实践-性能最佳实践-IOThread配置 43.1 概述 KVM平台上,对虚拟磁盘的读写在后端默认由QEMU主线程负责处理。这样会造成如下问题: 虚拟机的I/O请求都由一个QEMU主线程进行…

基于springboot的数码论坛系统设计(Java、MySQL、B/S)

wx供重浩:创享日记 对话框发送:数码论坛 获取源码源文件论文报告PPT 网络的广泛应用给生活带来了十分的便利。所以把数码论坛与现在网络相结合,利用java技术建设数码论坛系统,实现数码论坛的信息化。则对于进一步提高数码论坛发展…

Linux 下pause函数是如何实现的?

当你在程序中调用 pause() 函数时,它会使得你的程序停止执行,直到有一个信号被捕获。这是通过系统调用实现的。系统调用会使得程序从用户模式切换到内核模式。 这里是 pause() 函数的基本工作原理: 当你的程序调用 pause() 函数时&#xff…

python基础知识(十):类

目录 1. 类和方法的概念2. 类的定义3. 类的继承4. 重写父类的方法 1. 类和方法的概念 类:用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。举个例子,狗类就是狗的集合,每条狗都是狗…

kali学习笔记(二)

一、关闭自动锁屏 关闭自动锁屏对于测试人员来说,可以按照自己的习惯来设置,不然kali会过十分钟就锁屏,有的时候会比较不方便。 1、使用root账号登录,在display设置选项中做如下设置。 2、把休眠选项关掉。 二、创建快照 关机创…

透视Linux内核,BPF 深度分析与案例讲解

本次主要对BPF的部分原理、应用案例上进行一次分析记录。 BPF介绍 当内核触发事件时,BPF虚拟机能够运行相应的BPF程序指令,但是并不是意味着BPF程序能访问内核触发的所有事件。将BPF目标文件加载到BPF虚拟机时,需要确定特定的程序类型&…

SpringBoot中的定时任务@Scheduled的使用

1.Scheduled注解介绍 在spring boot的项目中需要使用到定时任务的时候,可以使用Scheduled注解,这只是在一个JVM进程中很适用,如果涉及到服务器是集群的情况下,建议使用任务调度平台。这样任务调度平台会在多台服务器中选择一台进…

【linux】在Ubuntu下部署nginx——nginx的安装与卸载

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

Think PHP6+Swagger3

swagger是一个解决接口规范化、标准化、文档化的一个组件,既可以直接自动生成resutful接口文档又能进行功能测试的一个web服务。本文是think PHP6结合swagger3的一个记录过程。 composer安装ThinkPHP 一般安装最新稳定版本,不一定是最新版本 composer…

怎么通过Fiddler对APP进行抓包?以及高级应用场景分析

目录 前言 简单说下Fiddler的抓包原理: 使用fiddler代理远程捕获APP请求 Fiddler高级应用场景介绍 1、url地址重写 fiddler抓包详细教程:全网抓包天花板教程,B站讲的最详细的Fiddler/Charles抓包教学视频。2小时包你学会_哔哩哔哩_bilibi…