括号配对算法

来源:互联网 发布:java web项目规范 编辑:程序博客网 时间:2024/05/18 00:10
#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 ')':            if (!StackEmpty(s))            {                pop(s, e);                if ((e == '{' && *p == '}') || (e == '[' && *p == ']') || (e == '(' && *p == ')'))                    p++;                else                {                    printf("括号不匹配!");                     return;                }            }            else            {                 printf("括号不匹配!多了一个%c括号", *p);                 system("pause");                 return;            }            break;            default:p++;//其他字符就后移        }    }    printf("括号匹配成功");    printf("\n");    system("pause");}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;elsereturn 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;}}

0 0
原创粉丝点击