笔试编程题--括号匹配

判断算式中的括号是否匹配正常

使用C语言的栈(stack)来检查字符串匹配的简单算法:这个程序中,Stack结构表示栈,使用动态仓库来存储的元素。initStack用于初始化栈的函数,push用于入栈的函数,pop用于出栈的函数。isBracketMatched函数接受一个表达式字符串作为输入,并使用栈来检查其中的括号是否匹配。如果括号匹配,函数返回1;否则,返回0。

#include 
#include 
// 定义栈结构
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; // 栈顶指针初始化为-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);//假设栈的大小为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;
}

你可能感兴趣的:(笔试,c语言,面试,笔记,linux,算法)