/Stack.h #ifndef _STACK_H_ #define ElementType char struct Node; typedef struct Node *PtrToNode; typedef PtrToNode Stack; struct Node { ElementType Element; PtrToNode Next; }; int IsEmpty(Stack S); Stack CreateStack(void); void MakeEmpty(Stack S); void Push(ElementType X,Stack S); void Pop(Stack S); ElementType Top(Stack S); #endif %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //Stack.c #include<stdio.h> #include "Stack.h" #include<stdlib.h> int IsEmpty(Stack S) { return S->Next==NULL; } Stack CreateStack(void) { Stack S; S=malloc(sizeof(struct Node)); if(S==NULL) { printf("out of space\n"); } S->Next=NULL; return S; } void MakeEmpty(Stack S) { if(S==NULL) { printf("Must use CreateStack first"); } } void Push(ElementType X,Stack S) { Stack TmpCell; TmpCell=malloc(sizeof(struct Node)); if(TmpCell==NULL) { printf("out of space\n"); } else { TmpCell->Next=S->Next; TmpCell->Element=X; S->Next=TmpCell; } } void Pop(Stack S) { PtrToNode TmpCell; if(S==NULL) { printf("Empty of stack\n"); } else { TmpCell=S->Next; S->Next=TmpCell->Next; free(TmpCell); } } ElementType Top(Stack S) { if(S==NULL) { printf("Empty of stack\n"); return 0; } else { return S->Next->Element; } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //main.c #include<stdio.h> #include "Stack.h" #include<string.h> int main(void) { //printf("1_1"); Stack S; ElementType x; S=CreateStack(); FILE *fp; int ch; int ch_1; fp=fopen("Check_mark.txt","r"); ch=getc(fp); // putchar(ch); // printf("1_2"); while(ch!=EOF) { // printf("1_3"); if(S!=NULL) { if(ch=='(') { Push(ch,S); } ch=getc(fp); //putchar(ch); if(ch==')') { if(IsEmpty(S)) { printf("The brackets is miss!\n"); } else { ch_1=Top(S); Pop(S); if(ch_1=='(') { printf("You are right!\n"); } else { printf("You are wrong!\n"); } printf("You pass the checking!\n"); } } } else { printf("Stack is Empty\n"); return; } } fclose(fp); }