码迷,mamicode.com
首页 > 编程语言 > 详细

括号匹配算法 C语言实现

时间:2014-11-04 19:20:07      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   ar   sp   strong   div   on   

#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;}
}

 

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

括号匹配算法 C语言实现

标签:style   blog   io   color   ar   sp   strong   div   on   

原文地址:http://www.cnblogs.com/rednodel/p/4074182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!