首页 > 其他分享 >ds:队列的基本实现

ds:队列的基本实现

时间:2023-07-09 13:34:50浏览次数:31  
标签:基本 Node 结点 队列 出队 front ds rear size

 

一.顺序队

1.入队判断队满,出队判断队空;

2.顺序队定义时,要注意front、rear是下标,不是指针。

typedef struct{
    int data[maxsize];
    int rear,front;        // front:队头元素的下标。rear:队尾元素的后一个位置的下标(下一个待插入的位置),
}sqListQueue;

3,如果判断队满的条件是Q.front = (Q.rear+1)%maxsize,那么就要占用maxsize中一个位置来存放Q.rear指向,为了避免空间浪费就引入了tag、size判断队满

4.---使用tag时,初始化时tag=0,只有入队时将tag改为1,出队时tag改为0。判断队满:Q.rear==Q.front && Q.tag==1;队空:Q.rear == Q.front && Q.tag==0。

5..---使用size时,初始化时size=0,入队时size++,出队时size--。判断队满:Q.size == maxsize;队空:Q.size==0。

 

二.链队

1.出队判断队空;出队还需要判断当前结点是否是最后一个结点,如果是,需要把Q.rear指向Q.front

bool outQueue(LinkQueue &Q,int &e){
    if(isEmpty(Q)){     // 出队:判队空
        return false;
    }
    Node *p = Q.front->next;
    e = p->data;
    if(Q.rear == p){    // 出队:若出队结点为最后一个结点,则需要把队尾指向队头
        Q.rear = Q.front;
    }
    Q.front->next = p->next;
    free(p);
    cout << "deQueue suc, data: " << e << endl;
    return true;
}

2.链队的实现需要注意:要先定义一个单链表,再定义一个队列。

// 链队:从表尾进(rear->next),从表头出(front->next)。带头结点的链队。front->L->a1->a2
typedef struct Node{
    int data;
    struct Node *next;
}Node;      // 链队结点

typedef struct{
    struct Node *front,*rear;
}LinkQueue;     // 队列,结点类型为单链表结点,在单链表结点上又加了front、rear指针

3.如果是带头结点单链表,初始化时要定义一个头结点,让队头指针、队尾指针都指向这个头结点。不带头结点的单链表实现的队列初始化时直接把队头队尾指针指向NULL即可。

void initQ(LinkQueue &Q){
    Q.front = Q.rear = (Node *)malloc(sizeof(Node));
    Q.front->next = NULL;
} 

4.

 

标签:基本,Node,结点,队列,出队,front,ds,rear,size
From: https://www.cnblogs.com/jinziguang/p/17538629.html

相关文章

  • 数据交换不失控:华为云EDS,让你的数据你做主
    摘要:华为云EDS在“可信、可控、可证”的框架基础上进行数据空间的关键设计,打造数据可控交换的全栈能力。数字社会,每时每刻都有海量数据产生,数据也逐渐从生产过程的附属产物,逐渐成为数字经济的关键生产要素。作为生产要素,数据只有流通起来才能产生大规模的经济价值。数据流通发展......
  • 创建及管理DSW实例
     机器学习PAI产品概述快速入门操作指南准备工作工作空间管理AI计算资源管理AI开发开发流程快速开始智能标注(iTAG)可视化建模(PAI-Designer)交互式建模(PAI-DSW)概述云产品依赖与授权:DSW创建及管理DSW实例通过SSH远程连接DSW配置DSW实......
  • [学习笔记] 启发式合并 & DSU on Tree
    一、启发式合并启发式合并多用于合并两个集合,现在有这样一个问题:现在给定\(n\)个集合,第\(i\)个集合初始只有\(\{i\}\),要支持集合的合并操作。如果我们暴力合并,时间复杂度会是\(O(n^2)\)的。参考并查集的按秩合并,考虑将小的集合合并到大的集合上。考虑计算时间复杂度,容......
  • Python潮流周刊#10:Twitter 的强敌 Threads 是用 Python 开发的!
    你好,我是猫哥。这里每周分享优质的Python及通用技术内容,大部分为英文,已在小标题注明。(标题取自其中一则分享,不代表全部内容都是该主题,特此声明。)首发于我的博客:https://pythoncat.top/posts/2023-07-08-weekly周刊已开通Telegram频道,欢迎关注:https://t.me/pythontrendingwee......
  • DBS学习笔记(三):RDS 备份
    RDS备份RDS支持自动备份实时捕获事务日志默认情况下启用,保留期为7天(0-35天保留期,0=禁用自动备份)您可以提供备份窗口时间和备份保留天数第一个备份是完整备份,后续备份是增量备份数据存储在S3存储桶中(由RDS服务拥有和管理,您不会在S3控制台中看到它们)建议使用Multi-AZ......
  • 类的基本注意点
    注意类名,对象,成员的区分,以及对象名.成员名的调用。类名,即开头class后的Time;对象,即t1,此处使用的是先声明类再定义对象(t1)定义对象的格式:类名对象名;对象名.成员名:表示对这个成员的调用。此处出现的两个函数都是普通函数。()内是形参,t是Time类对象的引用t,相当于t1,t2。这里是与函数相关......
  • RabbitMQ基本配置
    1.用户角色配置自带的guest/guest超级管理员五中不同角色配置:普通管理者(management):仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。策略制定者(policymaker):可登陆管理控制台,同时可以对policy进行管理。但无法查看节点的相关信息。监控者(monitoring):登录......
  • 二、 基本概念
    主题(Topic)ApacheRocketMQ中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息。主题通过TopicName来做唯一标识和区分。 消息类型(MessageType)ApacheRocketMQ中按照消息传输特性的不同而定义的分类,用于类型管理和安全校验。ApacheRocketMQ支持的消息类型有普通消......
  • VSCode 编辑器的基本配置
    VSCode编辑器的基本配置在正式开始本文的内容之前,请允许我先做一些自我介绍:严格来说,我是个自由职业者,经常会参与一些计算机专著的写作与翻译工作(主要作品如下图所示),业余偶尔也会有一些机会定期或不定期地参与国内外大学、开源社区中的一些个人研究项目,也帮忙指导过一些硕士论......
  • 谈谈队列(Queue)
    写在前面蒟蒻发第二篇博客了!作者依然是个新手,依然没有脑子,因此本文可能存在大量不足之处,还请多多指教。对于各种错误,欢迎批评指正!队列队列(Queue),是一种数据结构,在STL中可直接调用。具体地来说,队列是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。这也......