线性表-----队列

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,一经查实,立即删除!

相关文章

爱情九十六课,位置决定爱情

恋人,就像两颗星,会按照彼此既定的轨道移动,决定爱情的,有时不是情感,而是位置。 无论你多努力,可能都无法超越你的位置。 候补行星 阿康的女朋友有很多男性朋友,他总觉得她和他们走得太近了&am…

如何在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…

如何用 Win32 APIs 枚举应用程序窗口和进程

http://www.vckbase.com/document/viewdoc/?id1482 转载于:https://www.cnblogs.com/niuniu502/archive/2007/03/20/681839.html

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

狂浪歌曲简谱: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…

cigarettes(香烟)

描述 Tom has many cigarettes. We hypothesized that he has n cigarettes and smokes them one by one keeping all the butts. Out of k > 1 butts he can roll a new cigarette. Now&#xff0c;do you know how many cigarettes can Tom has? 汤姆有很多香烟。我们假设…

add separator in the sessionmenu

$itk_component(sessionmenu) add separator $itk_component(sessionmenu) add -label "Add images..." \       -underline 4 \       -command [code $this addImages] $itk_component(sessionmenu) add separator 转载于:https://ww…

Java Thread类的静态布尔型interrupted()方法(带示例)

线程类静态布尔型interrupted() (Thread Class static boolean interrupted()) This method is available in package java.lang.Thread.interrupted(). 软件包java.lang.Thread.interrupted()中提供了此方法。 This method is used to check the thread, whether a thread has…

IPv6技术未来发展趋势

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

伪静态设置 html,Apache下伪静态html(URL Rewrite)的设置方法

一 打开 Apache 的配置文件 httpd.conf 。二 将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉三 在 httpd.conf中添加&#xff1a;RewriteEngine On#RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]\.htmlRewriteRule ^(.*?(?:index|dispbbs))-([-0-9…

栈的应用

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…

谁是最好的Coder

描述 计科班有很多Coder&#xff0c;帅帅想知道自己是不是综合实力最强的coder。 帅帅喜欢帅&#xff0c;所以他选了帅气和编程水平作为评选标准。 每个同学的综合得分是帅气程度得分与编程水平得分的和。 他希望你能写一个程序帮他一下。 输入 数据有多组。 输入一个数…

如何检查数组是否包含JavaScript中的对象?

In this article, we will look at various methods to check if an array includes an object in JavaScript. Consider the following object, 在本文中&#xff0c;我们将研究各种方法来检查数组是否包含JavaScript中的对象 。 考虑以下对象&#xff0c; const squirtle {n…

或许是累了,思维开始发散

在高歌猛进了近一个月之后&#xff0c;这几天似乎找不到感觉了。之前发现的几个技术难点也一直没有解决的思路。而且我发现自己的想法总是停留在表面和高层&#xff0c;如果深入进技术细节&#xff0c;就力不从心。我愿意&#xff0c;也可以跟踪追赶上业界的技术前沿&#xff0…

HTML边框百分比,CSS:以百分比和边框表示的宽度

使用该box-sizing: border-box属性。它修改了盒子模型的行为&#xff0c;以将填充和边框视为元素总宽度的一部分(但不包括边距)。这意味着元素的设置宽度或高度包括为填充和边框设置的尺寸。在您的情况下&#xff0c;这意味着元素的宽度及其边界的宽度将占用30&#xff05;的可…

Collection 和 Map接口及其实现类总结

Collection 和 Map接口及其实现类总结 Collection接口 Collection是最基本的集合接口&#xff0c;一个Collection代表一组Object&#xff0c;即Collection的元素&#xff08;Elements&#xff09;。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SD…

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

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

茵茵的第一课

描述 茵茵今年已经六年级了&#xff0c;爸爸给她报了一个学习程序设计的班。 第一节课上&#xff0c;老师讲的就是如何输入一个数&#xff0c;再原样输出出来。 以现在的你看来&#xff0c;挺容易的是不&#xff1f; 那么&#xff0c;就请你也写出一个一样的程序吧 输入 第一…

python 立方体_Python | 创建三个数字列表,分别是正方形和立方体

python 立方体Take a range i.e. start and end, and we have to create three lists, list1 should contains numbers, list2 should contain squares of the numbers and list3 should contain cubes of the numbers in Python. 取一个范围&#xff0c;即开始和结束&#xff…