复制代码

STL------stack, queue(预习和复习)

学了STL,在此处做一些总结。
常用的STL有如下几个:

  • stack
  • queue
  • priority_queue
  • pair
  • set
  • map
  • vector
    下面让我们来分别了解一下前两个吧

stack

stack,翻译为

stack <int> s;//定义一个为 int,栈名为 s 的栈

栈是一个先进后出的数组,它支持以下几种操作:

  • pop(),用于弹出栈顶。
  • top(),同于查询栈顶
  • empty(),用于查询栈是否为空,是则返回1
  • push(x),用于把 x 存入栈中

例题讲解
题目描述

假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成, 以“@”作为表达式的结束符。
请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。

输入格式:

输入包括一行数据,即表达式

输出格式:

输出文件包括一行,即“YES” 或“NO”。

样例输入:

2*(x+y)/(1-x)@

样例输出

YES

这道题很简单,我们只需要在输入一个字符的时候就判断,如果为左括号就把他入栈,如果是右括号的话就进行压栈(就是弹出一个值),同时判断栈是否为空,具体实现如下:

#include <cstdio>
#include <stack>
using namespace std;
stack <int> s;
int main() {
	char x;
	while ((x = getchar()) != '@') {
		if (x == '(') s.push(x);
		else if (x == ')') {
			if (s.empty()) {
				printf("NO");
				return 0;
			}
			else {
				s.pop();
			}
		}
	}
	if (s.empty()) {
		printf("YES");
	}
	else printf("NO");
	return 0;
} 

queue

queue,翻译为队列

queue <int> q;//定义一个 int 的队列,队列名为 q

队列支持以下几种操作:

  • q.front() 用于查询队列头的元素,与栈大同小异
  • q.pop() 用于弹出队列尾部的元素
  • q.push(x) 与栈一样,同于在栈中插入一个新的元素
  • q.empty() 与栈一样

例题讲解

题目描述

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

输入格式:

第 1 行两个正整数,表示男士人数 m 和女士人数 n,1≤m,n≤1000; 第 2 行一个正整数,表示舞曲的数目 k,k≤1000。

输出格式:

共 k 行,每行两个数,之间用一个空格隔开,表示配对舞伴的序号,男士在前,女士在后。

样例输入:

2 4
6

样例输出

1 1
2 2
1 3
2 4
1 1
2 2

这道题我就直接给代码了,注释打在代码上:

#include <cstdio>
#include <queue>//头文件
using namespace std;
queue <int> men, women;//男士,女士
int main() {
	int n, m, k;
	scanf("%d %d %d", &n, &m, &k);
	for (int i = 1; i <= n; i++) {
		men.push(i); //先把男士的编号输进去,以便后续操作
	}
	for (int i = 1; i <= m; i++) {
		women.push(i); //同上
	}
	for (int i = 1; i <= k; i++) {
		printf("%d %d\n", men.front(), women.front());//依次取出队列的顶端,即匹配男士和女士
		int x = men.front(), y = women.front();//把两个队列的队尾保存
		men.pop(); 
		women.pop(); //弹出
		men.push(x); 
		women.push(y); //把他们插入队尾,不懂得可以自行在草稿本上演算
	}
	return 0;
}
```配对舞伴的序号,男士在前,女士在后。

样例输入:

2 4
6

样例输出

1 1
2 2
1 3
2 4
1 1
2 2

就到这里了,其他STL在其他博客里面有详细的解释哦~;
(因为 stack 与 queue 很简单,所以就在这篇博客里面简述,其他几个STL我会非常详细解释的!)
welcome to see you next time!

posted @ 2020-07-25 20:33  cqbz_yanglin  阅读(101)  评论(0编辑  收藏  举报