【前言】
C++的栈(Stack)是一种用于存储和访问数据的数据结构。它是一种先进后出(Last In First Out,LIFO)的数据结构。
【引入】
题目:有效的括号
给定一个只包含字符'(',')','{','}','['和']'的字符串,判断字符串中的括号是否有效。例如,"()","()[]"是有效的括号,而"([)]"是无效的括号。
如何判断是不是有效括号呢?我们可以想象有一个桶(只能从桶顶部拿或取出东西),遇到左括号放进去,遇到右括号是检查一下桶最上面的左括号是否与右括号匹配,如果匹配就把左括号拿出去(不匹配的话就是无效的,下面也不用操作了),如果最后桶是空的,就说名整个字符串都是匹配的(不信自己模拟一下)。在编程中类似这个桶的结构叫做栈。
【初始化】
我们需要一个一维数组来模拟栈,然后还要一个指针。指针的作用是①来表示栈内有几个数(或括号)②来表示那里里是栈的顶部。初始是栈内是没有东西的,所以指针归零。
char Stack[1000000];//模拟栈的数组(本题判断括号匹配所以是char类型)
int top=0;//栈的指针,初始时指向零
【进栈(push)】
把东西加入栈叫进栈,具体分为两步:①指针加1,②加入数组。
void push(char a)
{
Stack[++top]=a;
}
【出栈(pop)】
把东西拿出栈叫出栈,只有一步:指针减1。
void pop()
{
top--;
}
【总结】
是不是非常简单,总之栈就是一个只能同一边进同一边出的线性结构。
最后附上
目录【引入】部分题目的代码。
#include<bits/stdc++.h>
using namespace std;
string s;
char Stack[10000];
int top=0;
int main()
{
cin>>s;
for(int i=0;i<=s.size()-1;i++){
if(s[i]=='('||s[i]=='['||s[i]=='{') Stack[++top]=s[i];
if(s[i]==')'){
if(Stack[top]=='(') top--;
else{
cout<<"no";
return 0;
}
}
if(s[i]==']'){
if(Stack[top]=='[') top--;
else{
cout<<"no";
return 0;
}
}
if(s[i]=='}'){
if(Stack[top]=='{') top--;
else{
cout<<"no";
return 0;
}
}
}
if(top!=0){
cout<<"no";
return 0;
}
cout<<"yes";
return 0;
}