zoukankan      html  css  js  c++  java
  • 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
    ", 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!

  • 相关阅读:
    Django 同步数据库命令syncdb,makemigrations,migrate
    新mac上安装,查看,设置一些常用的软件
    脚本之文本练习
    hadoop工作流程
    find命令
    awk用法
    apache笔记
    iscsi原理
    nfs服务的配置
    django用户投票系统详解
  • 原文地址:https://www.cnblogs.com/cqbzyanglin/p/13509283.html
Copyright © 2011-2022 走看看