7.队列算法

news2024/10/6 6:47:08

算法:队列算法

队列是一种抽象的数据结构,有点类似于Stacks。与堆栈不同,队列的两端都是开放的。一端始终用于插入数据(入队),另一端用于删除数据(出队)。队列遵循先进先出方法,即首先访问先存储的数据项。

队列示例

一个真实的队列示例可以是单车道单向道路,车辆首先进入,首先退出。更多真实世界的例子可以看作是售票窗口和公共汽车站的队列。

队列表示

我们现在明白,在队列中,我们出于不同的原因访问两端。下面给出的下图试图将队列表示解释为数据结构

队列示例

与堆栈一样,也可以使用数组,链接列表,指针和结构来实现队列。为简单起见,我们将使用一维数组实现队列。

基本操作

队列操作可能涉及初始化或定义队列,利用它,然后从存储器中完全擦除它。在这里,我们将尝试理解与队列相关的基本操作

  • enqueue() - 将项添加(存储)到队列中。
  • dequeue() - 从队列中删除(访问)一个项目。

为了使上述队列操作有效,需要更多的功能。这些是 -

  • peek() - 获取队列前面的元素而不删除它。
  • isfull() - 检查队列是否已满。
  • isempty() - 检查队列是否为空。

在队列中,我们总是将 前端 指针指向的数据出列(或访问),并在队列中排队(或存储)数据时我们采用 指针的帮助。

让我们首先了解一下队列的支持功能

窥视()

此功能有助于查看队列 前面 的数据。peek()函数的算法如下

算法

begin procedure peek
   return queue[front]
end procedure

用C编程语言实现peek()函数

int peek() {
   return queue[front];
}

已满()

由于我们使用单维数组来实现队列,我们只需检查后指针是否达到MAXSIZE以确定队列已满。如果我们将队列保存在循环链表中,算法将有所不同。isfull()函数的算法

算法

begin procedure isfull

 if rear equals to MAXSIZE
    return true
 else
    return false
 endif

end procedure

在C编程语言中实现isfull()函数

bool isfull() {
 if(rear == MAXSIZE - 1)
    return true;
 else
    return false;
}

是空的()

isempty()函数的算法

算法

begin procedure isempty

 if front is less than MIN  OR front is greater than rear
    return true
 else
    return false
 endif

end procedure

如果 front 的值小于MIN或0,则表示队列尚未初始化,因此为空。

这是C编程代码

bool isempty() {
 if(front < 0 || front > rear)
    return true;
 else
    return false;
}

入队行动

队列维护两个数据指针, 前端后端 。因此,其操作比堆栈的操作相对难以实现。

应采取以下步骤将数据排入(插入)到队列中

  • 第1步 - 检查队列是否已满。
  • 步骤2 - 如果队列已满,则产生溢出错误并退出。
  • 步骤3 - 如果队列未满,则增加 指针以指向下一个空白区域。
  • 步骤4 - 将数据元素添加到后方指向的队列位置。
  • 第5步 - 返回成功。

插入操作

有时,我们还会检查队列是否已初始化,以处理任何无法预料的情况。

入队操作算法

procedure enqueue(data)      

   if queue is full
      return overflow
   endif

   rear ← rear + 1
   queue[rear] ← data
   return true

end procedure

在C编程语言中实现enqueue()

int enqueue(int data)      
 if(isfull())
    return 0;

 rear = rear + 1;
 queue[rear] = data;

 return 1;
end procedure

出列操作

从队列中访问数据是两个任务的过程 - 访问 前端 指向的数据并在访问后删除数据。采取以下步骤来执行 出列 操作

  • 第1步 - 检查队列是否为空。
  • 步骤2 - 如果队列为空,则产生下溢错误并退出。
  • 步骤3 - 如果队列不为空,请访问 前端 指向的数据。
  • 步骤4 - 增加 指针以指向下一个可用数据元素。
  • 第5步 - 返回成功。

删除操作

