栈总结

作者: CristianoC | 来源:发表于2020-06-29 15:10 被阅读0次

栈是比较常见的数据结构,简单来说就是“先进后出”,常用的方法有push(),pop(),top(),定义的方式是stack<int> s。栈常见的题型有两种,一种是括号匹配,另一种则是表达式求解。

  1. 括号匹配:如果是左括号则进栈,如果是右括号则要先判断栈内有没有元素,再与栈顶元素做匹配。如果有要求括号优先级,则用一个map记录优先级,每次进栈先判断优先级比里面元素小才进栈。
#include <iostream>
#include <stack>
#include <map>
using namespace std;
int main(){
    stack<char> st;
    map<char,int> map1;
    map1['{'] = 4;
    map1['['] = 3;
    map1['('] = 2;
    map1['<'] = 1;
    int n;
    cin>>n;
    for(int i = 0;i < n;i++){
        int flag = 0;
        string buf;
        cin>>buf;
        int len = buf.length();
        for(int j = 0;j < len;j++){
            if(!st.empty()) {
                if (map1[st.top()] >= map1[buf[j]]) {
                    if ((buf[j] == ']' && st.top() == '[') || (buf[j] == '>' && st.top() == '<') ||
                        (buf[j] == ')' && st.top() == '(') || (buf[j] == '}' && st.top() == '{'))
                        st.pop();
                    else
                        st.push(buf[j]);
                }else{
                    cout<<"NO"<<endl;
                    flag = 1;
                    break;
                }
            }
            else
                st.push(buf[j]);
        }
        if(!flag){
            if(!st.empty())
                cout<<"NO"<<endl;
            else
                cout<<"YES"<<endl;
        }
        while (!st.empty())
            st.pop();
    }
}

2.表达式求解:初始化两个栈,一个是运算符栈一个是数字栈,定义好运算符的优先级(通过二维数组),如果是数字则入数字栈,如果是运算符则比较优先级,如果来的运算符优先级比栈顶运算符优先级更高则如栈,如果更低则从数字栈弹出两个数字进行相关运算。

相关文章

  • 前端技术栈

    前端技术栈 自己总结的前端技术栈:

  • Java后端技术栈

    Java后端技术栈 自己总结的Java后端技术栈:

  • 算法-栈和队列算法总结

    栈和队列算法总结 1 模拟 1.1 使用栈实现队列 1.2 使用队列实现栈 2 栈的应用 2.1 栈操作 2.2 ...

  • 栈总结

    栈是比较常见的数据结构,简单来说就是“先进后出”,常用的方法有push(),pop(),top(),定义的方式是s...

  • 栈管理汇总

    栈管理总结1、基本的入/出栈 2、查找栈(查) 3、进入/返回到指定栈 4、在指定位置插入指定栈(增) 5、删除指...

  • Android 技术栈总结

    Android 技术栈总结 开发工具 IDE AndroidStudio Android Studio使用总结 神...

  • 学习总结第二十篇 5.28

    内容总结: 1、栈 特点:后进先出(LIFO),栈底不动,栈顶(top)不断移动 2、队列 特点:先进先出(FIF...

  • 栈&队列

    一、栈&队列总结 栈/队列的应用接雨水验证栈序列滑动窗口的最大值 栈/队列的特殊实现用两个栈实现队列用两个队列实现...

  • 压栈、出栈总结

    一 关于堆栈的理解 二 OpenGL压栈、出栈 https://www.jianshu.com/p/ce3b51b...

  • 2018-04-11

    Android之Activity系列总结(二)--任务和返回栈 任务和返回栈 应用通常包含多个Activity。每...

网友评论

      本文标题:栈总结

      本文链接:https://www.haomeiwen.com/subject/gngwfktx.html