1. 程式人生 > >資料結構(C語言)---括號匹配

資料結構(C語言)---括號匹配

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