结果图:
(1)括号不匹配:
(2)括号匹配:
代码如下:
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1
typedef int Status;
typedef char ElemType;
typedef struct StackNode{
ElemType data;
struct StackNode *next;
}StackNode,*LinkStack;
void InitStack(LinkStack &s){
s=NULL;
}
bool StackEmpty(LinkStack s){
return (s==NULL);
}
Status PushStack(LinkStack &s,ElemType e){
LinkStack p=(LinkStack)malloc(sizeof(StackNode));
p->data=e;
p->next=s;
s=p;
return OK;
}
Status PopStack(LinkStack &s,ElemType *e){
LinkStack p=(LinkStack)malloc(sizeof(StackNode));
if(s==NULL)
return ERROR;
*e=s->data;
p=s;
s=s->next;
free(p);
return OK;
}
bool matchStack(){
LinkStack s=(LinkStack)malloc(sizeof(StackNode));;
InitStack(s);
char r;
ElemType e;
printf("请输入括号:");
scanf("%c",&r);
while(r!='0'){
switch(r){
case '(':
case '[':
case '{':
PushStack(s,r);
break;
case ')':
case ']':
case '}':
if(StackEmpty(s))
return false;
PopStack(s,&e);
if(r==')'&&e!='(')
return false;
if(r==']'&&e!='[')
return false;
if(r=='}'&&e!='{')
return false;
break;
}
scanf("%c",&r);
}
if(StackEmpty(s))
return true;
else
return false;
}
void main(){
if(matchStack())
printf("括号匹配成功\n");
else{
printf("括号匹配不成功\n");
}
}