其他分享
首页 > 其他分享> > 数据结构-栈-括弧匹配检验(两种括号)

数据结构-栈-括弧匹配检验(两种括号)

作者:互联网

题目描述--跟上一题括号匹配思路差不多就是多了'['  ' ]'方括号的判断 

       假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误的匹配。

现在的问题是,要求检验一个给定表达式中的括弧是否正确匹配?

输入一个只包含圆括号和方括号的字符串,判断字符串中的括号是否匹配,匹配就输出 “OK” ,不匹配就输出“Wrong”。

输入

输入仅一行字符(字符个数小于

输出

匹配就输出 “OK” ,不匹配就输出“Wrong”。

样例输入

[(])

样例输出

Wrong
算法思路: 与上一题差不多,就是在出栈的时候要知道出栈的元素是哪个,我们在pop(STACK *ps,char * val)函数中用*val保存出栈的值,在调用完pop()后,判断一下val的值是不是对应的相反括号即可  溢出判断也是跟上一题一样,如果栈里面是空的此时遇到 ‘)’ 或者‘]’会返回false,直接返回false输出Wrong,栈里面元素多余,用top判断如果top!=-1那么返回false输出Wrong反之OK。

#include <stdio.h>
#define maxsize 255
typedef struct stack
{
int top ;
int arr[maxsize];
}STACK ;
void init(STACK * ps);
bool brackets_match(STACK * ps);
bool push(STACK * ps,char val);
bool pop(STACK * ps,char *val);
void show_stack(STACK * ps);
int main()
{
STACK st ;
init(&st);
if(brackets_match(&st))
{
printf("OK\n");
}else printf("Wrong\n");
}
void init(STACK * ps)
{
ps->top = -1;
}
bool brackets_match(STACK * ps)
{
char ch,tmp,val;
while(scanf("%c",&ch)!=EOF)
{
if( ch=='('||ch=='[' )
{
push(ps,ch);
//show_stack(ps);
}
else if(ch==')')
{
if(pop(ps,&val));
else return false;
// show_stack(ps);
if(val!='(')
{
return false ;
}

}
else if(ch==']')
{
if(pop(ps,&val));
else return false;
// show_stack(ps);
if(val!='[')
{
return false;
}

}
}
if(ps->top == -1) return true;
else return false ;
}
bool push(STACK * ps,char val)
{
if(ps->top == maxsize-1)
{
return false;
}
else
{
ps->arr[++ps->top]=val;
return true ;
}
}
void show_stack(STACK * ps)
{
int i =ps->top;
while(i!=-1)
{
printf("%c ",ps->arr[i--]);
}
printf("\n");
}
bool pop(STACK * ps,char *val)
{
char ch;
if(ps->top == -1)
{
return false;
}
else
{
*val =ps->arr[ps->top--];
return true ;
}
}

   

标签:括弧,return,val,ps,top,括号,false,数据结构,STACK
来源: https://www.cnblogs.com/cocobear9/p/12583919.html