判断算式中的括号是否匹配正常
使用C语言的栈(stack)来检查字符串匹配的简单算法:这个程序中,Stack结构表示栈,使用动态仓库来存储的元素。initStack用于初始化栈的函数,push用于入栈的函数,pop用于出栈的函数。isBracketMatched函数接受一个表达式字符串作为输入,并使用栈来检查其中的括号是否匹配。如果括号匹配,函数返回1;否则,返回0。
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char *data;
int size;
int top;
}Stack;
void initStack(Stack *stack, int size)
{
stack->data = (char*) malloc(sizeof(char) * size);
stack->size = size;
stack->top = -1;
}
char pop(Stack *stack)
{
if(stack->top == -1)
{
printf("栈为空,无法出栈");
return '\0';
}
return stack->data[stack->top--];
}
void push(Stack *stack,char element)
{
if(stack->top == stack->size-1)
{
printf("栈已满,无法入栈");
return;
}
stack->data[++stack->top] = element;
}
int isBracketMatched(const char *expression)
{
Stack stack;
initStack(&stack,100);
for (int i = 0; expression[i]; ++i)
{
if(expression[i] == '(' || expression[i] == '{' || expression[i] == '[')
push(&stack, expression[i]);
else if(expression[i] == ')' || expression[i] == '}' || expression[i] == ']')
{
char topElement = pop(&stack);
if((expression[i] == ')' && topElement != '(') ||
(expression[i] == '}' && topElement != '{') ||
(expression[i] == ']' && topElement != '['))
{
free(stack.data);
return 0;
}
}
}
int result = (stack.top == -1);
return result;
}
int main() {
const char *expression = "{([]}";
if (isBracketMatched(expression)) {
printf("括号匹配\n");
} else {
printf("括号不匹配\n");
}
return 0;
}