C++数据结构之队列

队列(Queue)与栈一样,是一种线性存储结构。下面会介绍队列。


目录

1.队列的基本知识

1.1 特点

1.2.相关术语

1.3 操作

1.4 分类

2.队列的实现

3.例题


1.队列的基本知识

1.1 特点

(1)队列中的数据元素遵循“先进先出”(First In First Out)的原则,简称FIFO结构。

(2)在队尾添加元素,在队头删除元素。

        

1.2.相关术语

(1)入队:队列的插入操作。

(2)出队:队列的删除操作。

1.3 操作

(1)入队: 通常命名为push()

(2)出队: 通常命名为pop()

(3)求队列中元素个数

(4)判断队列是否为空

(5)获取队首元素

1.4 分类

(1)基于数组的循环队列(循环队列)

(2)基于链表的队列(链队列)

2.队列的实现

队列通常使用标准库中的queue模板类来实现,需要包含<queue>头文件来使用它。下面用一个例子来说明如何使用队列:

#include <iostream>
#include <queue>

int main() {
    std::queue<int> myQueue;

    // 在队尾插入元素
    myQueue.push(10);
    myQueue.push(20);
    myQueue.push(30);

    // 访问队首元素
    std::cout << "Front element: " << myQueue.front() << std::endl;

    // 访问队尾元素
    std::cout << "Back element: " << myQueue.back() << std::endl;

    // 遍历并输出队列中的元素
    while (!myQueue.empty()) {
        std::cout << myQueue.front() << " ";
        myQueue.pop();
    }

    return 0;
}

上述代码创建了一个整数类型的队列,并在队尾依次插入了三个元素:10、20和30。然后,我们通过front()函数访问队首元素(即10),通过back()函数访问队尾元素(即30)。接下来,使用empty()函数检查队列是否为空,并通过pop()函数不断将队首元素弹出并输出,直到队列为空。

3.例题

周末舞会

【题目描述】

假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。

【输入】

第一行两队的人数;

第二行舞曲的数目。

【输出】

配对情况。

【输入样例】

4 6
7

【输出样例】

1 1
2 2
3 3
4 4
1 5
2 6
3 1

【题目来源】

信息学奥赛一本通(C++版)在线评测系统

用两个队列模拟男女两队人,先让两队的人入队。
舞曲数目为n。
每次循环让两队分别出队1人,这两人配对跳舞,输出这两个人的编号。
而后出队的这两个人分别入队到队尾,回到自己的队列中。
如此循环n次。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	queue<int> q1, q2;//q1:男士队列 q2:女士队列 
	int a, b, n;
	cin >> a >> b >> n;
	for(int i = 1; i <= a; ++i)
		q1.push(i);
	for(int i = 1; i <= b; ++i)
		q2.push(i);
	for(int i = 1; i <= n; ++i)
	{
		cout << q1.front() << ' ' << q2.front() << endl;//两队队头出来配对跳舞 
		q1.push(q1.front());//将队头的值入队到队尾 
		q1.pop();//队头出队 
		q2.push(q2.front());
		q2.pop();
	}
	return 0;
}

创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,如果喜欢我的文章,给个关注吧!

冰焰狼 | 文

如果本篇博客有任何错误,请批评指教,不胜感激 !

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值