爱冒险的duola
2022-05-21 22:46
采纳率: 50%
浏览 44

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

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

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

#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条回答 默认 最新

相关推荐 更多相似问题