前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >用数组实现队列

用数组实现队列

作者头像
叶茂林
发布于 2024-07-06 00:22:50
发布于 2024-07-06 00:22:50
12700
代码可运行
举报
运行总次数:0
代码可运行

队列用链表实现很简单,记住链表头和链表尾就行了,每次push就往头插入,每次pop就删掉尾巴

我们这里用数组实现一下队列,基本思想是一个循环滑动的窗口,用两个变量记录队首和队尾索引

push放到队尾,pop放到队首,队尾索引和队首索引都需要循环

这里比较难的是队列容量的动态增长,申请两倍的容量后,从队首索引开始拷贝

完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Queue {
    int volume = 8;
    int _size = 0;
    int back = 0;
    int front = 0;
    int *data = nullptr;

    void grow() {
        int *temp = new int[2 * volume];
        for (int i = 0; i < volume; ++i) {
            temp[i] = data[(front + i) % volume];
        }
        delete[]data;
        data = temp;
        volume *= 2;
    }

public:
    Queue() {
        data = new int[volume];
    }

    void push(int value) {
        ++_size;
        data[back] = value;
        if (_size == volume) {
            grow();
        }
        back = (back + 1) % volume;
    }

    int pop() {
        if (empty())
            return -1;
        --_size;
        int temp=data[front];
        front=(front+1)%volume;
        return temp;
    }

    bool empty() const {
        return _size == 0;
    }

    bool size() const {
        return _size;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++从 STL 中的队列开始说起
队列遵循先进先出的存储原则,类似于一根水管,水从一端进入,再从另一端出去。进入的一端称为队尾,出去的一端称为队头。
一枚大果壳
2022/12/20
9110
C++从 STL 中的队列开始说起
银行业务队列简单模拟 STL队列 题解
题目链接:https://pta.patest.cn/pta/test/15/exam/4/question/825队列比较简单,就附上队列的基本信息加源代码.
十四君
2019/11/29
9130
C++数据结构——队列「建议收藏」
(1)队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构;
全栈程序员站长
2022/08/22
2.8K0
C++数据结构——队列「建议收藏」
队列
队列和栈一样,是一种特殊的线性表。跟栈不同的是,队列的插入和删除分别在线性表的两端进行,因此,队列是一个先进先出(FIFO)的线性表。插入元素的一端叫队尾(back或rear),删除元素的那一端成为队首(front)。
青木
2018/08/15
5140
用数组实现栈
这里用数组实现,需要三个成员变量,分别记录栈容量、栈顶索引(栈元素数量)、数组首地址
叶茂林
2024/07/06
1070
队列的使用以及模拟实现(C++版本)
C++中的队列是一种容器,使用队列可以实现先进先出(FIFO)的数据结构。队列可以添加元素到队列的末尾,也可以从队列的开头删除元素。 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的 成员函数来访问其元素。元素从队尾入队列,从队头出队列。 C++中的队列通常使用STL库中的queue类实现。
初阶牛
2023/10/14
2350
队列的使用以及模拟实现(C++版本)
容器适配器之stack,queue和优先级队列---基于List实现的链栈,链队列,优先级队列
注意:当我们在类外部实现insert函数的时候,typename用来声明iterator是一个类型,这里iterator是定义在List类模板中的一个类
大忽悠爱学习
2021/11/15
5110
Java的栈与队列以及代码实现
栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶 栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等。 例如这把枪,第一发子弹是最后发射的,第一发子弹在栈底,而最新安装上去的子弹在栈的顶部,只有将上面的子弹打完(栈顶的数据走完),最后一发子弹才会射出
如烟花般绚烂却又稍纵即逝
2024/11/26
1440
Java的栈与队列以及代码实现
数据结构栈队列链表树二叉查找树
这学期刚回到所里的时候把c++数据结构看了一遍,基本的数据结构照着视频也敲了一遍,不过那个时候自己对c++的了解只限于一些基本的语法,c++primer也还没有看,对于数据结构的了解也很有限,只是硬抄下来了,最近刷题感觉到这块还是不太熟悉,所以又想到把这里重新写一遍,这一遍不能是硬抄了,每一个函数或者功能,先自己试着实现,如果遇到困难再去看视频,然后再写,这样应该能学的快一些,这里顺便做做笔记,以供自己以后复习。 写的代码我就放在这里
和蔼的zhxing
2018/09/04
5540
数据结构栈队列链表树二叉查找树
数据结构3——linuxC(栈和队列)
demo1顺序栈 #include <stdio.h> #define SEQ_STACK_SIZE 10 // 顺序栈数据节点 struct seq_stack{ int data; }; // 顺序栈下标 int g_n; // 入栈(压栈) void stack_push(int new_data, struct seq_stack *s); // 出栈(弹栈) int stack_pop(int *pop_data, struct seq_stack *s); // 显示顺序栈中
天天Lotay
2022/12/02
5890
数据结构3——linuxC(栈和队列)
可epoll队列
就可以使用epoll来监控队列中是否有数据的队列,当然也支持select和poll。
一见
2018/08/10
4440
3-2 队列
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行删除操作的端称为队头 ,进行插入操作的端称为队尾。
TeeyoHuang
2019/07/02
3900
3-2 队列
两个栈实现一个队列
我们拥有两个栈,可以让其中一个栈作为队列的入口,负责插入新元素;另一个栈作为队列的出口,负责移除老的元素。
全栈程序员站长
2022/07/21
3410
两个栈实现一个队列
用数组实现堆
实现堆关键在于堆调整,堆有向上调整和向下调整,当pop堆顶元素的时候是弹出数组里面最小的元素,这个时候需要向下调整堆,把堆顶元素的值更新为数组末尾元素的值,然后从堆顶开始向下调整堆
叶茂林
2024/07/07
820
每日算法刷题Day15-0到n-1中缺失的数字、调整数组顺序、从尾到头打印链表、用两个栈实现队列
一个长度为 n−1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围 0 到 n−1之内。
timerring
2022/10/27
7730
每日算法刷题Day15-0到n-1中缺失的数字、调整数组顺序、从尾到头打印链表、用两个栈实现队列
深入理解C++中的栈与队列:概念、底层机制与高效操作指南
在C++标准库中,stack(栈)和queue(队列)是两种重要的容器适配器,它们分别遵循后进先出(LIFO)和先进先出(FIFO)的操作原则。通过这些容器,我们可以高效地管理元素的插入、删除和访问,适用于多种实际编程场景。本文将详细介绍stack和queue的概念、底层实现、常用成员函数,以及它们在不同容器适配器中的应用,以帮助您深入理解并灵活运用这些数据结构。
suye
2024/10/16
1.1K0
【数据结构】队列的顺序表实现&&收尾栈和队列
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
每天都要进步呀
2023/03/28
5350
【数据结构】队列的顺序表实现&&收尾栈和队列
【C++】STL:栈和队列模拟实现
C++中的stack(栈)和queue(队列)是两种常见的数据结构,用于存储和管理数据。
大耳朵土土垚
2024/06/04
1930
【C++】STL:栈和队列模拟实现
【Python数据结构系列】☀️《队列(顺序队列、链式队列、双端队列)》——知识点讲解+代码实现☀️
队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的**线性存储结构。 **
天道Vax的时间宝藏
2021/08/12
1K0
【愚公系列】2023年11月 数据结构(六)-双向队列
数据结构是计算机科学中的一个重要概念,它描述了数据之间的组织方式和关系,以及对这些数据的访问和操作。常见的数据结构有:数组、链表、栈、队列、哈希表、树、堆和图。
愚公搬代码
2023/11/05
4890
推荐阅读
相关推荐
C++从 STL 中的队列开始说起
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档