标签:
1 #include <stdio.h> 2 #include <malloc.h> 3 #include <stdlib.h> 4 #include <math.h> 5 6 #define STACK_INIT_SIZE 100 //存储空间初始分配量 7 #define STACKINCREMENT 10 //存储空间分配增量 8 #define SElemType char //当前数据类型 9 10 typedef struct 11 { 12 SElemType *base; //栈底指针; 13 SElemType *top; //栈顶指针 14 int stacksize; //当前已分配的存储空间 15 }SqStack; 16 17 SqStack InitStack() 18 { 19 SqStack S; 20 S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType)); 21 if(!S.base) 22 { 23 printf("CREATE ERROR!\n"); 24 exit(OVERFLOW); //OVERFLOW定义于math.h文件中,其值为3,exit函数定义在stdlib.h中 25 } 26 S.top = S.base; 27 S.stacksize = STACK_INIT_SIZE; 28 return S; 29 } 30 31 int StackEmpty(SqStack S) 32 { 33 if(S.top == S.base) 34 { 35 return 1; 36 } 37 else 38 { 39 return 0; 40 } 41 } 42 43 SElemType GetTop(SqStack S) 44 { 45 if(S.top == S.base) 46 { 47 return 0; 48 } 49 else 50 { 51 return *(S.top - 1); 52 } 53 } 54 55 SqStack Push(SqStack S, SElemType e) 56 { 57 if(S.top - S.base >= S.stacksize) 58 { 59 S.base = (SElemType*)realloc(S.base,(S.stacksize + STACKINCREMENT) * sizeof(SElemType)); 60 if(!S.base) 61 { 62 printf("ERROR\n"); 63 exit(OVERFLOW); //OVERFLOW定义于math.h文件中,其值为3,exit函数定义在stdlib.h中 64 } 65 S.top = S.base + S.stacksize; 66 S.stacksize += STACKINCREMENT; 67 } 68 else 69 { 70 *(S.top++) = e; 71 } 72 return S; 73 } 74 75 SqStack Pop(SqStack S) 76 { 77 if(S.top == S.base) 78 { 79 printf("NULL\n"); 80 return S; 81 } 82 else 83 { 84 S.top--; 85 return S; 86 } 87 } 88 89 int main() 90 { 91 SqStack S = InitStack(); 92 char c; 93 while(1) 94 { 95 scanf("%c",&c); 96 if(c == ‘[‘ || c == ‘]‘ || c == ‘(‘ || c == ‘)‘ || c == ‘{‘ || c == ‘}‘) 97 { 98 if(c == ‘]‘) 99 { 100 if(GetTop(S) == ‘[‘) 101 { 102 S = Pop(S); 103 } 104 } 105 else if(c == ‘)‘) 106 { 107 if(GetTop(S) == ‘(‘) 108 { 109 S = Pop(S); 110 } 111 } 112 else if(c == ‘}‘) 113 { 114 if(GetTop(S) == ‘{‘) 115 { 116 S = Pop(S); 117 } 118 } 119 else 120 { 121 S = Push(S,c); 122 } 123 } 124 else 125 { 126 break; 127 } 128 } 129 130 if(StackEmpty(S)) 131 { 132 printf("YES!\n"); 133 } 134 else 135 { 136 printf("NO!\n"); 137 } 138 139 }
标签:
原文地址:http://www.cnblogs.com/yangsh1996/p/5377152.html