出列操作的算法

procedure dequeue

   if queue is empty
      return underflow
   end if

   data = queue[front]
   front ← front + 1
   return true

end procedure

在C编程语言中实现dequeue()

int dequeue() {
 if(isempty())
    return 0;

 int data = queue[front];
 front = front + 1;

 return data;
}

   front ← front + 1
   return true

end procedure

在C编程语言中实现dequeue()

int dequeue() {
 if(isempty())
    return 0;

 int data = queue[front];
 front = front + 1;

 return data;
}

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

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

相关文章

【C++初阶】类与对象(上)

一.什么是类&#xff0c;什么是对象 我们可以形象的把类比作是一个房子的设计图纸&#xff0c;而对象就是根据设计图纸设计出来的房子。 由设计图纸到房子的过程&#xff0c;我们称之为类的实例化。 C兼容C的&#xff0c;所以C中的结构体在C中也能用&#xff0c;但是C把结构体升…

rust教程 第一章 —— 初识rust

文章目录 前言一、Rust简介二、安装Rust编译器三、第一个Rust程序四、 IDE环境五、初识包管理六、总结 前言 本系列教程目录可查看这里&#xff1a;Rust教程目录 近些年来不断有新的语言崛起&#xff0c;比如当下非常火的go语言&#xff0c;不过相比于C&#xff0c;go语言确实…

C++类和对象 (3)

类和对象 1. 类的6个默认成员函数2. 构造函数2.1. 概念&#xff08;问题提出&#xff09;2.2. 特性 3.析构函数3.1. 概念3.2.特性 1. 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在…

使用OpenFeign实现接口访问

1. 引言 在微服务横行的年代&#xff0c;后端根据业务的不一样分成了很多单独运行的服务&#xff0c;比如在物联网中&#xff0c;根据业务拆分为定时服务、设备控制等服务。当前端想控制设备时&#xff0c;其请求首先到其对应的后端服务&#xff0c;后端服务再调用设备控制服务…

Vue+Vant封装通用模态框单选框组件

前言 我们知道&#xff0c;在vant组件中提供的组件往往是比较基础的&#xff0c;能够满足基本需求。但是我们想实现ui设计的一些比较丰富效果的组件&#xff0c;需要自己去实现&#xff0c;且当项目中多次用到的时候&#xff0c;我们将以组件化的思想将其封装起来&#xff0c;…

Node.js -- 使用Express写接口

1.创建基本的服务器 //导入express const express require(express) //创建服务器实例 const app express() //调用app.listen方法&#xff0c;指定端口号并启动web服务器 app.listen(80,function(){console.log(Express server running at http://127.0.0.1) })2. 创建API路…

路由交换综合实验

拓扑结构&#xff1a; 要求 1、R6为网络运营商&#xff08;ISP&#xff09;&#xff0c;接口IP地址均为公有地址&#xff1b;该设备只能配置IP地址&#xff0c;之后不能在对其进行任何配置&#xff1b; 2、R1~R5为局域网&#xff0c;私有IP地址192.168.1.0/24&#xff0c;请合…

真题详解(UML图)-软件设计(五十五)

真题详解&#xff08;计算机知识&#xff09;-软件设计&#xff08;五十四)https://blog.csdn.net/ke1ying/article/details/130278265 组织域名&#xff1a; com商业组织 edu教育组织 gov政府组织 net主要网络支持中心 mil军事部门 Int国际组织 2、时间复杂度 O&#…

写一个自己的命令行解释器

写一个自己的命令行解释器 当我点开xshell运行服务器的时候bash就被加载到了内存中&#xff0c;此后我在bash上执行的所有程序都是作为bash的子进程。在bash这个进程内创建子进程&#xff0c;并让子进程去执行全新的代码&#xff0c;这不就是程序替换吗&#xff1f; 所以我们…

