
1.有效的括号关于这道简单档的编程题遇到了以下问题1.思路不清晰关于左括号进右括号出栈有误区经过反复的测试终于捋清楚其中的含义2.关于为什么STTOP出错的问题因为当栈里没有元素时也就是没有左括号时右括号就没有与之对应的左括号并且STTOP函数中进行了ps-top的判空导致了执行错误3.关于是否直接return true如果直接return true 会导致测试用例中只有一个左括号时会因为可以顺利执行代码直接return true 会忽略只有一个左括号却没有与之配对的右括号// 初始化栈 typedef char STDataType; typedef struct Stack { STDataType* _a; int _top; // 栈顶 int _capacity; // 容量 }Stack; // 初始化栈 void StackInit(Stack* ps); // 入栈 void StackPush(Stack* ps, STDataType data); // 出栈 void StackPop(Stack* ps); // 获取栈顶元素 STDataType StackTop(Stack* ps); // 获取栈中有效元素个数 int StackSize(Stack* ps); // 检测栈是否为空如果为空返回非零结果如果不为空返回0 int StackEmpty(Stack* ps); // 销毁栈 void StackDestroy(Stack* ps); void StackInit(Stack* ps) { assert(ps); ps-_a NULL; ps-_capacity 0; ps-_top 0; }//销毁栈 void StackDestroy(Stack* ps) { assert(ps); free(ps-_a); ps-_a NULL; ps-_capacity ps-_top 0; } //先得判断空间是否有余若没有空间就扩容 void StackPush(Stack* ps, STDataType data) { assert(ps); //先得扩容 if (ps-_capacity ps-_top) { int newcapacity ps-_capacity 0 ? 4 : ps-_capacity * 2; STDataType* tmp (STDataType*)realloc(ps-_a, newcapacity * sizeof(STDataType)); if(tmpNULL) { perror(realloc); exit; } ps-_a tmp; ps-_capacity newcapacity; } ps-_a[ps-_top] data; ps-_top; } void StackPop(Stack* ps) { assert(ps); ps-_top--; } // 获取栈顶元素 STDataType StackTop(Stack* ps) { assert(ps); assert(ps-_top 0); return ps-_a[ps-_top-1]; } // 检测栈是否为空如果为空返回非零结果如果不为空返回0 int StackEmpty(Stack* ps) { assert(ps); return ps-_top 0; } bool isValid(char* s) { Stack st; StackInit(st); while(*s) { if(*s(||*s[||*s{) { StackPush(st,*s); } else//出栈 { if(StackEmpty(st)) { return false; } char topStackTop(st); StackPop(st); if((top(*s!))||(top{*s!})||(top[*s!])) { return false; } } s; } bool retStackEmpty(st); StackDestroy(st); return ret; }