爱冒险的duola 2022-05-21 22:46 采纳率: 50%
浏览 54
已结题

数据结构-用栈来实现括号匹配

题目是要求以#结尾,可是我不知道是哪里出错了,可不可以帮指点指点?

问题相关代码,请勿粘贴截图

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define MAXSIZE 1024

//顺序栈的定义
typedef int elemtype;//elemtype可为任意类型
typedef struct SequenStack
{
elemtype data[MAXSIZE];
int top;
}SequenStack;

//顺序栈初始化
SequenStack *Init_SequenStack()
{
SequenStack *S;//定义顺序栈指针变量
S=(SequenStack *)malloc(sizeof(SequenStack));
if(S==NULL)
{
return S;
}
S->top=-1;
return S;
}

//判栈空
int Em_SequenStack(SequenStack *S)
{
if(S->top==-1)
{
return 1;
}
else
{
return 0;
}
}

//入栈
int Push_SequenStack(SequenStack *S,elemtype x)//插入新的元素作为新的栈顶
{
if(S->top>=MAXSIZE-1)
{
return 0;
}
S->top++;//栈顶指针+1
S->data[S->top]=x;
return 1;
}

//出栈
int Pop_SequenStack(SequenStack *S,elemtype *x)//*x为整型指针,删除S的栈顶元素,并通过x返回其值
{
if(S->top==-1)
{
return 0;
}
else
{
S->top--;
*x=S->data[S->top+1];
return 1;
}
}

//取栈顶数据元素
int Get_SequenStack(SequenStack *S,elemtype *x)
{
if(S->top==-1)
{
return 0;
}
else
{
*x=S->data[S->top];
return 1;
}
}

int match(SequenStack *S,char *str)
{
S=Init_SequenStack();
int i=0,e;//e用来接收栈顶
while(str[i]!='#')
{
if(str[i]=='(')
{
Push_SequenStack(S,str[i]);
}
else if(str[i]==')')
{
if(Em_SequenStack(S))
{
return 0;//不匹配
}
else
{
Pop_SequenStack(S,&e);
}

    }
    i++;
}
int h=Em_SequenStack(S);
if(h==1)
{
    return 0;
}
else
{
    return 1;
}

}

int main()
{
SequenStack S;
char str[MAXSIZE];
printf("请输入一串字符以#结尾:");
scanf("%s",str);
int h=match(&S,str);
if(h==0)
{
printf("不匹配!");
}
else
{
printf("匹配!");
}
return 0;

}

运行结果及报错内容

img

img

  • 写回答

2条回答 默认 最新

  • fuill 2022-05-22 02:53
    关注

    栈空才是匹配,修改如下

    
    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    #define MAXSIZE 1024
    
    //顺序栈的定义
    typedef int elemtype;//elemtype可为任意类型
    typedef struct SequenStack
    {
        elemtype data[MAXSIZE];
        int top;
    } SequenStack;
    
    //顺序栈初始化
    SequenStack *Init_SequenStack()
    {
        SequenStack *S;//定义顺序栈指针变量
        S=(SequenStack *)malloc(1000*sizeof(SequenStack));
        if(S==NULL)
        {
            return S;
        }
        S->top=-1;
        return S;
    }
    
    //判栈空
    int Em_SequenStack(SequenStack *S)
    {
        if(S->top==-1)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    //入栈
    int Push_SequenStack(SequenStack *S,elemtype x)//插入新的元素作为新的栈顶
    {
        if(S->top>=MAXSIZE-1)
        {
            return 0;
        }
        S->top++;//栈顶指针+1
        S->data[S->top]=x;
        return 1;
    }
    
    //出栈
    int Pop_SequenStack(SequenStack *S,elemtype *x)//*x为整型指针,删除S的栈顶元素,并通过x返回其值
    {
        if(S->top==-1)
        {
            return 0;
        }
        else
        {
            S->top--;
            *x=S->data[S->top+1];
            return 1;
        }
    }
    
    //取栈顶数据元素
    int Get_SequenStack(SequenStack *S,elemtype *x)
    {
        if(S->top==-1)
        {
            return 0;
        }
        else
        {
            *x=S->data[S->top];
            return 1;
        }
    }
    
    int match(SequenStack *S,char *str)
    {
        S=Init_SequenStack();
        int i=0,e;//e用来接收栈顶
        while(str[i]!='#')
        {
            if(str[i]=='(')
            {
                Push_SequenStack(S,str[i]);
            }
            else if(str[i]==')')
            {
                if(Em_SequenStack(S))
                {
                    return 0;//不匹配
                }
                else
                {
                    Pop_SequenStack(S,&e);
                }
            }
            i++;
        }
        int h=Em_SequenStack(S);
        if(h==1)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    
    int main()
    {
        SequenStack *S;
        S= Init_SequenStack(S);
        char str[MAXSIZE];
        printf("请输入一串字符以#结尾:");
        scanf("%s",str);
        int h=match(S,str);
        if(h==0)
        {
            printf("不匹配!");
        }
        else
        {
            printf("匹配!");
        }
        return 0;
    
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月30日
  • 已采纳回答 5月22日
  • 赞助了问题酬金5元 5月21日
  • 创建了问题 5月21日

悬赏问题

  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序
  • ¥15 onvif+openssl,vs2022编译openssl64