队列板子

这篇具有很好参考价值的文章主要介绍了队列板子。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

队列

队列:先进先出的线性表

顺序队列

队列有队头的front指针和队尾的rear指针。顺序队列的出队是通过移动first指针进行操作的“假删除”。

普通顺序队列

//顺序普通队列板子
#define MAX 10
typedef struct{
    int data[MAX];
    int front;
    int rear;
}queque;
void init(queque* a){//初始化队列
    a->front=a->rear=-1;
}
int add(queque* a,int num){//新元素入队
    if(a->rear==MAX-1) return 1;
    else{
        a->rear++;
        a->data[a->rear]=num;
        return 0;
    }
}
int delete(queque* a){//元素出队,注意顺序队列中只是通过移动队头指针实现的“假删除”
    if(a->front==a->rear) return 1;
    else{
        a->front++;
        return 0;
    }
}
int gethead(queque* a){
    if(a->front==a->rear) return 1;
    else return a->data[a->front];
}
int getlast(queque* a){
    if(a->front==a->rear) return 1;
    else return a->data[a->rear];
}
int length(queque* a){
    return a->rear-a->front;
}
int checkempty(queque* a){
    if(a->front==a->rear) return 0;
    else return 1;
}
int checkfull(queque* a){//注意会出现假上溢情况
    if(a->rear==MAX-1) return 0;
    else return 1;
}

循环顺序队列

为避免出现假上溢情况,一般采取循环顺序队列。尾指针通过取模运算自动控制其所在下标。(实现:[(rear+1)%maxsize])

浪费数组内一个空间的情况
#define MAX 10
typedef struct{
    int data[MAX];
    int front,rear;
}queue;
void inti(queue* a){
    a->front=a->rear=MAX-1;//模拟普通顺序队列的front指向队头元素的前一个元素 从而完成浪费一个数组空间的操作
}
int add(queue* a,int num){
    if((a->rear+1)%MAX==a->front) return 1;
    else{
        a->rear=(a->rear+1)%MAX;//浪费一个空间的方式
        a->data[a->rear]=num;
        return 0;
    }
}
int delete(queue* a){
    if(a->front==a->rear) return 1;
    else{
        a->front=(a->front+1)%MAX;
        return 0;
    }
}
int length(queue* a){
    return (a->rear-a->front+MAX)%MAX;//此处取模的方式非常巧妙。注意front为指向队头的前一个元素
}
int gethead(queue* a){
    if(a->rear==a->front) return 1;
    else return a->data[(a->front+1)%MAX];
}
int getrear(queue* a){
    if(a->rear==a->front) return 1;
    else return a->data[(a->rear+1)%MAX];
}
int checkempty(queue* a){
    if(a->rear==a->front) return 0;
    else return 1;
}
int checkfull(queue* a){
    if((a->rear+1)%MAX==a->front) return 0;
    else return 1;
}

一般都是采取浪费一个空间的情况,如不想浪费数组内一个空间,需要先将元素入队,再加判断的情况下移动指针。

扩展:双端队列

允许在队列两端(前端和后端)进行入队和出队操作。后端进前端出/前端进后端出——队列,前端进前端出/后端进后端出——栈。

链式队列

本质:带头指针和尾指针的单链表,尾插法入队,删除首元结点出队。在内存条允许范围内不会出现假上溢的情况。文章来源地址https://www.toymoban.com/news/detail-802977.html

C++ STL库 <queque>

到了这里,关于队列板子的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构——队列(C语言实现)

    队列是一种特殊的线性结构,数据只能在一端插入,数据也只能在另一端进行删除。插入数据的那一端称之为队尾,插入数据的动作称之为入队。删除数据的那一端称之为队头,删除数据的动作称之为出列。队列遵守的是FIFO原则(Frist In First Out),即先进先出原则。 队列具

    2024年02月03日
    浏览(26)
  • c语言的数据结构:队列

    动态内存分配:链表在C语言中通常使用动态内存分配,这意味着可以在运行时根据需要动态地添加或删除节点。这对于实现一个动态大小的队列非常有用,因为队列的大小可以在运行时变化。相比之下,数组的大小通常是固定的,需要在编译时确定,这可能会限制队列的灵活

    2024年03月14日
    浏览(18)
  • C语言实现队列--数据结构

    😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️Take your time ! 😶‍🌫️😶‍🌫️😶‍🌫️😶‍🌫️ 💥个人主页:🔥🔥🔥大魔王🔥🔥🔥 💥所属专栏:🔥魔王的修炼之路–数据结构🔥 如果你觉得这篇文章对你有帮助,请在文章结尾处留下你的 点赞 👍和 关注 💖,支持一

    2024年02月05日
    浏览(17)
  • 【数据结构】队列---C语言版(详解!!!)

    队列 :只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有 先进先出FIFO (First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头 入队列 :进行插入操作的一端称为队尾 出队列 :进行删除操作的一端称

    2024年02月10日
    浏览(19)
  • [数据结构 -- C语言] 队列(Queue)

    目录 1、队列 1.1 队列的概念及结构 2、队列的实现 2.1 接口 3、接口的实现 3.1 初始化队列 3.2 队尾入队列 分析: 3.3 队头出队列 分析: 3.4 获取队列头部元素 3.5 获取队列尾部元素 3.6 获取队列中有效元素个数 3.7 检测队列是否为空 3.7.1 int 类型判空 3.7.2 bool 类型判空 3.8 销毁队

    2024年02月07日
    浏览(17)
  • 【数据结构初阶】六、线性表中的队列(C语言 -- 链式结构实现队列)

    ========================================================================= 相关代码gitee自取 : C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 【数据结构初阶】五、线性表中的栈(C语言 -- 顺序表实现栈)_高高的胖子的博客-CSDN博客  

    2024年02月08日
    浏览(16)
  • 数据结构初阶(用C语言实现简单数据结构)--栈和队列

    ✨✨欢迎来到T_X_Parallel的博客!!       🛰️博客主页:T_X_Parallel       🛰️专栏 : 数据结构初阶       🛰️欢迎关注:👍点赞🙌收藏✍️留言 这小猫真好看 言归正传,通过上篇有关顺序表和链表的博客,可以了解到线性表的一些大致特征,这篇博

    2024年02月08日
    浏览(14)
  • 数据结构-循环队列详解(c语言版)

    目录 一、什么是循环队列? 二、特点 三、基本运算 四、代码实现  1、初始化 2、入队 3、出队 4、队满? 5、队空?  6、输出队列 7、队列大小 8、获取队首元素 五、队列应用场景 六、完整代码 1、完整代码 2、运行结果 七、总结 前言 相比于链队列, 循环队列 有着内存固

    2024年01月20日
    浏览(27)
  • 数据结构-队列(C语言的简单实现)

    队列也是一种数据结构,队列也可以用来存放数字 每次只能向队列里将入一个数字,每次只能从队列里获得一个数字 在队列中,允许插入的一段称为入队口,允许删除的一段称为出队口 它的原则是先进先出(FIFO: first in first out),先进入队列的数据先出去,后进入的后出去。

    2024年02月13日
    浏览(17)
  • 数据结构-队列的实现(C语言版)

    前言         队列是一种特殊的线性表,它只允许在一端对数据进行插入操作,在另一端对数据进行删除操作的特殊线性表,队列具有先进先出的(FIFO)的 特性,进行插入操作的一端称为队尾,进行删除操作的一端称为队头。         队尾:元素在队尾入队。插入操作。

    2024年02月13日
    浏览(15)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包