(40)4.30数据结构(队列)

1.队列的基本概念

2.队列的顺序

#define MaxSize 10
#define ElemType int
typedef struct 
{
    ElemType data[MaxSize];
    int front, rear;
}SqQueue;
//1.初始化操作
void InitQueue(SqQueue& Q)
{
    //初始化 队头,队尾指针指向0
    Q.rear = Q.front = 0;
  }
//判断为空
bool QueueEmpty(SqQueue Q)
{
    if (Q.rear = Q.front)  //队空条件
        return true;
    else
        return false;
}
void testQueue()
{
    SqQueue Q;
    InitQueue(Q);
    //..后续操作。。//
}
//2.入队
bool EnQueue(SqQueue& Q, ElemType x)
{
    if ((Q.rear + 1) % MaxSize == Q.front)
        return false;     //队满则报错
    Q.data[Q.rear] = x;   //新元素插入队尾
    Q.rear = (Q.rear + 1) % MaxSize;//队尾指针加1取模
    return true;
}
//3.出队(删除一个队头元素,并用x返回)
bool DEQueue(SqQueue& Q, ElemType& x)
{
    if (Q.rear == Q.front)
        return false;
    x = Q.data[Q.front];
    Q.front = (Q.front + 1) % MaxSize;
    return true;
}
//获得队头的元素值,用下返回
bool DEQueue(SqQueue& Q, ElemType& x)
{
    if (Q.rear == Q.front)
        return false;   //队空则报错
    x = Q.data[Q.front];
    return true;
}

//队列元素个数:
//(rear+MaxSize-front)%MaxSize
//方案二判断队列已满/已空
typedef struct
{
    ElemType data[MaxSize];
    int front, rear;
    int size;  //初始化时  rear=front=0; size=0;
}SqQueue;
//插入成功size++
//插入失败size--
//方案三判断队列已满/已空
typedef struct
{
    ElemType data[MaxSize];
    int front, rear;
    int tag;//最近进行的是删除/插入
}SqQueue;
//每次删除操作成功时,都令tag=0;
//每次删除操作失败时,都令tag=1;
//只有删除成功才能导致队空;
//只有插入成功才能导致队满;

//队满条件:
//front==rear&&tag==1;
//队空条件
//front==rear&&tag==0;

//其他出题方法
//指向尾指针元素指向的方向

4.在做题的时候要注意rear指针指向的位置

知识点小结


3.队列的链式实现

#include <stdio.h>
#include <stdlib.h>

#define ElemType int

typedef struct LinkNode //链式队列结点
{
    ElemType data;
    struct LinkNode* next;
}LinkNode;

typedef struct         //链式队列
{
    LinkNode* front, * rear;//队列的队头和队尾指针

}LinkQueue;
//1.初始化(带头结点)
void InitQueue(LinkQueue& Q)
{
    //初始化front,rear 都指向头结点
    Q.rear = Q.front = (LinkNode*)malloc(sizeof(LinkNode));
    Q.front->next = NULL;
}

void testLinkQueue()
{
    LinkQueue Q;  //声明一个队列
    InitQueue(Q); //初始化队列
    //。。。后续操作/
}
//判断队列是否为空
bool IsEmpty(LinkQueue Q)
{
    if (Q.rear = Q.front)  //队空条件
        return true;
    else
        return false;
}
//初始化队列(不带头结点)
void InitQueue(LinkQueue& Q)
{
    //初始化 front rear 都指向NULL
    Q.rear = NULL;
    Q.front= NULL;
}
bool IsEmpty(LinkQueue Q)
{
    if (Q.front ==NULL) 
        return true;
    else
        return false;
}
//2.入队(带头结点)
void EnQueue(LinkQueue& Q, ElemType x)
{
    LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));
    s->data = x;
    s->next = NULL;
    Q.rear->next = s;
    Q.rear = s;
}
//入队(不带头结点)
void EnQueue(LinkQueue& Q, ElemType x)
{
    LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));
    s->data = x;
    s->next = NULL;
    if (Q.front == NULL)//在空队列中插入第一个元素
    {
        Q.front = s;      //修改队头尾指针
        Q.rear = s;
    }
    else
    {
        Q.rear->next = s; //新节点插入到rear 结点之后
        Q.rear = s;    //修改rear 指针 
    }
}
//出队(带头结点)

