算法笔记--数据结构--队列

队列的应用

队列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("\n");
}

int main(int argc, char const *argv[])
{
  queue<int> q;
  queue<int> temp;

  read(cin,q);
  deal(q, temp);
  print(q);

  // printf("%d %d\n", MAX, MIN);

  return 0;
}

Write by Gqq

猜你喜欢

转载自www.cnblogs.com/zgqcn/p/12618705.html