作业帮 > 综合 > 作业

用栈检测括号匹配出现()[] {}三种括号,嵌套时不允许出现交叉,且只能大括号嵌套中括号,中括号嵌套小括号,求代码~中括

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:综合作业 时间:2024/06/22 21:04:36
用栈检测括号匹配
出现()[] {}三种括号,嵌套时不允许出现交叉,且只能大括号嵌套中括号,中括号嵌套小括号,求代码~
中括号和大括号不允许单独出现
用栈检测括号匹配出现()[] {}三种括号,嵌套时不允许出现交叉,且只能大括号嵌套中括号,中括号嵌套小括号,求代码~中括
#include
#include
#define MaxSize 100
typedef char ElemType;//定义数据类型
//定义顺序栈
typedef struct
{
\x09ElemType data[MaxSize];//数据域
\x09int top;//栈顶指针
}SeqStack;
//栈初始化
int InitStack(SeqStack *s)
{
\x09s->top=-1;//初始化栈顶,指向空
\x09return 1;
}
//入栈
int Push(SeqStack *s,ElemType x)
{
\x09if (s->top == MaxSize -1 )
\x09{
\x09\x09printf("栈已满,不能入栈.\n");
\x09\x09return 0;
\x09}
\x09else
\x09{
\x09\x09s->top++;//栈顶指针上移
\x09\x09s->data[s->top] = x;//数据元素入栈\x09\x09
\x09}
\x09return 1;
}
//出栈
int Pop(SeqStack *s,ElemType *x)
{
\x09if (s->top == -1)
{
\x09\x09printf("栈为空,不能出栈.\n");
\x09\x09return 0;
\x09}
\x09else
\x09{
\x09\x09*x=s->data[s->top];//取出栈顶元素值
\x09\x09s->top--;//栈顶指针下移
\x09}
\x09return 1;
}
//取栈顶值
int GetTop(SeqStack *s,ElemType *x)
{
\x09if (s->top == -1)
{
\x09\x09printf("栈为空,不能取值.\n");
\x09\x09return 0;
\x09}
\x09else
\x09{
\x09\x09*x=s->data[s->top];//取出栈顶元素值
\x09}
\x09return 1;
}
//判断栈是否为空
int IsEmpty(SeqStack *s)
{
\x09if(s->top==-1)
\x09\x09return 1;
\x09return 0;
}
int Check(char str[],int len)
{
\x09int i;
\x09int flag=1;//合法标志0-不合法 1-合法
\x09int exist=0;//小括号存在标志 0-不在 1-在
\x09ElemType x;
\x09SeqStack s;//栈s
\x09
\x09//栈初始化
\x09InitStack(&s);
\x09for(i=0;i=MaxSize)//超过定义长度
\x09\x09\x09return 1;
\x09\x09
\x09\x09if(Check(str,len)==1)
\x09\x09\x09printf("匹配合法!\n");
\x09\x09else
\x09\x09\x09printf("不合法\n");
\x09\x09printf("是否继续?1-是,0否 :");
\x09\x09if(scanf("%d",&i)!=1 || i!=1)
\x09\x09\x09break;
\x09\x09fflush(stdin);
\x09}
\x09return 0;
}