bool DeQueue(LinkQueue& Q, ElemType& x)
{
    if (Q.front == Q.rear)
        return false;            //空队
    LinkNode* p = Q.front->next; 
    x = p->data;                //用变量x返回队头元素
    Q.front->next = p->next;    //修改头结点的next指针
    if (Q.rear == p)            //此次是最后一个结点出队
        Q.rear = Q.front;       //修改rear指针
    free(p);                    //释放空间 
    return true;
}
//队头元素出队(不带头结点)
bool DeQueue(LinkQueue& Q, ElemType& x)
{
    if (Q.front == NULL)
        return false;            //空队
    LinkNode* p = Q.front;      //p指向此次出队的结点
    x = p->data;                //用变量x返回队头元素
    Q.front = p->next;          //修改头结点的front指针
    if (Q.rear == p)            //此次是最后一个结点出队
    {
        Q.rear = NULL;          //front 指向 NULL
        Q.rear = NULL;          //rear 指向NULL 
    }
    free(p);                    //释放空间 
    return true;
}

知识点小结

4.双端队列

输入受限的双端队列

输出受限的双端队列

双端队列

(主要考出对入队的模拟操作)

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

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

相关文章

单细胞|GeneTrajectory·基因轨迹

跑完了&#xff0c;记录一下&#xff0c;顺便写写我在使用中遇到的问题&#xff0c;欢迎讨论&#xff5e; 声明&#xff1a;我是用自己数据跑的&#xff0c;因为还未发表所以就还是借用官网的图啦&#xff5e; 1.准备 library(GeneTrajectory) library(Seurat) library(dply…

有哪些软件可以使用云渲染?

随着技术的发展&#xff0c;云渲染已成为动画制作人员与设计师重要的渲染助手。它可结合云端强大的计算机能力&#xff0c;帮助渲染人员高速的完成渲染任务&#xff0c;大幅度节省时间和本地计算资源。它们以用户友好的界面、强大灵活的渲染能力&#xff0c;满足了各类专业渲染…

XSS漏洞---XSS-labs通关教程

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 Level-1 过滤源码&#xff1a;无 pyload&#xff1a; name<script>alert(1)</script> Level-2 过滤源码&#xff1a;利用转译函数将特殊字符转译为实体字符 $str $_GET["…

翻译《The Old New Thing》 - Double-clicking radio buttons

Double-clicking radio buttons - The Old New Thing (microsoft.com)https://devblogs.microsoft.com/oldnewthing/20050804-10/?p34713 Raymond Chen 在 2005年08月04日 让对话框单选按钮支持双击确定 提示 本文提供了一种让对话框窗口上的控件支持双击确定窗口返回的方法 …

git-新增业务代码分支

需求 使用git作为项目管理工具管理项目&#xff0c;我需要有两个分支&#xff0c;一个分支是日常的主分支&#xff0c;会频繁的推送和修改代码并推送另外一个是新的业务代码分支&#xff0c;是一个长期开发的功能&#xff0c;同时这个业务分支需要频繁的拉取主分支的代码&#…

oracle试用期过期,解决办法

过期重置方法&#xff0c;删除注册表&#xff0c;相当于无限试用&#xff0c;缺点每30天都要重置一次 1. window r 输入 regedit 确定&#xff0c;打开注册表 2.删除下图里的两个文件夹 3.重启 plsql,登录成功

react antd table 自定义表头功能实现

react antd table 自定义表头功能 Ⅰ- 壹 - 功能展示和使用需求 需求描述 基于antd table 实现 自定义 table 的表头 内容 排序 宽度和顺序等 , 可根据自己的需求自己扩展 github:https://github.com/whqgo/ReactAntdTableCustomHeader 功能展示 Ⅱ - 贰 - 封装思路 Task…

2024年4月17日华为春招实习试题【三题】-题目+题解+在线评测,2024.4.17,华为机试

2024年4月17日华为春招实习试题【三题】-题目题解在线评测 &#x1f52e;题目一描述&#xff1a;扑克牌消消乐输入描述输出描述样例一样例二Limitation解题思路一&#xff1a;模拟&#xff0c;遇到连续3张相同牌号的卡牌&#xff0c;直接删除解题思路二&#xff1a;栈解题思路三…

软考网络工程师 第六章 第二部分 第二节 IP分片与计算

IP定义 IP报文最大65535字节&#xff0c;而以太网MTU为1500字节。 相当于货轮能载重65535&#xff0c;而火车载重1500&#xff0c;那么必须把货轮上的货物分装给多个火车运输 例题精选解析 以太网主机发送一个IP分组&#xff0c;长度3000字节&#xff0c;头长度为标准长度&a…

