线性表-----队列

1、基本概念

  • 队列是只允许在一端进行插入而在另一段进行删除线性表
  • 队头:允许删除的一端
  • 队尾:允许插入的一端
  • 空队列:没有任何元素的空表
    在这里插入图片描述

队列是操作受限的线性表,因此不是任何对线性表的操作都可以作为队列的操作,比如,不可以随便读取队列中间某个数据

2、顺序队列

队列的顺序实现是指分配一块连续存储单元存放队列中的元素,并设两个指针front和rear分别指向队头和队尾元素的元素。队尾rear指针指向队尾元素的下一个位置(也可以让rear指向队尾元素,front指向队头元素的前一个位置),为什么要这样处理呢?当队列中只有一个元素是,rear和front将会相等,处理起来很麻烦。

  • 初始状态(队空条件):front==rear==0
  • 进队:不满时,送值到队尾,队尾rear加1
  • 出队:不空时,取队头元素,队头front加1
/*
顺序队列
*/
typedef struct {ElemType data[MaxSize];int front, rear;
}SqQueue;

在这里插入图片描述
当此时队列的状态为上图的d时,在入队,现任此时rear再加一会出现溢出,但这种溢出并不是真正的溢出,在data数组里依然有位置存放数据,所以这是一种假溢出

2、循环队列

把存储队列元素的表从逻辑上看作是一个环,称为循环队列。当用循环队列时,上面顺序队列出现假溢出的问题就能解决

  • 初始时,Q.front=Q.rear=0
  • (出队) front指针加1:Q.front=(Q.front+1)%MaxSize
  • (入队)rear指针加1:Q.rear=(Q.rear+1)%MaxSize
  • 队列长度:(Q.rear-Q.front+MaxSize)%MaxSize
  • 出队入队指针按顺时针方向进1

如何判断队列空和队满呢?

法1:牺牲一个单元来区分队空和队满,入队时少用一个队列单元,这是个普遍的做法,约定以:队头指针在队尾指针的下一个位置作为队满的标志

  • 队满:(Q.rear+1)%MaxSize==Q.front
  • 队空条件:Q.front==Q.rear(注意和顺序队列区分开,Q.front==Q.rear==0)
  • 队中元素个数:(Q.rear-Q.front+MaxSize)%MaxSize

在这里插入图片描述
法2:类型中增设表示元素个数的数据成员。这样,

  • 队空的条件为Q.size==0
  • 队满:Q.size==MaxSize

法3:类型增设tag数据成员,以区分队满还是队空。tag等于0时,若因删除导致QQ.front==Q.rear,则为对空;tag等于1时,若因插入导致Q.front==Q.rear,则为队满

3、链式队列

队列的链式存储结构,其实就是线性表的单链表,只不过需要加点限制,只能在表尾插入,表头删除。
在这里插入图片描述

typedef struct {ElemType data;struct LinkNode* next;
}LinkNode;
typedef struct {LinkNode* front, * rear;
}LinkQueue;
  • 当 Q.front ==NULL && Q.rear==NULL时,链式队列为空

4、双端队列

双端队列是指允许两端都可以进行入队和出队操作的队列,将队列的两端分别称为前端和后端,不再是队头和队尾,其逻辑结构依然是线性结构。
在这里插入图片描述
输出受限的双端队列:允许在一端进行插入和删除,但在另一端只允许插入的双端队列被称为输出受限的双端队列
在这里插入图片描述
输入受限的双端队列:允许在一端进行插入和删除,但另一端只允许删除的双端队列称为输入受限的双端队列
在这里插入图片描述

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

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

相关文章

如何在React JS组件和React JS App中添加CSS样式?

In this tutorial, we will only work with CSS styles. Please ensure you have basic knowledge of HTML, CSS, React JS and Node.Js. 在本教程中,我们将仅使用CSS样式 。 请确保您具有HTML,CSS,React JS和Node.Js的基础知识。 In our re…

用计算机怎么打出狂浪字谱,狂浪歌曲简谱

狂浪歌曲简谱:66671112|2223176|一波一波接踵而来,大风带着我摇摆,22222112|322143-|66671112|梦在燃烧心在澎拜,不用徘徊。大摇大摆漂在人海,222…

C和汇编---while反汇编

环境&#xff1a;VC C程序&#xff1a; #include "stdio.h"int main() {int i1,sum0;while(i<100){sumi;i;}printf("%d\n",sum);return 0; }用while计算1到100的值&#xff0c;功能很简单&#xff0c;让我们看看反汇编 首先在main函数的入口&#xff0…

IPv6技术未来发展趋势

前言 人们对于采用综合技术&#xff0c;将数据、话音和视频等业务“一网打尽”梦想的追求从来都没有停止过。从上世纪80年代的综合业务数字网(ISDN)技术&#xff0c;到90年代的基于异步传输模式(ATM)的宽带ISDN&#xff0c;直到现在的IPMPLS(多协议标记交换)技术等。在这一过程…

栈的应用

1、括号匹配 如果是扫描到左括号&#xff0c;则入栈如果是扫描到右括号&#xff0c;则检查现在的栈顶元素&#xff0c;如果括号匹配&#xff0c;则栈顶元素出栈结束时&#xff0c;如果栈内没有元素&#xff0c;则括号匹配 bool Check(char *str){stack s;InitStack(s);int le…

Silverlight 布局控件

