資料結構(C語言)---括號匹配
阿新 • • 發佈:2019-01-28
#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;
}
#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;
}