数据结构(C语言)---括号匹配

来源:互联网 发布:等基础设施网络建设 编辑:程序博客网 时间:2024/05/22 10:44
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10   //分配不同空间只需要更改此处的值,不需动程序里面的值。 
#define OK 1
#define ERROR 0
typedef int Status;


typedef struct{
        char *base;
        char *top;
        int stacksize;       
}SqStack;


Status InitStack(SqStack &s){   //初始化栈
       s.base=(char *)malloc(STACK_INIT_SIZE * sizeof(char);
       if(!s.base) exit(ERROR); //检验是否成功分配空间
       s.top=s.base;
       s.stacksize=STACK_INIT_SIZE;
       return OK;          
}


Status check(SqStack s){
       printf("请输入检验数据(括号):\n");
       char c;
       c=getchar();
       getchar();
       switch(c){
       case '(' : push(s,c); break;
       case '[' : push(s,c); break;
       case '{' : push(s,c); break;
       case ')' : pop(s,c); if(c == '(') return OK;  else return OK;  break;
       case ']' : pop(s,c); if(c == '[') return OK;  else return OK;  break;
       case '}' : pop(s,c); if(c == '{') return OK;  else return OK;  break;
       default : break;
       }//switch
}


Status push(SqStack &s,char e){  //压入栈顶元素
       if(s.top-s.base==s.stacksize){
       s.base=(char *)realloc(s.base,(STACKINCREMENT+STACK_INIT_SIZE)*sizeof(char));
       if(!s.base) exit(0);
       s.top=s.base+STACK_INIT_SIZE;
       s.stacksize += STACKINCREMENT;
       }//if
       s.top ++;
       e=*s.top;
       return OK;
}


Status pop(SqStack &s){ //取出栈顶元素
       if(s.top==s.base)  return ERROR; //栈S为空 
       s.top --;  
}


int main(int argc, char *argv[]){
    SqStack s; //定义栈s
    InitStack(s);
    check(s);  
    system("PAUSE");
    return 0;
}
原创粉丝点击