您的位置:首页 > 理论基础 > 数据结构算法

数据结构之括号匹配问题的解决

2016-10-25 18:53 477 查看
经过这几天的思索,终于完成了括号匹配问题算法的实现,不多说,把代码献出来,有问题请大家多指教

#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT  10
typedef char SElemType;

typedef struct {
SElemType   *base;  //栈底
SElemType   *top;   //栈顶
int   stacksize;    //当前可用最大容量
}SqStack;

void InitStack (SqStack &S){
S.base=(SElemType*)malloc(STACK_INIT_SIZE  *sizeof(SElemType));
if (!S.base) exit (0); //存储分配失败
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
}

void Push (SqStack &S, SElemType e) {
if (S.top - S.base >= S.stacksize) {//栈满,追加存储空间
S.base = (SElemType *) realloc ( S.base,
(S.stacksize + STACKINCREMENT) * sizeof (SElemType));
if (!S.base) exit (0); //存储分配失败
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*S.top=e;
S.top++;

}

void Pop (SqStack &S, SElemType &e) {
// 若栈不空,则删除S的栈顶元素,
// 用e返回其值,并返回OK;
// 否则返回ERROR
if (S.top == S.base) exit(0);

--S.top;
e=*S.top;
}

void GetTop (SqStack S, SElemType &e) {
// 若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR
if (S.top == S.base) exit(0);
e = *(S.top-1);
}

void main( ){
SqStack s;
SElemType e,ch;
int flag=1;
InitStack(s);
ch=getchar();
while(ch!='#'&&flag){
switch(ch){
case'[': Push(s,ch);break;
case'(':Push(s,ch);break;
case ']' :
if(s.top !=s.base){
GetTop(s,e);
if(e='['){
Pop(s,e);
flag=1;
}
else flag=0;
}
else exit(0);
break;
case ')' :
if(s.top!=s.base){
GetTop(s,e);
if(e=='('){
Pop(s,e);
flag=1;
}
else flag=0;
}
else exit(0);
break;

default :break;
}
scanf(" %c",&ch);

}
if(flag==1)
printf("YES");
else printf("NO");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: