C语言编写顺序栈的基本操作实现括号匹配
时间: 2024-10-27 19:03:38 浏览: 34
在C语言中,顺序栈通常用于实现括号匹配的问题,例如判断给定的字符串中的括号是否配对完整。这里是一个简单的顺序栈(仅用数组实现)的实现,包括基本的操作:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_STACK_SIZE 50
typedef struct {
char stack[MAX_STACK_SIZE];
int top;
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return (s->top == -1);
}
// 判断栈是否已满
int isFull(Stack *s) {
return (s->top == MAX_STACK_SIZE - 1);
}
// 入栈操作
void push(Stack *s, char c) {
if (!isFull(s)) {
s->stack[++s->top] = c;
} else {
printf("Stack overflow!\n");
}
}
// 出栈操作
char pop(Stack *s) {
if (!isEmpty(s)) {
return s->stack[s->top--];
} else {
printf("Stack underflow!\n");
return '\0'; // 返回空字符表示栈空
}
}
// 检查括号是否匹配
int checkBrackets(Stack *s, char* brackets) {
for (char c : brackets) {
if (c == '(' || c == '{' || c == '[') {
push(s, c);
} else {
if (isEmpty(s)) {
return 0; // 匹配失败
}
char last = pop(s);
if ((last == ')' && c != '(') ||
(last == '}' && c != '{') ||
(last == ']' && c != '[')) {
return 0; // 匹配错误
}
}
}
return isEmpty(s); // 如果所有括号都已出栈,说明匹配成功
}
int main() {
Stack s;
init(&s);
char input[] = "({[()]})";
if (checkBrackets(&s, input)) {
printf("Input string has balanced brackets.\n");
} else {
printf("Input string has unbalanced brackets.\n");
}
return 0;
}
```
在这个例子中,`checkBrackets`函数接收一个栈指针和一个包含括号的字符串。它遍历输入的每个字符,当遇到开括号就入栈,遇到闭括号则尝试从栈顶弹出最后一个对应的开括号进行匹配。如果栈在检查过程中变为空,则表示有未配对的括号。
阅读全文