括号匹配
描述
假设一个算术表达式中可以包含三种括号:圆括号”(“和”)”,方括号”[“和”]”和花括号”{“和”}”,且这三种括号可按任意的次序嵌套使用,如:…[…(…)…{…{…}…[…]…}…]…,编写程序判别给定表达式中所含括号是否正确配对出现。
输入
输入一个由这几种括号组成的字符串,字符串长度不大于100。
输出
若正确则输出”Yes”,否则输出”No”。注意字母的大小写,结尾带回车。
输入样例
{()[]}{}
输出样例
Yes
#include <iostream>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
using namespace std;
typedef char DataType;
struct Node
{
DataType info;
struct Node *next;
};
typedef struct Node Node, *PNode;
struct LinkStack
{
struct Node *top;
};
typedef struct LinkStack LinkStack, *PLinkStack;
PLinkStack createEmptyStack()
{
PLinkStack plstack;
plstack = (PLinkStack)malloc(sizeof(LinkStack));
if(plstack != NULL)
plstack->top = NULL;
else
printf("Create Error: Out of space!\n");
return plstack;
}
int isEmptyStack(PLinkStack plstack)
{
return (plstack->top == NULL);
}
void push(PLinkStack plstack, DataType x)
{
PNode p;
p = (PNode)malloc(sizeof(Node));
if(p == NULL)
printf("Push Error:Out of space!\n");
else
{
p->info = x;
p->next = plstack->top;
plstack->top = p;
}
}
void pop(PLinkStack plstack)
{
PNode p;
if(isEmptyStack(plstack))
printf("Error:Empty stack pop!\n");
else
{
p = plstack->top;
plstack->top = plstack->top->next;
free(p);
}
}
DataType top(PLinkStack plstack)
{
if(isEmptyStack(plstack))
printf("Error: Empty Stack!\n");
else
return plstack->top->info;
}
bool prepare(PLinkStack s1, char str[])
{
int len = strlen(str);
int i;
for(i = 0; i < len; i ++)
{
if(str[i] == '(')
push(s1, str[i]);
else if(str[i] == '[')
push(s1, str[i]);
else if(str[i] == '{')
push(s1, str[i]);
else if(str[i] == ')')
{
while(!isEmptyStack(s1)&&top(s1)!='(')
{
pop(s1);
}
if(isEmptyStack(s1))
break;
else
pop(s1);
}
else if(str[i] == ']')
{
while(!isEmptyStack(s1)&&top(s1)!='[')
{
pop(s1);
}
if(isEmptyStack(s1))
break;
else
pop(s1);
}
else if(str[i] == '}')
{
while(!isEmptyStack(s1)&&top(s1)!='{')
{
pop(s1);
}
if(isEmptyStack(s1))
break;
else
pop(s1);
}
}
if(isEmptyStack(s1) && i == len)
return 1;
else
return 0;
}
int main()
{
char str[100];
gets(str);
PLinkStack s1 = createEmptyStack();
if(prepare(s1, str))
printf("Yes\n");
else
printf("No\n");
return 0;
}