EvanRoyal 2022-04-08 21:04 采纳率: 100%
浏览 78
已结题

/***链栈实现括号匹配***/

/链栈实现括号匹配/

#include
using namespace std;

#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char SElemType;
typedef int Status;
typedef struct SNode {
int data;
struct SNode *next;
} SNode, *LinkStack;

Status InitStack(LinkStack &S) {//初始化栈
S = NULL;
return OK;
}
bool StackEmpty(LinkStack S) {//判断栈是否为空
if (!S)
return true;
return false;
}
Status Push(LinkStack &S, SElemType e) {//入栈
SNode *p = new SNode;
if (!p) {
return OVERFLOW;
}
p->data = e;
p->next = S;
S = p;
return OK;
}
Status Pop(LinkStack &S, SElemType &e) {//出栈
SNode *p;
if (!S)
return ERROR;
e = S->data;
p = S;
S = S->next;
delete p;
return OK;
}
Status GetTop(LinkStack &S) {//取栈顶元素
if (!S)
return ERROR;
return S->data;
}

//算法3.21 括号的匹配
Status Matching() {//检验表达式中所含括号是否正确匹配,如果匹配,则返回true,否则返回false
//表达式以“#”结束

}
int main() {
LinkStack S;
cout << "请输入待匹配的表达式,以“#”结束:" << endl;
int flag = (int) Matching();
if (flag)
cout << "括号匹配成功!" << endl;
else
cout << "括号匹配失败!" << endl;
return 0;
}

这个怎么改啊,求解答

  • 写回答

3条回答 默认 最新

  • 关注

    你题目的解答代码如下:

    #include <iostream>
    using namespace std;
    
    #define OK 1
    #define ERROR 0
    #define OVERFLOW -2
    typedef char SElemType;
    typedef int Status;
    typedef struct SNode
    {
        int data;
        struct SNode *next;
    } SNode, *LinkStack;
    
    Status InitStack(LinkStack &S)
    { //初始化栈
        S = NULL;
        return OK;
    }
    bool StackEmpty(LinkStack S)
    { //判断栈是否为空
        if (!S)
            return true;
        return false;
    }
    Status Push(LinkStack &S, SElemType e)
    { //入栈
        SNode *p = new SNode;
        if (!p)
        {
            return OVERFLOW;
        }
        p->data = e;
        p->next = S;
        S = p;
        return OK;
    }
    Status Pop(LinkStack &S, SElemType &e)
    { //出栈
        SNode *p;
        if (!S)
            return ERROR;
        e = S->data;
        p = S;
        S = S->next;
        delete p;
        return OK;
    }
    Status GetTop(LinkStack &S)
    { //取栈顶元素
        if (!S)
            return ERROR;
        return S->data;
    }
    
    //算法3.21 括号的匹配
    Status Matching()
    { //检验表达式中所含括号是否正确匹配,如果匹配,则返回true,否则返回false
        //表达式以“#”结束
        LinkStack S;
        SElemType ch,ch2;
        InitStack(S);
        cin >> ch;
        while (ch!='#')
        {
            switch(ch){
                case '(':
                    Push(S, ')');
                    break;
                case '{':
                    Push(S, '}');
                    break;
                case '[':
                    Push(S, ']');
                    break;
                case '}':
                case ']':
                case ')':
                    if(StackEmpty(S))
                        return false;
                    else {
                        ch2 = GetTop(S);
                        if(ch==ch2){
                            Pop(S,ch2);
                        }
                        else
                             return false;
                    }
            }
            cin >> ch;
        }
        if(StackEmpty(S))
            return true;
        else
            return false;
    }
    int main()
    {
        LinkStack S;
        cout << "请输入待匹配的表达式,以“#”结束:" << endl;
        int flag = (int)Matching();
        if (flag)
            cout << "括号匹配成功!" << endl;
        else
            cout << "括号匹配失败!" << endl;
        return 0;
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月14日
  • 已采纳回答 6月6日
  • 创建了问题 4月8日

悬赏问题

  • ¥50 求解vmware的网络模式问题 别拿AI回答
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳
  • ¥15 springboot 3.0 实现Security 6.x版本集成
  • ¥15 PHP-8.1 镜像无法用dockerfile里的CMD命令启动 只能进入容器启动,如何解决?(操作系统-ubuntu)
  • ¥30 请帮我解决一下下面六个代码
  • ¥15 关于资源监视工具的e-care有知道的嘛
  • ¥35 MIMO天线稀疏阵列排布问题
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?