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

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

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

#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

栈空才是匹配,修改如下


#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;

}

顺序栈初始化出问题了吧,你初始化的顺序栈函数只分配了一个单元的内存
S=(SequenStack *)malloc(sizeof(SequenStack));
这句话多多少少有点问题,应该是S=(SequenStack )malloc(1000sizeof(SequenStack));
你只申请了一单元的栈。