栈-简介:
栈类型是一种储存值的通用工具,与数组极其相似,唯一不同的就是:栈是单向的,也就是说,栈只对一个方向开放。而且,栈每次只能取出最上面的值,就像一个弹匣,一次出入一个值,接下来我会介绍栈的定义方法以及必须掌握的【1】成员函数。
——————————————————————————————————————————————————
【1】成员函数:被定义在数据类型中,用于操作数据类型的函数
栈-声明:
栈的声明很简单,只需要按照下面的格式就行了:
stack</*数据结构*/>/*栈名*/;
可见栈的关键词(也不是关键词)就是‘stack’不过,在声明栈类之前,必须包含头文件:#include<stack>才能保证不出错。
栈-使用:
栈都定义出来了,可是。。。怎么用呢?只要掌握以下几个成员函数就能明白了:
1.push()/*压入值*/
格式:/*栈名*/.push(/*要压入的元素*/);
例:a.push(6);
2.pop()/*弹出值,记住,一弹就回不来了!*/
格式:/*栈名*/.pop();
例:a.pop();
3.top()/*获取栈顶的值*/
格式:/*栈名*/.top();
例:int x=a.top();
4.size()/*测量栈的长度*/
格式:/*栈名*/.size();
例:int lent=a.size();
5.empty()/*判定栈是否空,若为空,返回true,若为非空,返回false*/
格式:/*栈名*/.empty();
例:bool flag=a.empty();
栈-实战
https://noi.top/questions/1679:括号匹配
————————————————————————————————————
题目描述
假设一个表达式@
作为表达式的结束符,请编写一个程序检查表达式中的左右圆括号是否匹配。
- 若匹配,则返回
- 否则返回 。
实战样例
sample input:
2*(x+y)/(1-x)@
sample output:
YES
实战题解:
#include<bits/stdc++.h>
using namespace std;
stack <char> s;
int main(){
char c;
while(cin>>c){
if(c=='@')break;
if(c=='(')s.push(c);
if(c==')'){
if(s.empty()){cout<<"NO";return 0;}
s.pop();
}
}
if(s.empty())cout<<"YES";
else{
cout<<"NO";
}
return 0;
}