zoukankan      html  css  js  c++  java
  • 算法笔记--数据结构--队列

    队列的应用

    队列queue是一种先进先出的数据结构

    Snipaste_2020-04-02_10-36-48

    ​ 应当注意到,队列总是从队尾加入元素,而从队首移除元素,并且满足先进先出的规则。一般来说,需要一个队首指针front来指向队首元素的前一个位置,而使用一个队尾指针rear来指向队尾元素。和栈类似,当使用数组来实现队列时,队首指针front和队尾指针rear为int型变量(数组下标从0开始);而当使用链表来实现队列时,则为int*型变量的指针。这样当使用数组来实现上面的例子时,队首指针front和队尾指针rear的指向情况如图7-3所示。

    Snipaste_2020-04-02_10-42-50

    常见操作

    1. 获取队列内元素的个数size()
    2. 判空empty()
    3. 入队push()
    4. 出队pop()
    5. 取队首元素front()
    6. 取队尾元素back()

    上面的操作在C++ STL中的queue容器中可以方便的直接调用

    注意:在使用pop()front()back()函数之前必须先使用empty()进行判空

    STL中没有实现队列的清空,如果需要清空clear,可以使用while循环反复pop()出元素直到队列为空

    while(!q.empty()){
        q.pop();
    }
    

    实例

    问题 A: C语言-数字交换

    输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:1️⃣输入10个数;2️⃣进行处理;3️⃣输出10个数。
    

    输入

    10个整数
    

    输出

    整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)
    

    输入样例

    2 1 3 4 5 6 7 8 10 9
    

    输出样例

    1 2 3 4 5 6 7 8 9 10
    

    解题

    #include <cstdio>
    #include <queue>
    #include <iostream>
    #include <limits.h>
    
    using std::queue;
    using std::cin; using std::istream;
    
    
    int MAX = INT_MIN;
    int MIN = INT_MAX;
    int MaxTemp, MinTemp;
    
    void read(istream& in, queue<int>& q){
        while(!q.empty()){
          q.pop();
        }
    
        int x;
        for (int i = 0; i != 10; ++i)
        {
          in >> x;
          q.push(x);
          if(x > MAX){
            MAX = x;
          }
          if(x < MIN){
            MIN = x;
          }
        }
      MinTemp = q.front();
      MaxTemp = q.back();
    }
    
    void deal(queue<int>& q, queue<int>& temp){
      while(!temp.empty()){
          temp.pop();
        }
    
          temp.push(MIN);
          q.pop();
          for (int i = 0; i != 8; ++i)
           {
             if(q.front() == MIN){
              q.front() = MinTemp;
            }
            temp.push(q.front());
            q.pop();
           }
           temp.push(MAX);
    
    
        while(!q.empty()){
          q.pop();
        }
    
        int flag = true;
        while(!temp.empty()){
    
            if(temp.front() == MAX){
              if(flag == true){
                temp.front() = MaxTemp;
              }
              flag = false;
            }
            q.push(temp.front());
            temp.pop();
      }
    }
    
    void print(queue<int>& result){
    
    
      while(!result.empty()){
        printf("%d ", result.front());
          result.pop();
      }
    
      printf("
    ");
    }
    
    int main(int argc, char const *argv[])
    {
      queue<int> q;
      queue<int> temp;
    
      read(cin,q);
      deal(q, temp);
      print(q);
    
      // printf("%d %d
    ", MAX, MIN);
    
      return 0;
    }
    

    Write by Gqq

  • 相关阅读:
    全排列问题(内测第0届第1题)
    提取字符串中的数字(C语言)
    尾递归=递归+迭代?
    Android各版本代号、版本号、API/NDK级别、发布时间及市场份额
    C语言中文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析
    sizeof既是关键字,又是运算符(操作符),但不是函数!
    探寻main函数的“标准”写法,以及获取main函数的参数、返回值
    Scala比较器:Ordered与Ordering
    【Python实战】Pandas:让你像写SQL一样做数据分析(一)
    【Python实战】Scrapy豌豆荚应用市场爬虫
  • 原文地址:https://www.cnblogs.com/zgqcn/p/12618705.html
Copyright © 2011-2022 走看看