始终记住栈的特点:后进先出
队列:先进先出
写一个栈的例子
1 //8进制转换 2 #include<iostream> 3 #include<stack> 4 using namespace std; 5 void conversion(int n) 6 { 7 stack<int> result; 8 while(n) 9 { 10 result.push(n%8);//入栈 11 n=n/8; 12 } 13 while(!result.empty()) 14 { 15 cout<<result.top(); 16 result.pop();//出栈 17 } 18 } 19 int main() 20 { 21 conversion(1348); 22 return 0; 23 }
写了一个括号匹配
1 //括号匹配 2 #include<iostream> 3 #include<stack> 4 using namespace std; 5 bool side(char ch)//判断是左括号还是右括号,true就是左括号,false是右括号 6 { 7 if(ch=='('||ch=='[') 8 return true; 9 else 10 { 11 return false; 12 } 13 14 } 15 bool mat(char right,char left)//判断两个字符是否为同一类型的左右括号 16 { 17 if(right=='('&&left==')') 18 return true; 19 if(right=='['&&left==']') 20 return true; 21 return false; 22 } 23 bool match(string str) 24 { 25 stack<char> re; 26 auto w=str.begin(); 27 for(;w!=str.end();w++) 28 { 29 if(side(*w))//是左括号 30 re.push(*w); 31 else 32 { 33 if(mat(re.top(),*w))//右括号且与栈顶的左括号可以匹配 34 { 35 re.pop(); 36 37 } 38 } 39 40 } 41 if(re.empty()) 42 return true; 43 else 44 { 45 return false; 46 } 47 48 } 49 50 int main() 51 { 52 // cout<<match("[([][])]"); 53 cout<<match("[(])"); 54 return 0; 55 }