用C语言建立顺序栈。完成栈的基本操作(初始化、入栈、出栈、读栈顶元素值、判断栈满栈空),并解决表达式括号匹配问题(()、{}、【】)等
时间: 2024-10-28 09:08:30 浏览: 74
在C语言中,我们可以使用数组作为基础结构来构建一个简单的顺序栈(也称为线性栈)。以下是创建和实现基本栈操作以及处理括号匹配问题的步骤:
```c
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 50
// 定义栈结构体
typedef struct {
int top; // 栈顶指针
char stack[MAX_SIZE]; // 存储数据的数组
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
bool is_empty(Stack *s) {
return s->top == -1;
}
// 判断栈是否已满
bool is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
void push(Stack *s, char item) {
if (is_full(s)) {
printf("Stack overflow!\n");
return;
}
s->stack[++s->top] = item;
}
// 出栈操作
char pop(Stack *s) {
if (is_empty(s)) {
printf("Stack underflow!\n");
return '\0';
}
return s->stack[s->top--];
}
// 读取栈顶元素但不移除
char peek(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty.\n");
return '\0';
}
return s->stack[s->top];
}
// 括号匹配检查函数
bool is_valid_parentheses(const char* expression) {
Stack s;
for (int i = 0; expression[i] != '\0'; ++i) {
switch(expression[i]) {
case '(': push(&s, '('); break;
case ')': case '{': case '}': case '[':
if (peek(&s) == '\0') return false; // 如果栈为空则不匹配
if (expression[i] == ')' && peek(&s) != '(' ||
expression[i] == ']' && peek(&s) != '[' ||
expression[i] == '}' && peek(&s) != '{') return false;
pop(&s);
}
}
return s.top == 0; // 如果剩余栈为空,则表示括号完全匹配
}
// 测试示例
int main() {
Stack s;
init(&s);
push(&s, '('); // 入栈左括号
push(&s, ')'); // 再次入栈右括号
if (!is_valid_parentheses("(())")) {
printf("Parentheses do not match.\n");
} else {
printf("Parentheses match.\n");
}
return 0;
}
```
在这个例子中,我们首先定义了一个栈的数据结构,包含了栈顶指针和存储数据的数组。然后实现了栈的基本操作,如初始化、入栈、出栈和读取栈顶元素,并提供了一个用于检查括号匹配的辅助函数。
阅读全文
相关推荐
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)