精华内容
下载资源
问答
  • C++ 队列

    2018-03-24 11:37:56
    C++ 队列 C++是C语言的继承,C语言是过程化程序设计语言,C++是面向对象的程序设计语言,过程化意思是编程的作用倾向于提供输入通过一系列的代码得到一个输出,面向对象则使适用于模块化设计,C语言的局限性在大型...

    C++ 队列

    C++是C语言的继承,C语言是过程化程序设计语言,C++是面向对象的程序设计语言,过程化意思是编程的作用倾向于提供输入通过一系列的代码得到一个输出,面向对象则使适用于模块化设计,C语言的局限性在大型程序开发设计的过程中则会逐步显现出来。

    这里写图片描述

    C++ 相对C语言有什么优点呢

    • 封装性:对数据的管理上的优点
    • 继承性:体现了代码重用上的优点
    • 多态性:则体现了同一方法对不同类对象有不同的效果

    牢牢记住这三个词:封装、继承、多态,这些是谭浩强C++教学丛书中描述的最基本的概念。


    知道了这些大的概念,知道了C++是面向对象的语言,下一步就可以开始研究我们的对象了,怎么去实现面向对象呢?比如我们要设计一个管理系统,需要先研究这个系统里有哪些类,这些类相应具有什么方法,然后逐步通过代码一步一步讲类和方法码出来。

    这里说一个题外话,为什么很多程序员喜欢戏称自己的工作为“搬砖”,因为在大公司里,很多程序员很少参与到新的模块、代码的设计,所做的工作就是将前人的代码从这个程序搬到另一个程序中,所做的工作就像搬砖,枯燥乏味。

    上面说到设计一个系统要考虑到为了这个系统,需要设计哪些类。而队列,可以考虑为一种类,也可以作为组成某个类的一种数据结构。


    在了解队列之前,需要知道几个最基本的概念:指针、FIFO(先进先出)
    这里就不详细讲解指针的概念,只需要知道指针的值指向电脑寄存器上另外一个地方的值,可以理解它记录的是另外一个变量的位置或者说地址。
    FIFO,First Input First Output的缩写,先进先出队列,这是一种传统的按序执行方法,先进入的指令先完成并引退,跟着才执行第二条指令。生活中时常出现的排队就是一种先进先出的行为——在超市购物之后会提着我们满满的购物车来到收银台排在结账队伍的最后,眼睁睁地看着前面的客户一个个离开。这就是一种先进先出机制,先排队的客户先行结账离开。


    千呼万唤始出来,终于可以开始了解队列了。
    ①队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
    ②队列中没有元素时,称为空队列。
    ③建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear,它指向下一个入队元素的存储位置。
    ④队列采用的FIFO(first in first out),新元素(等待进入队列的元素)总是被插入到链表的尾部,而读取的时候总是从链表的头部开始读取。每次读取一个元素,释放一个元素。所谓的动态创建,动态释放。因而也不存在溢出等问题。由于链表由结构体间接而成,遍历也方便。(先进先出)
    这里写图片描述


    实际上,上面所说的概念是顺序队列的概念,你有没有看出顺序队列的弊端?
    对!实际上当A、B、C依次加入队列,然后又按照A、B、C的顺序依次读取释放之后,front和rear指针从队列的0号位置,指向了最末的3号位置,假如这个队列只静态申请了0到3这4个单元位置,到此这个队列就没法再添加进新的元素了,因为假如添加D之后,rear再往后移将没有空间给它指向了!(这也被称为假上溢现象),这就是顺序队列的弊端。

    知道了顺序队列的弊端如何去改进呢,我们就引申出循环队列的概念。
    好,我们一起把顺序队列、循环队列再过一遍。

    顺序队列

    建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear,它指向下一个入队元素的存储位置,如图所示

    每次在队尾插入一个元素是,rear增1;每次在队头删除一个元素时,front增1。随着插入和删除操作的进行,队列元素的个数不断变化,队列所占的存储空间也在为队列结构所分配的连续空间中移动。当front=rear时,队列中没有任何元素,称为空队列。当rear增加到指向分配的连续空间之外时,队列无法再插入新元素,但这时往往还有大量可用空间未被占用,这些空间是已经出队的队列元素曾经占用过得存储单元。
    顺序队列中的溢出现象:
    (1) “下溢”现象:当队列为空时,做出队运算产生的溢出现象。“下溢”是正常现象,常用作程序控制转移的条件。
    (2)”真上溢”现象:当队列满时,做进栈运算产生空间溢出的现象。“真上溢”是一种出错状态,应设法避免。
    (3)”假上溢”现象:由于入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于向量空间的规模时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为”假上溢”现象。

    总结一下:
    1、队列时先进先出的一种数据结构(类比排队有助理解);
    2、顺序队列有两个指针,队列非空时,front指向下一个要删除的元素的位置,rear指向下一个要插入的元素的位置;
    3、顺序队列当rear指向申请的存储单元最末时,无法再进行添加操作(上溢);
    4、front=rear , 代表队列为空。

    循环队列

    在实际使用队列时,为了使队列空间能重复使用,往往对队列的使用方法稍加改进:无论插入或删除,一旦rear指针增1或front指针增1 时超出了所分配的队列空间,就让它指向这片连续空间的起始位置。自己真从MaxSize-1增1变到0,可用取余运算rear%MaxSize和front%MaxSize来实现。这实际上是把队列空间想象成一个环形空间,环形空间中的存储单元循环使用,用这种方法管理的队列也就称为循环队列。除了一些简单应用之外,真正实用的队列是循环队列。
    在循环队列中,当队列为空时,有front=rear,而当所有队列空间全占满时,也有front=rear。为了区别这两种情况,规定循环队列最多只能有MaxSize-1个队列元素,当循环队列中只剩下一个空存储单元时,队列就已经满了。因此,队列判空的条件是front=rear,而队列判满的条件是front=(rear+1)%MaxSize。

    判空的条件很好理解,判满怎么理解呢?
    一个循环队列,假如有六个存储单位,0-5,往里面依次加入A、B、C、D、E这5个元素,则依次占满了0-4这个五个存储位置,因为只有插入操作,所以front的值不变,仍然为0,rear的值则变为5,此时已经满足了队列满的条件(只剩下5这一个存储单位了),我们代入公式看一下:
    front=0
    (rear+1)%6=(5+1)%6=0
    满足判满条件,可以判断队列是满的。

    如果继续删除一个元素然后添加一个元素呢。
    此时front=1,rear=0
    (rear+1)%6=(0+1)%6=1
    仍然满足条件。

    总结一下:
    1、判空:front=rear 判满:front=(rear+1)%MaxSize;
    2、取余运算使得队列可以进行循环使用;
    3、和顺序队列的区别是存储空间可以循环使用;
    4、需要预留一个存储空间大小,即还剩一个存储空间时,队列已经满了。

    对队列概念的讲解就到这里,下一篇内容我们就要着手开始用C++语言来实现C++循环队列。


    了解了队列,之后也一定会遇到“堆”,”栈”,”堆栈”的概念,这些数据结构和队列有一定相似之处,这些到底是什么意思?最关键的是即使你去面试,这些都还会问到,所以如果你不懂对你是损失很大的。


    [1] https://jingyan.baidu.com/article/6c67b1d6a09f9a2786bb1e4a.html
    [2] https://www.cnblogs.com/liumce/p/7760670.html
    [3] https://blog.csdn.net/xiaolei09bupt/article/details/44565255

    展开全文
  • C++队列

    2017-11-20 19:21:31
    C++队列是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。 1.back() 返回一个引用,指向最后一个元素 2.empty() 如果队列空则返回真 3.front() 返回第一个元素 4.pop() 删除第一个元素 5.push() ...
    

    C++队列是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。
    1.back() 返回一个引用,指向最后一个元素
    2.empty() 如果队列空则返回真
    3.front() 返回第一个元素
    4.pop() 删除第一个元素
    5.push() 在末尾加入一个元素
    6.size() 返回队列中元素的个数

    队列可以用线性表(list)或双向队列(deque)来实现(注意vector container 不能用来实现queue,因为vector 没有成员函数pop_front!):
    queue<list<int>> q1;
    queue<deque<int>> q2;
    其成员函数有“判空(empty)” 、“尺寸(Size)” 、“首元(front)” 、“尾元(backt)” 、“加入队列(push)” 、“弹出队列(pop)”等操作。

    例:
    展开全文
  • C++ 队列queue的用法

    万次阅读 多人点赞 2016-07-15 16:52:06
     C++队列queue模板类的定义在&lt;queue&gt;头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。  C++队列Queue是一种容器...

    

    转自:http://www.169it.com/article/2718050585107790752.html

     C++队列queue模板类的定义在<queue>头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。

        C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。

     

    C++队列Queue类成员函数如下:

    back()返回最后一个元素

    empty()如果队列空则返回真

    front()返回第一个元素

    pop()删除第一个元素

    push()在末尾加入一个元素

    size()返回队列中元素的个数

     

    queue 的基本操作举例如下:

     

     

    queue入队,如例:q.push(x); 将x 接到队列的末端。

    queue出队,如例:q.pop(); 弹出队列的第一个元素,注意,并不会返回被弹出元素的值。

    访问queue队首元素,如例:q.front(),即最早被压入队列的元素。

    访问queue队尾元素,如例:q.back(),即最后被压入队列的元素。

    判断queue队列空,如例:q.empty(),当队列空时,返回true。

    访问队列中的元素个数,如例:q.size()

     

    C++ stl队列queue示例代码1:

     

    <strong>
    #include 
    
    #include 
    
    #include 
    
    using namespace std;
    
    int main()
    
    {
    
        int e,n,m;
    
        queue q1;
    
        for(int i=0;i<10;i++)
    
           q1.push(i);
    
        if(!q1.empty())
    
        cout<<"dui lie  bu kong\n";
    
        n=q1.size();
    
        cout<</strong>

     

    C++ stl队列queue示例代码2:

     

    
    #include 
    
    #include 
    
    #include 
    
    /*
    
    调用的时候要有头文件: #include 或 #include +
    
    #include       #include
    
    详细用法:
    
    定义一个queue的变量     queue M
    
    查看是否为空范例        M.empty()    是的话返回1,不是返回0;
    
    从已有元素后面增加元素   M.push()
    
    输出现有元素的个数      M.size()
    
    显示第一个元素          M.front()
    
    显示最后一个元素        M.back()
    
    清除第一个元素          M.pop()
    
    */
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    
    {
    
    queue  myQ;
    
    cout<< "现在 queue 是否 empty? "<< myQ.empty() << endl; 
    
    for(int i =0; i<10 ; i++)
    
    {
    
    myQ.push(i);
    
    }
    
    for(int i=0; i
    
    #include 
    
    #include 
    
    /*
    
    调用的时候要有头文件: #include 或 #include +
    
    #include       #include
    
    详细用法:
    
    定义一个queue的变量     queue M
    
    查看是否为空范例        M.empty()    是的话返回1,不是返回0;
    
    从已有元素后面增加元素   M.push()
    
    输出现有元素的个数      M.size()
    
    显示第一个元素          M.front()
    
    显示最后一个元素        M.back()
    
    清除第一个元素          M.pop()
    
    */
    
    using namespace std;
    
    int _tmain(int argc, _TCHAR* argv[])
    
    {
    
    queue  myQ;
    
    cout<< "现在 queue 是否 empty? "<< myQ.empty() << endl; 
    
    for(int i =0; i<10 ; i++)
    
    {
    
    myQ.push(i);
    
    }
    
    for(int i=0; i

     

     

     

    展开全文
  • C++队列queue用法详解

    千次阅读 多人点赞 2020-11-17 16:13:42
    C++队列queue用法详解一、定义一、queue初始化初始化示例注意:不能用vector容器初始化queue二、queue常用函数1.常用函数2.函数运用示例 一、定义 queue是一种容器转换器模板,调用#include< queue>即可使用...

    一、定义

    queue是一种容器转换器模板,调用#include< queue>即可使用队列类。

    一、queue初始化

    queue<Type, Container> (<数据类型,容器类型>)
    初始化时必须要有数据类型,容器可省略,省略时则默认为deque 类型

    初始化示例

    1:

    queue<int>q1;
    queue<double>q2;  
    queue<char>q3;
    //默认为用deque容器实现的queue;
    

    2:

    queue<char, list<char>>q1;
    //用list容器实现的queue 
    
    queue<int, deque<int>>q2;
     //用deque容器实现的queue 
    

    注意:不能用vector容器初始化queue

    因为queue转换器要求容器支持front()、back()、push_back()及 pop_front(),说明queue的数据从容器后端入栈而从前端出栈。所以可以使用deque和list对queue初始化,而vector因其缺少pop_front(),不能用于queue。

    二、queue常用函数

    1.常用函数

    1. push() 在队尾插入一个元素
    2. pop() 删除队列第一个元素
    3. size() 返回队列中元素个数
    4. empty() 如果队列空则返回true
    5. front() 返回队列中的第一个元素
    6. back() 返回队列中最后一个元素

    2.函数运用示例

    1:push()在队尾插入一个元素

     queue <string> q;
        q.push("first");
        q.push("second");
        cout<<q.front()<<endl;
    

    输出 first

    2:pop() 将队列中最靠前位置的元素删除,没有返回值

    queue <string> q;
    	q.push("first");
    	q.push("second");
    	q.pop();
    	cout<<q.front()<<endl;
    

    输出 second 因为 first 已经被pop()函数删掉了

    3:size() 返回队列中元素个数

      queue <string> q;
    	   q.push("first");
    	   q.push("second");
    	   cout<<q.size()<<endl;
    

    输出2,因为队列中有两个元素

    4:empty() 如果队列空则返回true

    queue <string> q;
        cout<<q.empty()<<endl;
        q.push("first");
        q.push("second");
        cout<<q.empty()<<endl;
    

    分别输出1和0
    最开始队列为空,返回值为1(ture);
    插入两个元素后,队列不为空,返回值为0(false);

    5:front() 返回队列中的第一个元素

    queue <string> q;
        q.push("first");
        q.push("second");
        cout<<q.front()<<endl;
        q.pop();
        cout<<q.front()<<endl;
    

    第一行输出first;
    第二行输出second,因为pop()已经将first删除了

    6:back() 返回队列中最后一个元素

    queue <string> q;
    q.push("first");
    q.push("second");
    cout<<q.back()<<endl;
    

    输出最后一个元素second

    展开全文
  • C++队列实现

    千次阅读 2019-04-28 10:51:30
    一、相关定义 原理:queue队列也是一个线性存储表,元素数据的插入在...C++队列是一种容器适配器,默认使用双端队列deque来实现,将deque容器转换为queue容器。当然,也可以利用其他合适的序列容器作为底层实现que...
  • C++队列是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。 1.back() 返回一个引用,指向最后一个元素 2.empty() 如果队列空则返回真 3.front() 返回第一个元素 4.pop() 删除第一个元素 5.push() 在末尾...
  • C++队列queue的用法

    千次阅读 2019-09-12 10:19:29
    C++队列queue模板类的定义在头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容 器类型是可选的,默认为deque 类型。 C++队列Queue是一种容器适配器,它给予程序员一种...
  • C++队列queue基本操作

    万次阅读 多人点赞 2018-03-15 13:00:19
    http://blog.csdn.net/cindywry/article/details/51919282C++队列queue模板类的定义在&lt;queue&gt;头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,...C++队列...
  • c++ 队列queue 基本操作

    2019-10-31 19:20:32
    C++队列queue模板类的定义在<queue>头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。 C++队列Queue是一种容器适配器,它给予...
  • C++队列的用法及队列的实现

    千次阅读 2017-04-13 15:51:53
    继c++栈之后的队列使用首先看一下原c++队列的方法的基本用法: back()返回最后一个元素 empty()如果队列空则返回真 front()返回第一个元素 pop()删除第一个元素 push()在末尾加入一个元素 size()返回队列中元素的...
  • c++队列存放的是元素的拷贝而不是元素本身,所以存在一个问题:当我们需要使用队列进行搜索,搜索的过程中又需要更改元素本身(如修改结构体内部某个指针等)应该怎么操作? 尝试使用指针队列:发现对于基本类型int...
  • C++队列缓存的实现

    千次阅读 2017-12-05 13:53:56
    C++队列缓存的实现
  • C++ 队列(queue)简介

    千次阅读 2018-12-18 21:58:25
    C++队列queue模板类的定义在&lt;queue&gt;头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的。C++队列queue是一种容器适配器,它给予程序员一种...
  • C++ 队列函数queue用法

    千次阅读 2019-05-26 12:00:18
    C++ queue(队列)提供了队列的全部功能,换句话说就是这里面已经实现了一个先进先出的数据结构。不需要我们再去重新定义各种函数,简化开发过程。 c++ 队列queue的头文件书写格式为: #include <queue> 实例...
  • C++队列queue模板类的定义在头文件中,queue 模板类需要两个模板参数,一个是元素类型,一个容器类型,元素类型是必要的,容器类型是可选的,默认为deque 类型。C++队列Queue是一种容器适配器,它给予程序员一种先进...
  • C++队列Queue基本操作

    2017-11-07 20:55:18
    C++队列Queue是一种容器适配器,它给予程序员一种先进先出(FIFO)的数据结构。 queue 的基本操作举例如下: queue入队,如例:q.push(x); 将x 接到队列的末端。 queue出队,如例:q.pop(); 弹出队列的第一个元素,...
  • None~C++ 队列之循环队列

    千次阅读 2013-05-19 17:11:52
    C++ 队列之循环队列 循环队列  为充分利用向量空间,克服"假上溢"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。 ...
  • C++队列queue的front()方法

    千次阅读 2020-11-27 16:18:26
    C++队列queue的front()方法 代码 #include<queue> #include<iostream> #include<vector> #define N 100 using namespace std; struct Node{ int lv;//记录当前层数 int wei;//当前重量 int ...
  • 【C/C++开发】C++队列缓存的实现

    千次阅读 2017-01-23 20:15:41
    C++队列缓存的实现 为什么使用队列缓存 c++的队列缓存主要用于解决大数据量并发时的数据存储问题,可以将并发时的数据缓存到队列中,当数据量变小时再匀速写入硬盘中。 引用queue队列 在头文件中引用...
  • C++队列模板queue

    2017-03-20 14:33:27
    C++STL模板之队列的基本操作 需包含头文件:#include; 队列的声明:queue<type> q; 基本操作:q.back();//返回队尾元素 q.empty();//判断队列是否为空 q.front();//返回队首元素 q.pop();//弹出队首元素 q.push(n...
  • c++ 队列queue的几个基本用法

    千次阅读 多人点赞 2017-03-26 22:03:09
    c++ 队列queue的几个基本用法基本性质 queue模板类的定义在头文件中。 队列符合“先进先出”原则的“公平队列”,与栈的“先进后出”原则刚好相反。可以用queue<int>que方式定义。基本操作 que.front()// 取队首...
  • Android 万能音频播放器 二 C++队列存放AvPacket 前言 本文为Android万能因音音频播放器的第二篇,是上一篇文章Android 万能音频播放器 一 C++多线程解码音频数据 的延续,本文的实现功能是蒋解码出的AvPacket放...
  • C++队列排序问题

    2020-12-19 23:40:09
    队列排序 问题描述: 本关要求编写函数rotateLeft,该函数实现对一个 n × n 方阵中的每个元素循环向左移 m 个位置( 0 < m < n ),即将第 0 、 1 、…、 n - 1 列变换为第 n - m 、 n - m + 1 、…、 n - 1 ...
  • 下面为C++队列的例题及讲解: 题目描述 经过补考,天天感到无聊,因为他现在并不需要复习数字电路课程。所以他决定去计算队列中成员的个数。多么无聊的少年啊!(我们的TA很有想象力) 这里会有三种队列的操作: ...
  • c++ 队列编程

    2017-08-05 22:47:25
    队列编程练习  1. 简单队列编程练习 // queue_test.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include using namespace std; int main(int argc,
  • C++队列操作入队出队

    2014-10-22 20:12:32
    简单队列操作,vc++实现。队列类实现,小弟新手,大神莫黑
  • 参考:数据结构图文解析之:队列详解与C++模板实现 队列简介 队列(Queue)特点: 1、队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构。 2、在队尾添加元素,在队头添加元素。 队列的...
  • C++ 队列的实现

    2020-07-24 22:19:01
    点击此处浏览C++官方的queue详细内容 主要功能有以下几个 函数 功能 back 返回对在 queue 后部最近添加的最后一个元素的引用 empty 测试 queue 是否为空 front 返回对 queue 前部的第一个元素的引用 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,082
精华内容 68,032
关键字:

c++队列

c++ 订阅