请用c++语言按照下列要求实现一段代码 代码内容: 假设表达式中允许包含两种()和[],其嵌套的顺序任意,即([]())或[([][])]等都为正确的格式,而[(])为不正确的格式。利用栈编程序检验表达式中的括号是否合法。 代码要求: 1.代码应包含栈的基本操作:初始化,入栈,出栈等。 2.每读入一个括号,若是右括号,则或者是置于栈顶的左括号得以消解,或者是不合法的情况;若是左括号,则直接入栈。 3.可用顺序栈或者链栈实现。
时间: 2023-05-25 15:01:09 浏览: 46
以下是根据要求实现的 C 语言代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 栈的最大大小
typedef struct {
char data[MAXSIZE]; // 栈的数据域
int top; // 栈顶指针
} Stack;
void InitStack(Stack *s) {
s->top = -1;
}
void Push(Stack *s, char c) {
if (s->top == MAXSIZE - 1) {
printf("Stack full.\n");
exit(EXIT_FAILURE);
} else {
s->top++;
s->data[s->top] = c;
}
}
char Pop(Stack *s) {
if (s->top == -1) {
printf("Stack empty.\n");
exit(EXIT_FAILURE);
} else {
char c = s->data[s->top];
s->top--;
return c;
}
}
int IsEmpty(Stack *s) {
return s->top == -1;
}
int IsValidExp(char *exp) {
Stack s;
InitStack(&s); // 初始化栈
for (int i = 0; exp[i] != '\0'; i++) {
if (exp[i] == '(' || exp[i] == '[') {
Push(&s, exp[i]); // 左括号入栈
} else if (exp[i] == ')') {
if (IsEmpty(&s) || Pop(&s) != '(') {
return 0; // 右括号与栈顶不匹配,不合法
}
} else if (exp[i] == ']') {
if (IsEmpty(&s) || Pop(&s) != '[') {
return 0; // 右括号与栈顶不匹配,不合法
}
} // 若为其他字符,则忽略
}
return IsEmpty(&s); // 括号匹配完毕后,栈为空则合法
}
int main() {
char exp[MAXSIZE];
printf("Enter expression (max %d characters):\n", MAXSIZE - 1);
fgets(exp, MAXSIZE, stdin); // 从标准输入中读入表达式
if (IsValidExp(exp)) {
printf("Valid expression.\n");
} else {
printf("Invalid expression.\n");
}
return 0;
}