//数据结构C语言版(清华大学_唐国民_第3版)
//栈的链式存储,书 P52 例子3.2.2 括号匹配,与书上代码有些许出入,不用在意,重要的是思路
#include <stdio.h>
#include <stdlib.h>
typedef struct SNode* Stack;
typedef char Element;
struct SNode{
Element Data;
Stack Next;
};
Stack Create();
void Push(Stack,Element);
Element Pop(Stack);
int IsEmpty(Stack);
int Ismatch(Stack);
int main()
{
Stack s;
int t;
s = Create();
t = Ismatch(s);
if(t == 0){
printf("Do not match.\n");
}
else{
printf("Match.\n");
}
return 0;
}
Stack Create()
{
Stack s;
s = (Stack)malloc(sizeof(struct SNode));
s->Next = NULL;
}
int Isempty(Stack s)
{
if(s->Next == NULL){
return 1;
}
else{
return 0;
}
}
void Push(Stack s,Element item)
{
Stack New;
New = (Stack)malloc(sizeof(struct SNode));
New->Data = item;
New->Next = s->Next;
s->Next = New;
}
Element Pop(Stack s)
{
Stack p;
Element item;
p = s->Next;
s->Next = p->Next;
item = p->Data;
free(p);
return item;
}
int Ismatch(Stack s)
{
Element c;
int i;
i=1;
printf("Please input the string(end with '0').\n");
while((c = getchar()) != '0'){
switch (c){
case '(':
case '{':
case '[':{
Push(s,c);
break;
}
case ')':{
if(Isempty(s) || Pop(s) !='('){
i = 0;
}
break;
}
case '}':{
if(Isempty(s) || Pop(s) !='{'){
i = 0;
}
break;
}
case ']':{
if(Isempty(s) || Pop(s) !='['){
i = 0;
}
break;
}
}
}
return i;
}