【数据结构】括号匹配问题(简单版)

⭐️写在前面的话⭐️

📒博客主页: 程序员好冰
🎉欢迎 【点赞👍 关注🔎 收藏⭐️ 留言📝】
📌本文由 程序员好冰 原创,CSDN 首发!
📆入站时间: 🌴2022 年 07 月 13 日🌴
✉️ 是非不入松风耳,花落花开只读书。
💭推荐书籍:📚《Java编程思想》,📚《Java 核心技术卷》
💬参考在线编程网站:🌐牛客网🌐力扣
🍭 作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!🍭


括号匹配问题

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define OK 1
#define ERROR 0
#define MAX_SIZE 100

typedef int Status;
typedef int ElemType;

typedef struct LNode
{
    ElemType data;
    struct LNode *next;
}LNode;

typedef struct LinkStack
{
    int count;
    LNode *top;
}LinkStack;

Status InitStack(LinkStack *L)
{
    L->top=(LNode*)malloc(sizeof(LNode));
    if(!L->top){
        return ERROR;
    }
    L->top=NULL;
    L->count=0;
    return OK;
}

Status StackIsEmpty(LinkStack L)
{
    if(L.count==0){
        return OK;
    }
    if(L.count!=0){
        return ERROR;
    }
    return OK;
}

int StackLength(LinkStack L)
{
    return L.count;
}

ElemType GetTop(LinkStack L)
{
    return L.top->data;
}

Status Push(LinkStack *L,ElemType e)
{
    LNode *s = (LNode*)malloc(sizeof(LNode));
    s->data=e;
    s->next=L->top;
    L->top=s;
    L->count++;
    return OK;
}

Status Pop(LinkStack *L)
{
    if(StackIsEmpty(*L)){
        return ERROR;
    }
    LNode *temp;
    temp=L->top;
    L->top=L->top->next;
    free(temp);
    L->count--;
    return OK;
}

Status PrintStack(LinkStack L)
{
    if(StackIsEmpty(L)){
        return ERROR;
    }
    while(L.top){
        printf("%d",L.top->data);
        L.top=L.top->next;
    }
    return OK;
}

Status Matching(char *ch)
{
    LinkStack L;
    InitStack(&L);
    int flag=1;//默认匹配成功
    int i=0;
    int len = strlen(ch);
    while(i<len)
    {
        switch(ch[i])
          {
            case '[':
            case '(':
            case '{':
                Push(&L,ch[i]);
                break;
            case ')':
                if(!StackIsEmpty(L)&&GetTop(L)=='('){
                    Pop(&L);
                   }else
                   {
                       flag=0;
                   }
                break;
            case ']':
                if(!StackIsEmpty(L)&&GetTop(L)=='['){
                    Pop(&L);
                }else
                {
                    flag=0;
                }
                break;
            case '}':
                if(!StackIsEmpty(L)&&GetTop(L)=='{'){
                    Pop(&L);
                }else
                {
                    flag=0;
                }
                break;
            default:
                break;
          }
          i++;
    }
    if(StackIsEmpty(L)&&flag){
        printf("括号匹配.\n");
        return OK;
    }else
    {
        printf("括号不匹配.\n");
        return ERROR;
    }
    return OK;
}

int main()
{
    char ch[MAX_SIZE]={'0'};
    printf("请输入括号表达式:");
    scanf("%s",ch);
    Matching(ch);
    return 0;
}

运行效果

image-20230410172857646


🚀先看后赞,养成习惯!🚀

🚀 先看后赞,养成习惯!🚀

🎈觉得文章写得不错的老铁们,点赞评论关注走一波!谢谢啦!🎈


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以帮你提供一个简单的括号匹配的代码示例。这个问题可以使用栈这种数据结构来解决。下面是一个使用Python编写的示例代码: ```python def is_balanced(expression): stack = [] opening_brackets = ['(', '[', '{'] closing_brackets = [')', ']', '}'] for char in expression: if char in opening_brackets: stack.append(char) elif char in closing_brackets: if not stack: return False top = stack.pop() if opening_brackets.index(top) != closing_brackets.index(char): return False return not stack # 测试代码 test_cases = ["()", "()[]{}", "(]", "([)]", "{[]}", "([))"] for expression in test_cases: if is_balanced(expression): print(f"{expression} 是括号匹配的") else: print(f"{expression} 不是括号匹配的") ``` 这段代码定义了一个 `is_balanced` 函数,该函数接受一个表达式作为输入,并使用栈来检查括号是否匹配。它遍历表达式中的每个字符,如果是左括号,则将其推入栈中;如果是右括号,则将其与栈顶的左括号进行匹配。如果左右括号不匹配,或者在遍历结束后栈中还有剩余的左括号,则表达式不是括号匹配的。最后,如果栈为空,则表达式是括号匹配的。 运行上述代码,将会输出以下结果: ``` () 是括号匹配的 ()[]{} 是括号匹配的 (] 不是括号匹配的 ([)] 不是括号匹配的 {[]} 是括号匹配的 ([)) 不是括号匹配的 ``` 希望这个代码示例能满足你的需求。如果还有其他问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值