括号匹配算法 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 stacksize;   //栈当前的存储空间
};
void main()
{//子函数声明
    void InitStack(SqStack &S);//初始化空栈
    int StackEmpty(SqStack S);//判空
    void push(SqStack &S,int e);//进栈
    void pop(SqStack &S,int &e);//出栈
    //主函数开始
    SqStack s;//初始化空栈
    InitStack(s);
    char ch[100],*p;int e;
    p=ch;
    printf("输一个含义有()[]{}的括号表达式:\n");
    gets(ch);
    while(*p)
    {
        switch (*p)
        {
        case ‘{‘:
        case ‘[‘:
        case ‘(‘: push(s,*p++);break;//只要是左括号就入栈
        case ‘}‘:
        case ‘]‘:
        case ‘)‘:pop(s,e);
                 if ((e==‘{‘ && *p==‘}‘) ||(e==‘[‘ && *p==‘]‘) || (e==‘(‘ && *p==‘)‘))
                 p++;
                 else
                 {printf("括号不匹配!");exit(OVERFLOW);}
                 break;
        default :p++;//其他字符就后移
        }
    }
    if (StackEmpty(s))
      printf("括号匹配成功");
    else
      printf("缺少右括号!");
    printf("\n");
}
void InitStack(SqStack &S)
{S.base=(int *)malloc(S_SIZE*sizeof(int));
S.stacksize=S_SIZE;
S.top=S.base;//初始化空栈
}
int StackEmpty(SqStack S)
{
    if(S.base==S.top)
        return 1;
    else
        return 0;
}
void push(SqStack &S,int e)
{//进栈
    if(S.top-S.base>=S.stacksize)
    {S.base=(int *)realloc(S.base,(S.stacksize+STACKINCREAMENT)*sizeof(int));
    S.top=S.base+S.stacksize;
    S.stacksize+=STACKINCREAMENT;}
    *(S.top)=e;
    S.top++;
}
void pop(SqStack &S,int &e)
{//出栈
    if(S.base!=S.top)
    {S.top--;
    e=*S.top;}
}

检测表达式中的字符,若是左括号就入栈,如果是右括号就出栈一个元素与其配对,配对成功则继续访问下一个字符,否则退出。出现非括号字符则跳过。

时间: 2024-10-25 04:15:52

括号匹配算法 C语言实现的相关文章

括号匹配算法

1.基于栈的应用 括号匹配算法是栈的一个典型应用:所以的借用栈来实现,保存相应的信息: 算法思想:遇到第一个字符, 判断栈空,字符入栈,其后的字符和栈顶元素进行比较,括号匹配的话,则栈顶元素出栈,否则,当前元素入栈,直到遇到0结束标志:最后根据栈空判断,空:括号匹配,否则,不匹配: 例:([{}])是匹配的括号,为正确的: 2.代码实现 #include<iostream> #include<stack> using namespace std; typedef unsigned 

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

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

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

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

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 第二题本来想用栈来做,但似乎又没有

括号匹配算法思想

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

串的匹配算法--C语言实现

串这种数据结构,使用是比较多的,但是它的一些方法在更高级的语言中,比如Java,Python中封装的比较完整了.在这里,我只写了串中使用最多的匹配算法,即串的定位操作.串的匹配算法常用的两种就是朴素匹配算法和KMP匹配算法.代码亲测,可直接执行. 1 #include<stdio.h> 2 3 /*字符串长度*/ 4 int StringLength(char *L) 5 { 6 int i = 0; //记录位置 7 int count = 0; //计数器,记录长度 8 while(L[i

括号匹配算法(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