[数据结构]括号匹配 解题报告

Problem Description

假设一个算术表达式中包含圆括号、方括号两种类型的括号,试编写一个判断表达式中括号是否匹配的程序,匹配返回Match succeed!,否则返回Match false!

[1+2*(3+4*(5+6))]括号匹配
(1+2)*(1+2*[(1+2)+3)括号不匹配
输入

包含圆括号、方括号两种类型括号的算术表达式
输出

匹配输出Match succeed!
不匹配输出 Match false!

输入[1+2* (3+4*(5+6))]
输出Match succeed!


测试输入

[1+2*(3+4*(5+6))]

测试输出

Match succeed!

AcCode

//
//  main.cpp
//  括号匹配
//
//  Created by jetviper on 2017/3/26.
//  Copyright © 2017年 jetviper. All rights reserved.
//


#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include<string.h>
#define true 1
#define false 0

typedef struct Node
{
    char data;
    struct Node *pNext;
}NODE, *PNODE;

typedef struct Stack
{
    PNODE pTop;
    PNODE pBottom;
}STACK, *PSTACK;
//栈的初始化
void init(PSTACK pS)
{
    pS->pTop = (PNODE)malloc(sizeof(NODE));
    pS->pBottom = pS->pTop;
    pS->pTop->pNext = NULL;
    return;
}
//插入元素到栈顶
void push(PSTACK pS, char val)
{
    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    pNew->data = val;
    pNew->pNext = pS->pTop;
    pS->pTop = pNew;
    return;
}
//判断栈是否为空
int empty(PSTACK pS)
{
    if (pS->pTop == pS->pBottom)
    {
        return true;
    }
    else
        return false;
}

void deltop(PSTACK pS) {
    pS->pTop = pS->pTop->pNext;
    return;
}

int main(void)
{
    STACK S;
    PSTACK ps=&S;
    init(&S);
    char val;
    char str[100];
    scanf("%s", &str);
    for (int i = 0; i < strlen(str); i++) {
        if (str[i] == '(' || str[i] == ')' || str[i] == '[' || str[i] == ']') {
            val = ps->pTop->data;
            
            if (str[i] == '(' || str[i] == '[')push(&S, str[i]);
            else if (val=='(' && str[i]==')'||val=='['&&str[i]==']')deltop(&S);
            else push(&S, str[i]);
        }
    }
    
    if (empty(&S))
    {
        printf("Match succeed!\n");
    }
    else
    {
        printf("Match false!\n");
    }
    
    return 0;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,080评论 19 139
  • 从匹配中返回值 Match 对象 成功的匹配总是返回一个 Match 对象, 这个对象通常也被放进 $/ 中, (...
    焉知非鱼阅读 1,858评论 0 1
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,272评论 0 4
  • 朋友圈,经常收到求赞的信息,多少赞可以送礼物多少赞可以送打折之类。据说,在孩子人生初期,收获5000个赞,会有助于...
    小龙真棒阅读 437评论 2 1
  • 在迷迷糊糊睡梦中他回来了,我以为今晚他不会回来呢,结果出乎意料既然回来了,看来是我多想了,老是聚焦在他只要不回来就...
    廖霞3524阅读 155评论 0 0