数据结构(队列)

一、队列的顺序存储

#define MAXSIZE 100
typedef int ElementType;
typedef struct{ElementType Data[MAXSIZE];//用一维数组存放队列元素int front;//队头指针int rear;//队尾指针
}SqQueue;
  1. front指针指向队头元素

  2. rear指针指向队尾元素的下一个位置

  3. 空对时:rear==front

  4. 队列初始化:rear=front=0

  5. 入队:对未满时,先送值到队尾,再队尾指针加一

  6. 出队:对不为空时,先取队头元素,再队头指针加一

  7. 不能使用q.rear==MAXSIZE判断队满,因为出队的过程中,数组前面的部分会有空闲,这时候入队会有上溢出,但是是假溢出

循环队列
将队列从逻辑上造成一个环状,利用取余实现

  1. 初始(空队):q.front=q.rear=0
  2. 出队指针变化:q.front=(q.front+1)%MAXSIZE
  3. 入队指针变化:q.rear=(q.rear+1)%MAXSIZE
  4. 队列长度:[MAXSIZE-(q.front-q.rear)]%MAXSIZE
  5. 出队、入队:都按顺时针,都是指针加一
  6. 队满:
方式一:
牺牲一个存储的单元来区分空队、满队约定:当队头指针在队尾指针的下一个位置时,队满
队空:q.front==q.rear
队满:(q.rear+1)%MAXSIZE==q.front
队列中的元素个数:(q.rear-q.front+MAXSIZE)%MAXSIZE
方式二:
在类型中新增一个数据成员,用于表示元素个数
队空:q.Size==0
队满:q.Size==q.MAXSIZE
方式三:
在类型中新增一个数据成员,用以区分对空、队满
队空:q.tag==0
队满:q.tag==1

队列的链式存储结构

  1. 链队本质上是一个同时带有队头指针、队尾指针的单链表
  2. 头指针指向队头结点
  3. 尾指针指向队尾结点
  4. 链式队列适合于数据元素变化较大的情形,不存在上溢
  5. 当使用多个队列时,最好使用链式队列,可以避免存储分配不合理下的溢出问题
//链式队列的结点
typedef struct LinkNode{ElementType data;//数据域struct LinkNode *next;//指针域,指向下一个结点
}LinkNode;
//链式队列
typedef struct{LinkNode *front;//队列的队头指针LinkNode *rear;//队列的队尾指针
}LinkQueue;

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

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

相关文章

Redis 6 RC1发布,带来众多新特性

Redis 6 RC1 发布了,项目创建人 antirez 在博客中介绍,这是迄今最“企业”化的版本(SSL 与 ACL 等特性与企业极相关),也是最大的版本,同时也是参与人数最多的版本。GA 版本预计在明年三月到五月之间发布。R…

数据结构 树和二叉树

树的概念 树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的 根节点:根节点没有前驱结点除根节点…

Serverless那么火,2019年的采用如何?

