用C语言写一个可以处理小括号的函数
时间: 2023-06-13 16:02:42 浏览: 45
可以使用栈来处理小括号,以下是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char data;
struct node* next;
} Node;
typedef struct stack {
Node* top;
} Stack;
Stack* createStack() {
Stack* stack = (Stack*)malloc(sizeof(Stack));
stack->top = NULL;
return stack;
}
void push(Stack* stack, char data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = stack->top;
stack->top = newNode;
}
char pop(Stack* stack) {
if (stack->top == NULL) {
printf("Stack is empty.\n");
return '\0';
}
Node* temp = stack->top;
char data = temp->data;
stack->top = temp->next;
free(temp);
return data;
}
int isBalanced(char* str) {
Stack* stack = createStack();
for (int i = 0; str[i] != '\0'; ++i) {
if (str[i] == '(') {
push(stack, str[i]);
} else if (str[i] == ')') {
char top = pop(stack);
if (top != '(') {
return 0;
}
}
}
return stack->top == NULL;
}
int main() {
char str1[] = "((())())";
char str2[] = "(()))";
printf("%s is %s\n", str1, isBalanced(str1) ? "balanced" : "not balanced");
printf("%s is %s\n", str2, isBalanced(str2) ? "balanced" : "not balanced");
return 0;
}
```
在这个例子中,我们使用了一个栈来处理小括号。如果遇到左括号,我们将其压入栈中;如果遇到右括号,我们将栈顶元素弹出并检查是否与左括号匹配。如果匹配,我们继续处理;否则,我们返回不平衡的结果。在处理完字符串后,我们检查栈是否为空,以确定字符串是否平衡。