目录
一、题目
二、代码
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<stdlib.h>
#define MaxSize 100
struct SqStack
{
char* top;
char* base;
};
struct SqStack S;
void Create()
{
S.base = (char*)malloc(sizeof(char) * MaxSize);
if (S.base == NULL)
{
printf("内存分配失败!");
exit(1);
}
S.top = S.base;
}
int Push(char s)
{
if (S.top - S.base == MaxSize)
{
printf("栈满!");
exit(1);
}
else
{
*S.top++ = s;
return 1;
}
}
int Pop(char* y)
{
if (S.top == S.base)
return 0;
else
{
*y = *(--S.top);
return 1;
}
}
int Empty()
{
if (S.top == S.base)
return 1;
else
return 0;
}
int Compare()
{
char s;
Create();
while ((s = getchar()) != '\n')
{
if (s == '(' || s == '[' || s == '{')
Push(s);
if (s == ')' || s == ']' || s == '}')
{
if (Empty())
{
return 0;
}
char* temp = S.top - 1;
if (((*temp == '(') && s == ')') || ((*temp == '[') && s == ']') || ((*temp == '{') && s == '}'))
{
Pop(temp);
}
else
return 0;
}
}
if (Empty())
return 1;
else
return 0;
}
int main(void)
{
printf("请输入括号串:");
int temp = Compare();
if (temp == 1)
printf("有效括号!");
else
printf("无效括号!");
free(S.base);
return 0;
}
三、算法思路
使用一个栈来存储左括号,只有遇到左括号,就压入栈中,当遇到一个右括号时,需要从栈中弹出一个括号进行比较,如果能够匹配,则弹出该括号,否则表示不是有效的括号匹配。当栈空时,说明全部括号匹配。
四、运行截屏
1.有效括号
2.无效括号