阅读背景:

括号配对算法_LifeBackwards的专栏_括号配对算法

来源:互联网 
#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;
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;}
}#include <stdio.h>
#include <malloc.h>   //mall



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: