括号匹配算法

1、基于栈的应用

括号匹配算法是栈的一个典型应用;所以的借用栈来实现,保存相应的信息;

算法思想:遇到第一个字符, 判断栈空,字符入栈,其后的字符和栈顶元素进行比较,括号匹配的话,则栈顶元素出栈,否则,当前元素入栈,直到遇到0结束标志;最后根据栈空判断,空:括号匹配,否则,不匹配;

例:([{}])是匹配的括号,为正确的;

2、代码实现

#include<iostream>
#include<stack>
using namespace std;

typedef unsigned char boolean;
#define    TRUE    1
#define FALSE    0

boolean backetMatch(char *str);
boolean backetMatch(char *str){
    stack<int> s;
    int i = 0;
    
    while(str[i]){
        if(s.empty()){
            s.push(str[i]);
        }else{
            if(s.top() == ‘)‘ || s.top() == ‘]‘ || s.top() == ‘}‘){
                return FALSE;  //首先出现右括号的,肯定是不匹配的;
            }

            if(s.top() == ‘(‘){ //为‘(‘的情况
                if(str[i] == ‘)‘){
                    s.pop();
                }else{
                    s.push(str[i]);
                }
            }else if(s.top() == ‘[‘){ //为‘[‘的情况
                if(str[i] == ‘]‘){
                    s.pop();
                }else{
                    s.push(str[i]);
                }
            }else if(s.top() == ‘{‘){ //为‘{‘的情况
                if(str[i] == ‘}‘){
                    s.pop();
                }else{
                    s.push(str[i]);
                }
            }
        }
            i++;
    }

    if(s.empty()){
        return TRUE;
    }else{
        return FALSE;
    }
}

int main(void){
    char *str = "({[])}";
    boolean flag;

    flag = backetMatch(str);
    if(flag){
        printf("括号匹配\n");
    }else{
        printf("括号不匹配\n");
    }
    
    return 0;
}

3、结果截图

时间: 2024-09-29 15:23:16

括号匹配算法的相关文章

括号匹配算法求解(用栈实现)

1.括号匹配算法 //括号匹配算法 public void pipei()throws Exception{ char temp,ch; int match; //记录匹配结果 BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); ch=(char) br.read(); //输入一个字符 while(ch!='0'){ if(getTop()==-1){ push(ch); }else{ temp=p

Java堆栈的应用1----------堆栈的自定义实现以及括号匹配算法的Java实现

接下篇:http://www.cnblogs.com/fuck1/p/5995857.html 堆栈的应用1:括号匹配算法 括号匹配问题 假设算术表达式中包含圆括号,方括号,和花括号三种类型.使用栈数据结构编写一个算法判断表达式中括号是否正确匹配,并设计一个主函数测试. 比如:{a+[b+(c*a)/(d-e)]}     正确 ([a+b)-(c*e)]+{a+b}    错误 对于表达式中的括号是否匹配,不能仅仅通过统计左括号'('出现的次数和右括号')'出现的次数是否相等来实现,"a*)b

Valid Parentheses——括号匹配算法

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41450987 通过本文你能学到如下知识: (1)对数据结构中栈的理解,特别是Stack类中的peek()方法和pop()方法的区别. (2)理解解题思路,提高思考问题的能力. Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if

不使用栈简单实现括号匹配算法

刚刚做数据结构作业时有这样一道书本习题,题目如下: 3.2 假设以I和O分别表示进栈和出栈操作,栈的初态和终栈均为空,进栈和出栈的操作序列可表示为仅由I和O组成的序列. (1)下面所示的序列中哪些是合法的? A. IOIIOIOO B. IOOIOIIO C. IIIOIOIO D. IIIOOIOO (2)通过对(1)的分析,写出一个算法判定所给的操作序列是否合法.若合法则返回1:否则返回0.(假设被判定的操作序列已存入一位数组中). 第一题思考了一下,AD 第二题本来想用栈来做,但似乎又没有

括号匹配算法 C语言实现

#include <stdio.h> #include <malloc.h> //malloc,realloc #include <math.h> //含有overflow #include <process.h> //exit() #define S_SIZE 100 //栈的空间大小 #define STACKINCREAMENT 10//增加空间 struct SqStack{ int *base; //栈底 int *top; //栈顶 int st

数据结构13: 括号匹配算法及C语言实现

在编写代码的时候,经常会用到两种括号:圆括号 “()” 和大括号 “{}” .不管使用哪种括号,程序编译没有问题的其中一个重要因素就是所使用的括号是否能够匹配上. 在编写程序时,括号可以嵌套,即: “({()})” 这种形式,但 “({)” 或者 “({}” 都不符合要求. 括号匹配项目要求:给出任意搭配的括号,判断是否匹配. 设计思路 编写程序判断括号匹配问题的时候,使用栈结构会很容易: 如果碰到的是左圆括号或者左大括号,直接压栈: 如果碰到的是右圆括号或者右大括号,就直接和栈顶元素配对:如果

括号匹配算法思想

1)凡出现左括弧,则进栈: 2)凡出现右括弧,首先检查栈是否空 若栈空,则表明该"右括弧"多余, 否则和栈顶元素比较, 若相匹配,则"左括弧出栈" , 否则表明不匹配. 3)表达式检验结束时, 若栈空,则表明表达式中匹配正确, 否则表明"左括弧"有余 有种匹配是: 添加了两个变量 left 和 right ,记录左右括号的数量,若不相等,则说明没有完成配对. 原文地址:https://www.cnblogs.com/Roni-i/p/921559

括号匹配算法(C++语法)

这个代码是我在学习编程风格之前写的代码,改变之后的我后续会整体发上去. //括号匹配 #include<iostream> #include<stack> using namespace std; int iskh(char ch) { if (ch == '(' || ch == '[' || ch == '{')return 1; else if (ch == ')' || ch == ']' || ch == '}')return -1; else return 0; } i

括号的匹配

括号的匹配 括号的匹配问题 简单的分析一下 可以用的括号可以分为以下几种 "()" "[]" "{}" "<>" 匹配过程中又以下四种情况 左右括号乱序 左括号比右括号多 右括号比左括号多 匹配 算法思路 定义一个栈,根据栈后进先出的特性进行括号匹配 依次读入一个字符当这个字符是左括号时,将其压入栈顶 重复第二步,如果字符时右括号将栈顶元素出栈与当前字符匹配,如果匹配不做任何操作,如果不匹配将这两个字符再次压入栈直