C语言输入一串括号包含以下括号种类:(、)、[、]、{、}。试利用顺序栈或链栈检查输入括号序列的匹配情况;
时间: 2023-10-30 22:07:13 浏览: 103
以下是使用顺序栈实现括号匹配的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 栈的最大容量
typedef struct {
char data[MAX_SIZE]; // 栈的数组
int top; // 栈顶指针
} Stack;
// 初始化栈
void initStack(Stack *stack) {
stack->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *stack) {
return stack->top == -1;
}
// 判断栈是否已满
int isFull(Stack *stack) {
return stack->top == MAX_SIZE - 1;
}
// 入栈
void push(Stack *stack, char c) {
if (isFull(stack)) {
printf("Stack overflow\n");
exit(1);
}
stack->top++;
stack->data[stack->top] = c;
}
// 出栈
char pop(Stack *stack) {
if (isEmpty(stack)) {
printf("Stack underflow\n");
exit(1);
}
char c = stack->data[stack->top];
stack->top--;
return c;
}
// 括号匹配检查函数
int checkBrackets(char *str) {
Stack stack;
initStack(&stack);
char c;
for (int i = 0; str[i] != '\0'; i++) {
switch (str[i]) {
case '(':
case '[':
case '{':
push(&stack, str[i]);
break;
case ')':
if (isEmpty(&stack) || pop(&stack) != '(') {
return 0; // 括号不匹配
}
break;
case ']':
if (isEmpty(&stack) || pop(&stack) != '[') {
return 0;
}
break;
case '}':
if (isEmpty(&stack) || pop(&stack) != '{') {
return 0;
}
break;
default:
break;
}
}
return isEmpty(&stack); // 如果栈为空,说明括号匹配;否则不匹配
}
int main() {
char str[MAX_SIZE];
printf("Please enter a string of brackets: ");
scanf("%s", str);
if (checkBrackets(str)) {
printf("Brackets match.\n");
} else {
printf("Brackets do not match.\n");
}
return 0;
}
```
以下是使用链栈实现括号匹配的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
char data;
struct Node *next;
} Node, *Stack;
// 初始化栈
void initStack(Stack *stack) {
*stack = NULL;
}
// 判断栈是否为空
int isEmpty(Stack stack) {
return stack == NULL;
}
// 入栈
void push(Stack *stack, char c) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = c;
node->next = *stack;
*stack = node;
}
// 出栈
char pop(Stack *stack) {
if (isEmpty(*stack)) {
printf("Stack underflow\n");
exit(1);
}
char c = (*stack)->data;
Node *node = *stack;
*stack = (*stack)->next;
free(node);
return c;
}
// 括号匹配检查函数
int checkBrackets(char *str) {
Stack stack;
initStack(&stack);
char c;
for (int i = 0; str[i] != '\0'; i++) {
switch (str[i]) {
case '(':
case '[':
case '{':
push(&stack, str[i]);
break;
case ')':
if (isEmpty(stack) || pop(&stack) != '(') {
return 0; // 括号不匹配
}
break;
case ']':
if (isEmpty(stack) || pop(&stack) != '[') {
return 0;
}
break;
case '}':
if (isEmpty(stack) || pop(&stack) != '{') {
return 0;
}
break;
default:
break;
}
}
return isEmpty(stack); // 如果栈为空,说明括号匹配;否则不匹配
}
int main() {
char str[MAX_SIZE];
printf("Please enter a string of brackets: ");
scanf("%s", str);
if (checkBrackets(str)) {
printf("Brackets match.\n");
} else {
printf("Brackets do not match.\n");
}
return 0;
}
```
阅读全文