睡前练手,欢迎纠错。实现计算机底层括号匹配功能。
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define LEN 20
int flag;
typedef struct Stack {
char val;
Stack* next;
}Stack;
int Initstack(Stack *&S) {
S = (Stack*)malloc(sizeof(Stack));
if (S == NULL) {
return 0;
}
S->val = 0;
S->next = NULL;
return 1;
}
int Popstack(Stack *&S) {
Stack* newS;
if (Initstack(newS) == 0) {
return 0;
}
newS = S->next->next;
free(S->next);
S->next = newS;
return 1;
}
int Pushstack(Stack*& S, char e) {
Stack* newS;
if (Initstack(newS) == 0) {
return 0;
}
newS->next = S->next;
newS->val = e;
S->next = newS;
return 1;
}
int main() {
char str[LEN];
Stack* S;
int count;
count = 0;
while (true) {
gets_s(str);
Initstack(S);
while (count != strlen(str)) {
char current = *(str + count);
if ((current == '{') | (current == '(') | (current == '[')) {
Pushstack(S, current);
}
else {
if (S->next == NULL) {
//printf("Failed!\n");
flag = 0;
break;
//return 1;
}
char next = S->next->val;
if (((current == ']') & (next == '[')) | ((current == ')') & (next == '(')) | ((current == '}') & (next == '{'))) {
Popstack(S);
}
flag = 1;
}
count++;
}
count = 0;
if ((S->next == NULL) & (flag != 0)) {
printf("Success!\n");
}
else{
printf("Failed!\n");
}
free(S);
}
return 0;
}