typedef char Item;
typedef struct stack_type* Stack;
struct node
{
Item val;
struct node* next;
};
struct stack_type
{
struct node* top;
};
static void terminate(const char* message)
{
printf("%s\n", message);
exit(EXIT_FAILURE);
}
bool is_empty(Stack s)
{
if (s->top == NULL)
{
return true;
}
else
{
return false;
}
}
Stack create(void)
{
Stack s = malloc(sizeof(struct stack_type));
if (s == NULL)
{
printf("Error: malloc failed in create.\n");
exit(EXIT_FAILURE);
}
s->top = NULL;
return s;
}
void push(Stack s, Item n)
{
struct node* new_node = malloc(sizeof(struct node));
if (new_node == NULL)
{
terminate("Error: malloc failed in push.");
}
new_node->val = n;
new_node->next = s->top;
s->top = new_node;
}
Item top(Stack s)
{
return s->top->val;
}
Item pop(Stack s)
{
struct node* old_top;
Item n;
if (is_empty(s) == true)
{
terminate("Error in pop: stack is empty.");
}
old_top = s->top;
n = old_top->val;
s->top = old_top->next;
free(old_top);
return n;
}
//函数主体
bool isValid(char* s)
{
int n = strlen(s);
if (n % 2 == 1)
{
return false;
}
Stack S = create();
for (int j = 0; s[j] != '\0'; j++)
{
if (s[j] == '(' || s[j] == '[' || s[j] == '{')
{
push(S, s[j]);
}
else
{
if (s[j] == ')' && is_empty(S) == false && top(S) == '(')
{
pop(S);
}
else if (s[j] == ']' && is_empty(S) == false && top(S) == '[')
{
pop(S);
}
else if (s[j] == '}' && is_empty(S) == false && top(S) == '{')
{
pop(S);
}
else
{
return false;
}
}
}
if (is_empty(S) == false)
{
return false;
}
return true;
}
20. 有效的括号
最新推荐文章于 2024-06-13 20:56:43 发布