传统的 IT 架构已经不适合当今快速发展的数字经济环境。技术顾问 Declan Morris 表示:“客户不仅期望零停机时间,而且要求应用程序无论在世界任何地方都具有一致的性能。”他还预测到,接下来是 Serverless 计算和函数即服务(FaaS&…

数据结构判断题

1.将N个数据按照从小到大顺序组织存放在一个单向链表中。如果采用二分查找,那么查找的平均时间复杂度是O(logN)。 F 解析: 二分查找的平均复杂度是O(logN)没有错,一看到这个就跳坑了。然后知道陷阱来了!按顺…

【C】Natasha 插件编程

文章转载授权级别:CNatasha 是一个代替 Emit / Expression 的动态构建项目,旨在为开发者提供方便、快捷、高性能的动态构建服务,动态编程是生态的重要组成部分,希望开发者们能有足够的兴趣来了解、使用、建设它。1、插件生成使用 …

二叉树先序,中序,后序,层次遍历(数据结构)

先序遍历 先序遍历可以想象为,一个小人从一棵二叉树的根节点为起点,沿着二叉树的外沿,逆时针走一圈回到根节点,路上遇到的元素顺序,就是先序遍历的结果 先序遍历的结果为:A B D H I E J C F K G 中序遍…

.NET Core 在 K8S 上的开发实践--学习笔记

摘要本主题受众是架构师,开发人员,互联网企业 IT 运维人员。大纲:1、 K8S 对应用的要求;2、 .NET Core 上 K8S 的优势;3、 K8S 下的 .NET Core 配置;4、 .NET Core 上分布式组件概览。大纲kubernetes 对应用…

线性表的删除

给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。 函数接口定义: List Delete( List L, ElementType minD, ElementType maxD );其中List结构定义如下&…

.NetCore 3.1 安装本地化中文智能提示

A、平时在群里,很多小伙伴都会问,.net core的智能提示和注释都是英文的,如果英语水平不是很高的,看着是挺麻烦,所以经常需要在身边有一个翻译软件,如果有汉化的中文智能提示就好了(当然&#xf…

6-7 求链表的倒数第m个元素 (25 分)

请设计时间和空间上都尽可能高效的算法,在不改变链表的前提下,求链式存储的线性表的倒数第m(>0)个元素。 函数接口定义: ElementType Find( List L, int m );其中List结构定义如下: typedef struct No…

asp.net core 3.x Endpoint终结点路由1-基本介绍和使用

前言我是从.net 4.5直接跳到.net core 3.x的,感觉asp.net这套东西最初是从4.5中的owin形成的。目前官方文档重点是讲路由,没有特别说明与传统路由的区别,本篇主要介绍终结点路由的相关概念和如何使用,不会详细介绍路由&#xff0c…

共享后缀的链表

有一种存储英文单词的方法,是把单词的所有字母串在一个单链表上。为了节省一点空间,如果有两个单词有同样的后缀,就让它们共享这个后缀。下图给出了单词“loading”和“being”的存储形式。本题要求你找出两个链表的公共后缀。 函数接口定义&…

C#反射与特性(一):反射基础

1. 说明1.1 关于反射、特性在 《C# 7.0 本质论》中,关于这方面的知识在 《第十八章 反射、特性和动态编程》;在《C# 7.0 核心技术指南》中,这部分内容在《第19章 反射和元数据》。[图片来自 《C# 7.0 本质论》]在这里我们可以获得一些关联性很…

数据结构基础概念、逻辑结构、物理结构

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。也就是说,数组结构指的是数据集合及数据之间关系的集合,是两个集合。 数据:是描述客观事物的符号,是计算机中可以操作的对象&#…

收藏!推荐12个超实用的Visual Studio插件

工欲善其事,必先利其器,整理的一些我必装的12款Visual Studio插件,希望你们能get到。效率工具前文传送门:推荐:程序员必装的10款谷歌插件程序员必备的8个学习工具99%的人不知道搜索引擎的6个技巧01 CodeMaidCodeMaid快速整理代码文…

数据结构选择题(c语言)

1.若有char w; int x; float y; double z; 则表达式w*xz-y值的数据类型为( )。 (2分) A.float B.char C.int D.double D 解析: 整形和浮点型计算,结果为浮点型;单精度和双精度计算,结果为双精度 因为在计算…

搭建独立博客,这款评论插件不能错过

微信公众号因为申请的时间晚,一直到现在都无法开通评论功能,之前博客一直使用的多说作为评论系统,自从多说关闭后,好多年都处于无评论状态,最近发现 gitalk 还不错,所以在博客中进行了对 gitalk 的集成&…

最大堆和最小堆(数据结构)

堆和栈的区别: 一、空间分配区别: 栈(操作系统):由操作系统自动分配释放,存放函数的参考值,局部变量的值等。其操作方式类似于数据结构中的栈堆(操作系统):一…

2019公众号总结之——Top100 技术文章汇总

大家好,我是张善友。新年伊始,我们在欢送10年代的同时迎来了20年代。在这个崭新的时代,感谢各位朋友一直关注“dotnet跨平台”。一晃5年有余,关注公众号的粉丝6万,相对于.NET开发人员,希望2020年有更多小伙…

树,森林,二叉树的互相转换

树、森林到二叉树的转换 将树转换为二叉树 树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟。按照这种关系很自然地就将树转换成相应的二叉树: 在所有兄弟结点之间加一连线对每个结点,除了保留与其长子的连线外&am…