zoukankan      html  css  js  c++  java
  • 栈的三个简单应用

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

    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; 
    }
    
  • 相关阅读:
    开源项目
    引入CSS的三种方式
    Android打开数据库读取数据
    每日日报2020.10.16 1905
    课程2 1905
    每日日报2020.10.13 1905
    每日日报2020.10.15 1905
    每日日报2020.10.8 1905
    每日日报2020.10.9 1905
    每日日报2020.10.12 1905
  • 原文地址:https://www.cnblogs.com/wangzheming35/p/13707092.html
Copyright © 2011-2022 走看看