本文共 1774 字,大约阅读时间需要 5 分钟。
typedef char DataType;typedef struct Stack { DataType* arr; int size; int capacity;} Stack;//初始化void StackInit(Stack* st, int n) { st->size = 0; st->capacity = n; st->arr = (DataType*)malloc(sizeof(DataType) * n);}//进栈void StackPush(Stack* st, DataType data) { if (st->size >= st->capacity) { st->capacity += st->capacity; st->arr = (DataType*)realloc(st->arr, st->capacity * sizeof(DataType)); } st->arr[st->size++] = data;}//出栈void StackPop(Stack* st) { if (st->size == 0) { return; } st->size--;}//得到栈顶元素DataType getStackTop(Stack* st) { return st->arr[st->size - 1];}//得到栈的大小int getStackSize(Stack* st) { return st->size;}//判空int StackEmpty(Stack* st) { return st->size == 0 ? 1 : 0;}//销毁void StackDestroy(Stack* st) { free(st->arr); st->arr = NULL; st->capacity = 0; st->size = 0;}//字符串有效性检查bool isValid(char* s) { Stack st; StackInit(&st, 10); char map[3][2] = { {'(', ')'}, {'[', ']'}, {'{', '}' } }; while (*s != '\0') { int foundLeft = 0; for (int i = 0; i < 3; i++) { if (*s == map[i][0]) { foundLeft = 1; StackPush(&st, *s); s++; break; } } if (!foundLeft) { if (StackEmpty(&st)) { return false; } for (int j = 0; j < 3; j++) { if (*s == map[j][1]) { char top = getStackTop(&st); if (top == map[j][0]) { StackPop(&st); s++; break; } else { return false; } } } } } return StackEmpty(&st) == 1;} 转载地址:http://uunv.baihongyu.com/