1.1. Canvas 在Canvas 布局中&#xff0c;控件使用Canvas.Top和Canvas.Left来定位内容: View Code 1 <Canvas x:Name"LayoutRoot" Background"White">2 <Button Name"SampleButton"3 Content"Sample Bu…

C和汇编-----for循环

环境&#xff1a;VC for循环有三个表达式&#xff0c;第一个表达式是初始化&#xff0c;在for循环之前执行一次&#xff0c;后面就不执行了&#xff0c;第二个是循环条件&#xff0c;在执行循环体之前求值&#xff0c;如果为真&#xff0c;执行循环体&#xff0c;如果为假&…

韩国的计算机科学家,韩国科学技术院用普通相机为AR/VR复刻真实世界物理对象...

只需一个包含闪光灯的相机/摄像头(映维网 2018年12月10日)为虚拟环境捕捉和复刻逼真的现实世界对象十分复杂&#xff0c;而且耗时。所以&#xff0c;从移动设备和数码相机&#xff0c;你能想象只通过一个包含内置闪光灯的传统相机来简化这个任务吗&#xff1f;一支全球化的计算…

C和汇编混合编程---do while

环境&#xff1a;VC do while 会先执行do里面的循环体&#xff0c;执行完去执行while的条件判断&#xff0c;如果为真&#xff0c;继续执行do里面的循环体&#xff0c;如果为假&#xff0c;则结束循环 C程序&#xff1a; #include "stdio.h" int main() {int i1,su…

林子大了,什么鸟都有----.NET运用String的十八层境界

林子大了&#xff0c;什么鸟都有----.NET运用String的十八层境界 在上一文中&#xff0c;提到了一句相当常见但十分荒谬的代码&#xff1a;Request.QueryString["id"].ToString()。突然涌起一个想法&#xff0c;为什么不总结一下不同层次.Net开发者如何运用string的呢…

计算机机场基础知识,全国机场频率_电脑基础知识_IT计算机_专业资料

全国机场频率_电脑基础知识_IT计算机_专业资料 (13页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;14.9 积分机场频率2009-11-28 15:29:251分类&#xff1a;默认分类I举报I字匕订阅中国主要机场管制…

c和汇编---函数

环境&#xff1a;VC 作用&#xff1a; 函数是完成特定任务的独立程序代码单元 1、创建和使用函数 函数原型&#xff1a;声明函数是什么类型&#xff0c;指明函数的返回值和函数接收的参数类型&#xff0c;函数和变量一样&#xff0c;有多种类型&#xff0c;任何程序在使用函…

python投骰子程序代码_用于双骰子(一个偏向一个法线)仿真的Python程序

python投骰子程序代码Here, we will be simulating the occurrence of the sum of the faces of two dice [i.e. dice(A) - 1, 2, 3, 4, 5 ,6 dice(B) - 1, 2, 3, 4, 4, 4, 5, 6, 6 ,6]. A dice is normal(each has an equal probability of occurrence) and another B dice i…

如何追踪每一笔记录的来龙去脉:一个完整的Audit Logging解决方案[上篇]

一、提出问题 在开发一个企业级 应用的时候&#xff0c;尤其在一个涉及到敏感数据的应用&#xff0c;比如财务系统、物流系统&#xff0c;我们往往有这样的需求&#xff1a;对于数据库中每一笔数据的添加、修改和删除&#xff0c;都需要有一个明确的日志&#xff0c;以便我们可…

执行shellcode的几种方式

首先写出汇编成功弹出计算器 #pragma comment(linker,"/section:.data,RWE") //data段可读写#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //不显示窗口#pragma comment(linker,"/INCREMENTAL:…

cobaltstrike生成一个原生c,然后利用xor加密解密执行

首先cobaltstrike生成一个原生c&#xff0c;我的是&#xff1a; /* length: 797 bytes */ unsigned char buf[] "\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30\x8b\x52\x0c" "\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\x31\xc0\xac…

这样就可以很方便的知道明天的天气了

今天在侧边栏加了一个实用的小东西——天气预报。它可以根据来访者的ip地址自动判断地区&#xff0c;并展现今天以及明天的天气预报。这样来看blog的时候就可以知道什么时候该去收衣服啦&#xff5e;哈哈&#xff01;实现代码其实很简单。就是套一个IFRAME&#xff0c;里面套个…

压缩矩阵

压缩矩阵&#xff1a;指为多个值相同的元素只分配一个存储空间&#xff0c;对零元素不分配存储空间特殊矩阵&#xff1a;指具有许多相同矩阵元素或零元素&#xff0c;并且这些相同矩阵元素或零元素的分配有一定规律性 1、对称矩阵 对称矩阵&#xff1a;矩阵每个元素都有aijaj…

线性方程组 python_线性方程组的表示 使用Python的线性代数

线性方程组 pythonPrerequisites: 先决条件&#xff1a; Defining a Vectors 定义向量 Defining a Matrix 定义矩阵 In this article, we are going to learn how to represent a linear equation in Python using Linear Algebra. For example we are considering an equatio…

初步体验数据驱动之美---TreeView

1.前言继上一篇《WPF应用基础篇---TreeView》的发布之后&#xff0c;有部分朋问我关于里面一些基础应用的问题&#xff0c;可能是我写得不够详细&#xff0c;所以在这里&#xff0c;我想再次那文章中的案例来谈谈初步体验数据驱动之美&#xff0c;摆脱旧WinForm编程习惯(靠触发…