标签:
#include<stdio.h> #include<stdlib.h> struct Node; typedef struct Node *PtrToNode; typedef PtrToNode Stack; struct Node{ char Ele; PtrToNode Next; }; Stack CreateStack( void ) { Stack S; S = malloc( sizeof( struct Node ) ); if(S == NULL ) printf("out of space"); S->Next = NULL; return S; } void Push(char ch,Stack S) { PtrToNode TmpCell; TmpCell = malloc(sizeof( struct Node )); if(TmpCell == NULL) printf("out of space "); else { TmpCell->Next = S->Next; S->Next = TmpCell; TmpCell->Ele = ch; } } int IsEmpty(Stack S) { return S->Next == NULL; } void Pop( Stack S ) { PtrToNode TmpCell; TmpCell = S->Next; S->Next = TmpCell->Next; free(TmpCell); } char Top( Stack S ) { return S->Next->Ele; } int main() { char Tmp; Stack S; S = CreateStack(); while( ( Tmp = getchar() ) != ‘\n‘ ) { if(Tmp == ‘[‘ || Tmp == ‘(‘) Push(Tmp,S); else if(Tmp == ‘]‘) { if( !IsEmpty( S ) ) { char tmp; tmp = Top( S ); Pop( S ); if(tmp != ‘[‘) printf("error"); } else printf("Error"); }//else if else { if( !IsEmpty( S ) ) { char tmp; tmp = Top( S ); Pop( S ); if(tmp != ‘(‘) printf("error"); } else printf("error"); }//else } if( !IsEmpty( S )) printf("error"); return 0; }
算法描述:如果遇到开放符号就进栈,如果遇到封闭符号,先判断此时是不是空栈,是就报错,否则,就出栈判断是否是其对应的开放符号,不是就报错,如果读到文件结尾,栈不为空,报错
标签:
原文地址:http://www.cnblogs.com/gabygoole/p/4616033.html