腾讯云4核8g服务器支持多少人在线使用?

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线&#xff1f;通用型-4核8G-180G-2000G&#xff0c;2000GB月流量&#xff0c;系统盘为180GB SSD盘&#xff0c;12M公网带宽&#xff0c;下载速度峰值为1536KB/s&#xff0c;即1.5M/秒&#xff0c;假设网站内页平均大小为60KB…

【Unity入门】17.脚本访问父子结点

【Unity入门】脚本访问父子结点 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;父级节点 &#xff08;1&#xff09;访问父级节点 父子关系我们并不陌生&#xff0c;在cocos中常用node:get…

单链表的实现

链表的概念与结构 链表与我们通讯录中的顺序表是不同的&#xff0c;顺序表的空间是连续的&#xff0c;像数组一样可以通过下标访问。而链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的。即&#xff1a;链表…

数据结构笔记:二叉树的遍历与技巧

引言 本篇是最近有遇到过的一个题目&#xff0c;关于二叉树的遍历&#xff0c;正好有一些经验与技巧&#xff0c;所以开一篇帖子记录一下。 二叉树遍历介绍 遍历是数据结构中常见的操作&#xff0c;主要是将所有元素都访问一遍。对于线性结构来说&#xff0c;遍历分为两种&a…

RecyclerView 静态布局实现过程解析:如何构建高性能的列表

作者&#xff1a;maxcion Recyclerview在日常开发中所使用的控件中绝对是顶流一般的存在&#xff0c;想嚼它这个想法一次两次了。在网上也看了很多关于Recyclerview源码解析的文章&#xff0c;大佬们写的都很深刻&#xff0c;但是对于像我们这种储备知识不足的小白读者来说&…

前端实现端到端测试(代码版)

端到端测试框架选取 playwright 、 cypress 、 selenium 对比 cypress使用 下载 cypress npm install cypress --save-dev package.json npm run cypress:open {"scripts": {"cypress:open": "cypress open"} }使用流程 入门官方文档 npm ru…

一本通 3.4.5 最小生成树

1348&#xff1a;【例4-9】城市公交网建设问题 【题目描述】 有一张城市地图&#xff0c;图中的顶点为城市&#xff0c;无向边代表两个城市间的连通关系&#xff0c;边上的权为在这两个城市之间修建高速公路的造价&#xff0c;研究后发现&#xff0c;这个地图有一个特点&…

SQL Server基础 第四章 select定制查询(select中的各种查询筛选条件)

本章主要介绍 select 语句查询数据的基本用法&#xff0c;其中包括查询指定字段信息、条件查询等。 目录 1、比较运算符、逻辑运算符 &#xff08;1&#xff09;查询phone大于500且不是单县的 &#xff08;2&#xff09;查询地址为烟台或者单县但是phone要大于666的 &#…

IMX6ull 之 HelloWorld Led点灯

一 GPIO点灯&#xff0c;嵌入式的helloworld 1 何为GPIO&#xff1f; GPIO只是一个CPU内提供的一种功能外设&#xff0c;CPU外部的I/O引脚会被赋予一种功能&#xff08;GPIO、UART、I2C等&#xff09;&#xff1b;该功能由CPU内外设提供&#xff0c;具体是什么功能由IOMUX…

刷题笔记4-22

目录 1.Java&#xff1a;(a,b)>Math.abs(a-3)-Math.abs(b-3)&#xff1b; 2.字符解释 3.C语言二维数组中a[i]表示ai的地址&#xff0c;而a[i]又可以表示为*&#xff08;ai&#xff09; 4.二维数组在传参时&#xff0c;必须给定列 5.软件开发&#xff1a;观察者模式 6.建…

shell脚本控制

shell脚本编程系列 处理信号 Linux利用信号与系统中的进程进行通信&#xff0c;通过对脚本进行编程&#xff0c;使其在收到特定信号时执行某些命令&#xff0c;从而控制shell脚本的操作。 Linux信号 shell脚本编程会遇到的最常见的Linux系统信号如下表所示&#xff1a; 在默…