数据结构之队列建议收藏

一C++标准库queue(1)成员函数(2)示例二C++实现队列

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

全栈程序员社区此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“验证码”,获取验证码。在微信里搜索“全栈程序员社区”或者“www_javaforall_cn”或者微信扫描右侧二维码都可以关注本站微信公众号。

队列(Queue),是一种线性存储结构。它有以下几个特点:
(01) 队列中数据是按照”先进先出(FIFO, First-In-First-Out)”方式进出队列的。
(02) 队列只允许在”队首”进行删除操作,而在”队尾”进行插入操作。

一 C++标准库queue

(1)成员函数

成员函数 说明 时间复杂度
size() 返回队列大小 O(1)
push() 在末尾加入一个元素 O(1)
pop() 删除第一个元素 O(1)
front() 返回第一个元素 O(1)
end() 返回最后一个元素 O(1)
empty 队列为空返回真 O(1)

(2)示例

#include <iostream>
#include <queue>
using namespace std;

/**
 * C++ : STL中的队列(queue)的演示程序。
 *
 * @author skywang
 * @date 2013/11/07
 */
int main ()
{
    int tmp=0;
    queue<int> iqueue;

    // 将10, 20, 30 依次加入队列的末尾
    iqueue.push(10);
    iqueue.push(20);
    iqueue.push(30);

    // 删除队列开头的元素
    iqueue.pop();

    // 将“队列开头的元素”赋值给tmp,不删除该元素.
    tmp = iqueue.front();
    cout<<"tmp="<<tmp<<endl;

    // 将40加入到队列的末尾
    iqueue.push(40);

    cout << "empty()=" << iqueue.empty() <<endl;
    cout << "size()=" << iqueue.size() <<endl;
    while (!iqueue.empty()) 
    {
        tmp = iqueue.front();
        cout<<tmp<<endl;
        iqueue.pop();  
    }

    return 0;
}

二 C++实现队列

#ifndef ARRAY_QUEUE_HXX
#define ARRAY_QUEUE_HXX

#include <iostream>
using namespace std;

template<class T> class ArrayQueue{
    public:
        ArrayQueue();
        ~ArrayQueue();

        void add(T t);
        T front();
        T pop();
        int size();
        int is_empty();

    private:
        T *arr;
        int count;
};

// 创建“队列”,默认大小是12
template<class T>
ArrayQueue<T>::ArrayQueue() 
{
    arr = new T[12];
    if (!arr) 
    {
        cout<<"arr malloc error!"<<endl;
    }
}

// 销毁“队列”
template<class T>
ArrayQueue<T>::~ArrayQueue() 
{
    if (arr) 
    {
        delete[] arr;
        arr = NULL;
    }
}

// 将val添加到队列的末尾
template<class T>
void ArrayQueue<T>::add(T t) 
{
    arr[count++] = t;
}


// 返回“队列开头元素”
template<class T>
T ArrayQueue<T>::front() 
{
    return arr[0];
}

// 返回并删除“队列末尾的元素”
template<class T>
T ArrayQueue<T>::pop() 
{
    int i = 0;;
    T ret = arr[0];

    count--;
    while (i++<count)
        arr[i-1] = arr[i];

    return ret;
}

// 返回“队列”的大小
template<class T>
int ArrayQueue<T>::size() 
{
    return count;
}

// 返回“队列”是否为空
template<class T>
int ArrayQueue<T>::is_empty()
{
    return count==0;
}

#endif
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120155.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 【OpenCV】双线性插值法

    【OpenCV】双线性插值法双线性插值法定义:又称双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向上分别进行一次线性插值。对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v)(其中i、j均为浮点坐标的整数部分,u、v为浮点坐标的小数部分,是取值[0,1)区间的浮点数),则这个像素得值f(i+u,j+v)可由原图像中坐标为(i,j)、(…

    2022年6月10日
    482
  • vim复制粘贴_vim如何复制粘贴

    vim复制粘贴_vim如何复制粘贴一、打开文件        执行vimtest命令打开test文件        在命令模式下输入setnu,展示文本行号二、按字符复制与粘贴        在命令行模式下输入字符v(小写),便可以进入按字符选择模式,通过h、i、j、k键移动光标选择要进行复制的字符串。        完成选择后按下y键进行复制,将鼠标移动到最后一行,按下p执行粘贴操作就完成了对选择…

    2022年4月19日
    59
  • 卷积及理解图像卷积操作的意义

    卷积及理解图像卷积操作的意义转载:http://blog.csdn.net/chaipp0607/article/details/72236892     https://www.zhihu.com/question/22298352   在图像处理领域,我们经常能听到滤波,卷积之类的词,其实他们都可以看做一种图像的卷积操作,相对应的卷积核,卷积模板,滤波器,滤波模板,扫描窗其实也都是同一个东西。下面我们进一步讨论…

    2022年5月28日
    36
  • 聊聊MyBatis缓存机制

    聊聊MyBatis缓存机制点击上方“程序员小灰”,选择“置顶公众号”有趣有内涵的文章第一时间送达!本文转载自公众号美团技术点评前言MyBatis是常见的Java数据库访问层框架。在日常工作中,开…

    2022年5月21日
    32
  • vue集成activiti工作流_vue 异步渲染

    vue集成activiti工作流_vue 异步渲染一、安装px2rem-loadernpminstallpx2rem-loader二、配置build文件夹下utils.js,找到generateLoaders 修改如下配置constpx2remLoader={loader:’px2rem-loader’,options:{remUnit:75//设计稿宽度/10}…

    2025年7月4日
    2
  • HP磁盘阵列损坏的修复

    HP磁盘阵列损坏的修复公司中有一台HPDL380G5服务器硬盘红灯报警,使用ACU工具查看后,显示磁盘损坏,截图如下:更换磁盘后,显示正在重建,即属于正常,截图如下:更换硬盘前需要确认硬盘是什么型号,哪个系列的,以及硬盘的大小:最重要的是SPARE号一定要保持一致。下面给大家提供一下更换磁盘的一些资料以及注意事项:1、更换的磁盘与原先的磁盘无比保持大小相同,型号…

    2022年5月30日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号