数据结构(C语言) 栈的应用之括号匹配

#include<stdio.h>
#include<stdlib.h>
typedef struct SqStack {
    char str[100];
    int top;
}SqStack;
void Push(SqStack* S, char c) {
    S->top++;
    S->str[S->top] = c;
}
void Pop(SqStack* S, char* c) {
    *c = S->str[S->top];
    S->top--;
}
int Empty(SqStack* S) {
    return S->top == -1;
}
void Init(SqStack* S) {
    S->top = -1;
}
char LeftBracket(char right) {
    if (right == ‘)‘)
        return ‘(‘;
    else if (right == ‘]‘)
        return ‘[‘;
    else if (right == ‘}‘)
        return ‘{‘;
    return 0;
}
int BracketsCheck(char* str) {
    SqStack S;
    Init(&S);
    int i = 0;
    while (str[i] != ‘\0‘) {
        switch (str[i]) {
        case ‘(‘:
        case ‘[‘:
        case ‘{‘:
            Push(&S, str[i]);
            i++;
            break;
        case ‘)‘:
        case ‘]‘:
        case ‘}‘:
            if (!Empty(&S)) {
                char c;
                Pop(&S, &c);
                if (c == LeftBracket(str[i]))
                    i++;
                else
                    return 0;
            }
            else
                return 0;
            break;
        default:
            i++;
        }
    }
    return Empty(&S);
}

void main() {
    char* str = "{[1+2*(5-2)]*4*{2+6}}";
    int pass = BracketsCheck(str);
    if (pass) {
        printf("括号匹配!\n");
    }
    else {
        printf("括号不匹配!\n");
    }
    getchar();
}

原文地址:https://www.cnblogs.com/wumingoo1/p/11158258.html

时间: 2024-11-05 22:04:04

数据结构(C语言) 栈的应用之括号匹配的相关文章

栈应用——最长括号匹配

问题描述: 给定字符串,仅包含左括号'('和右括号')',它可能不是括号匹配的,设计算法,找出最长的括号字串,并返回字串的长度. 如: ((): 2 ()(): 4 ()(()):6 (()()): 6 思路分析: 记起始位置start = -1,最大匹配长度为max 考虑当前位置i的符号: 如果是'(',直接入栈: 如果是')': 如果栈空,则起始位置更新为i; 如果栈不空,则肯定能与栈顶的左括号匹配,然后考虑弹出一个左括号后的栈: 若栈空,则说明此次是一个匹配,匹配长度为:i-start,然

栈的应用-判断括号匹配

栈的一个典型应用就是可以用来协助分析表达式的括号是否匹配.括号可以延伸到任何成对出现的界定符,例如引号,书名号等. 接下来给出程序实现: 第一部分给出的是堆栈的插入,删除等操作对应的实现: 1 public class StackChar 2 { 3 private int maxSize;//堆栈数组大小 4 private char [] stackArray; 5 private int top;//堆栈顶 6 public StackChar(int maxSize) 7 { 8 thi

栈的应用之括号匹配的检验

栈的实际应用很多,其中括号匹配是很常见的例子.下面列出基本算法和源代码,标明注释以便日后复习和翻阅. Description: 利用栈编写满足下列要求的括号匹配检验程序:假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的 顺序随意,即([]())或[([][])]等为正确的格式,[(]或([())或(()])均为不正确的格式.输入一个包含上 述括号的表达式,检验括号是否配对.本题给出部分check()函数,要求将check()函数补充完整,并完成 整个程序. 算法: 代码: 1 void c

顺序栈(进制转换 + 括号匹配 + 判断栈表 + 最长括号匹配长度)

#include <stdio.h> #include <stdlib.h> #include <iostream> using namespace std; #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define STACK_INIT_SIZE 100 #define STACKLINCREMENT 10

栈的应用之括号匹配

思路: 在算法中设置一个栈,每读入一个空号 一:若是右括号: '}'  ' )'   ']'(两种情况): 1:使置于栈顶的最急迫的期待得以消解,需将栈顶元素出栈: 2:不合法的情况,即与栈顶的最急迫的期待不匹配,需将其(括号)压栈: 二:若是左括号:'('  '{'  '[' 作为一个新的更急迫的期待压栈: 顺序栈的代码不再赘述:点击打开链接 //括号匹配 #include"stack.h" int main() { Stack st; InitStack(&st); int

数据结构-栈的实现之括号匹配检测

假设表达式中只允许两种括号:().{}:正确表达顺序为:()或{}或({})或{({}{})}的形势:如{(}或(})或({)}的表达形势均不对.算法的设计思想: 出现左括弧则进栈: 出现右括弧则首先检测栈是否为空, 若栈空则表明此右括弧多余,表达式不匹配. 否则和栈顶数据比较,若匹配则栈顶出栈. 否则表明表达式不匹配: 最后若栈空且没有做鱼右括弧则匹配正确,否则表明不匹配. 实现代码如下(Stack.h头文件为之前写的数据结构-栈的顺序结构中写的数组那个方法,用到了里面栈的结构和连个基本栈操作

Java中栈的应用,括号匹配

1 package edu.yuliang.Data_Structure_Basics; 2 3 import org.omg.PortableInterceptor.SYSTEM_EXCEPTION; 4 /* 5 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 6 7 有效字符串需满足: 8 9 左括号必须用相同类型的右括号闭合. 10 左括号必须以正确的顺序闭合. 11 注意空字符串可被认为是有效字符串. 12 13 14 实现思路: 15

栈:WHT解决括号匹配问题

#include<iostream>using namespace std;#define stacksize 100;struct stack{ char strstack[stacksize]; int top; };void InitStack(stack &s){ s.top=-1;}char push(stack &s,char a){ if(s.top==stacksize-1) return 0; s.top++; s.strstack[s.top]=a; ret

数据结构复习_栈和队列,应用_括号匹配&amp;文件目录递归拷贝,

1.主题 2.学习视频和资料 视频    http://study.163.com/course/courseLearn.htm?courseId=555010#/learn/video?lessonId=701019&courseId=555010 http://study.163.com/course/courseLearn.htm?courseId=555010#/learn/video?lessonId=702024&courseId=555010 3.实现 数组或列表实现 4.应