• 栈的三个简单应用


    根据真题需求,主要再回顾一下栈在括号匹配表达式求值共享栈的运用。

    1、括号匹配

    问题描述:

    算法思想:①若是左括号,入栈;②若是右括号,出栈一个左括号判 断是否与之匹配;③检验到字符串尾时,还要检查栈是否为空,只有栈空,整个字符串才是括号匹配的。

    算法实现:

    bool check(char str)
    {
        stack s;
        InitStack(s);
        int len = strlen; //字符串长度
        for(int i=0;i<len;i++)
        {
            char a = str[i];
            switch(a)
            {
                    case'(':
                    case'[':
                    	Push(s,a);
                    	break;
                    case')':
                    	if(Pop(s)!='(')
                            return false;
                    	break;
                    case']':
                    	if(Pop(s)!='[')
                            return false;
                    	break;
            }
        }
        if(Empty(s))
            return true;
        else
            return false;
    }
    

    2、表达式求值

    问题描述:

    实现思想:

    从左到右扫描表达式的每个数字和符号,遇到数字进栈,遇到符号就将处于栈顶的两个数字出栈然后跟这个符号进行运算,最后将运算结果进栈,直到最终获得结果。

    实现案例:

    将中缀转换为后缀:

    ① 按运算符优先级对所有运算符和它的运算数加括号。(原本的括号不用加)

    ② 把运算符移到对应的括号

    ③ 去掉括号。

    3、共享栈

    问题描述:

    共享栈的结构:

    #define Max 100 //栈中元素最大个数
    typedef struct
    {
        Elemtype data[Max];
        int top1; //栈1栈顶元素
        int top2; //栈2栈顶元素
    }ShareStack;
    

    栈满/栈空条件:

    ShareStack S;
    S.top1+1==S.top2 //栈满
    S.top1=-1,S.top2=MAX; //栈空
    

    进栈操作:

    bool Push(ShareStack &S ,ElemType x,int stackNum)
    { 
        if(S.top1+1==S.top2) 
            return false; 
        if(stackNum==1) 
            S.data[++S.top1]=x; //栈1有元素进栈 
        else if(stackNum==2) 
            S.data[--S.top2]=x; //栈2有元素进栈 
        return true; 
    }
    
  • 相关阅读:
    EF 关系规则(一对一、一对多、多对多...)
    EF框架中加子类后出现列名 'Discriminator' 无效问题
    .net下Ueditor配置(主要讲解上传功能配置)
    同构数查找程序的优化过程 Anthony
    Effective STL 条款17 Anthony
    C 语言中的数组类型和数组指针类型. Anthony
    Effective STL 条款18 Anthony
    RDLC之自定義數據集二
    给Calendar添加标签
    Profile学习
  • 原文地址:https://www.cnblogs.com/wangzheming35/p/13707092.html
Copyright © 2020-2023  润新知