【北京迅为】《iTOP-3588开发板源码编译手册》-第三章 编译 Linux源码包

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

C语言 函数概述

好 接下来 我们来讲函数 构建C程序的最佳方式 就是模块化程序设计 C语言中 最基本的程序模块被称为 函数 所以 这个知识点的重要性不言而喻 这里 我们讲个故事 诸葛亮六出祁山时 为了逼司马懿出战 派人送给力司马懿一件女人衣服 司马懿只是为使者 诸葛亮的饮食起居 使者感叹…

AI论文速读 |2024[IJCAI]TrajCL: 稳健轨迹表示:通过因果学习隔离环境混杂因素

题目&#xff1a; Towards Robust Trajectory Representations: Isolating Environmental Confounders with Causal Learning 作者&#xff1a;Kang Luo, Yuanshao Zhu, Wei Chen, Kun Wang(王琨), Zhengyang Zhou(周正阳), Sijie Ruan(阮思捷), Yuxuan Liang(梁宇轩) 机构&a…

leetcode-字符串的排列-100

题目要求 思路 1.因为只涉及到字符&#xff0c;因此可以进行排序 2.创建临时字符串&#xff0c;当临时字符串temp的长度等于str的长度&#xff0c;作为判出条件。 3.创建一个标记的数组&#xff0c;每次在temp中插入一个字符&#xff0c;便在对应的数组下标设置为1&#xff0c…

国家电网某地电力公司网络硬件综合监控运维项目

国家电网某地电力公司是国家电网有限公司的子公司&#xff0c;负责当地电网规划、建设、运营和供电服务&#xff0c;下属多家地市供电企业和检修公司、信息通信公司等业务支撑实施机构。 项目现状 随着公司信息化建设加速&#xff0c;其信息内网中存在大量物理服务器、存储设备…

美团KV存储squirrel和Celler学习

文章目录 美团在KV存储squirrel优化和改进在水平方向1、对Gossip协议进行优化 在垂直扩展方面1、forkless RDB数据复制优化2、使用多线程&#xff0c;充分利用机器的多核能力 在高可用方面 美团持久化kv存储celler优化和改进水平扩展优化1、使用bulkload进行数据导入2、线程模型…

linux启动常见问题

一、忘记root密码 日常生活中&#xff0c;我们会接触到很多账号和密码&#xff0c;而这些账号和密码我们不能都很好的记忆&#xff0c;对于linux也是一样的&#xff0c;如果root密码忘记了怎么办&#xff1f;岂不是都无法登陆使用Linux了&#xff1f;现在我就教各位&#xff0c…

一文了解CRM系统帮助中心:从认识到搭建

客户关系管理&#xff08;CRM&#xff09;系统是企业的一个重要部分。而CRM系统帮助中心为用户提供了便捷的支持服务&#xff0c;提升了用户体验&#xff0c;减少了企业运营成本。本文将从认识到搭建&#xff0c;带你全面了解CRM系统帮助中心。 一、认识CRM系统帮助中心 CRM系统…

智慧交通系统:未来出行,从这里开始

随着城市化进程的加快&#xff0c;交通拥堵、事故频发、停车难等问题日益凸显&#xff0c;传统交通管理模式已难以满足现代社会的需求。智慧交通系统作为解决这些问题的关键&#xff0c;通过集成创新技术&#xff0c;实现交通管理的智能化、信息化&#xff0c;提高交通系统的运…

流量分析利器arkime的学习之路(三)---结合Suricata攻击检测

1、基础 Arkime安装部分参考《流量分析利器arkime的学习之路&#xff08;一&#xff09;—安装部署》 在此基础上安装suricata软件并配置。 2、安装suricata yum install suricate 可能依赖的文件包括libyaml&#xff0c;PyYAML&#xff0c;这些可能在之前安装arkime或者其他…

教程分享:如何为跨境电商、外贸、国际展会制作二维码?

不论是做跨境电商、在全球做产品推广&#xff0c;还是国外的餐厅运营、参加国际展会&#xff0c;或者是做创意户外广告、制作个性化的个人名片、有趣的产品包装……只要是在国外使用二维码&#xff0c;你都可以在QR Tiger去制作您需要的二维码&#xff01; 一、认识QR Tiger 二…