帮我用c语言写这个实验的代码
时间: 2024-10-18 14:10:24 浏览: 18
C语言系列实验报告代码
5星 · 资源好评率100%
编写C语言代码以实现栈的基本操作和括号匹配实验可能会涉及到以下几个部分:
```c
#include <stdio.h>
#include <stdlib.h> // 包含malloc和free库,用于动态内存分配
// 定义栈的结构体
typedef struct {
int* elements; // 存储栈内整数的指针
int top; // 栈顶元素的索引
int capacity; // 栈的最大容量
} Stack;
// 初始化栈
Stack* create_stack(int size) {
if (size <= 0) return NULL;
Stack* stack = (Stack*) malloc(sizeof(Stack));
stack->elements = (int*) malloc(size * sizeof(int));
stack->top = -1;
stack->capacity = size;
return stack;
}
// 入栈
void push(Stack* stack, int value) {
if (stack->top == stack->capacity - 1) { // 检查是否已满
printf("Stack is full.\n");
return;
}
stack->top++;
stack->elements[stack->top] = value;
}
// 出栈
int pop(Stack* stack) {
if (stack->top == -1) { // 检查是否为空
printf("Stack is empty.\n");
return -1;
}
int value = stack->elements[stack->top];
stack->top--;
return value;
}
// 查看栈顶
int peek(Stack* stack) {
if (stack->top == -1) return -1;
return stack->elements[stack->top];
}
// 判断栈是否为空
int is_empty(Stack* stack) {
return stack->top == -1;
}
// 括号匹配
int is_balanced(char* str) {
Stack* stack = create_stack(strlen(str));
for (int i = 0; str[i]; i++) {
switch (str[i]) {
case '(': push(stack, '('); break;
case ')': {
if (is_empty(stack)) return 0; // 如果空栈,不匹配
if (peek(stack) != '(') return 0; // 左括号和右括号不匹配
pop(stack);
} break;
default: continue; // 对于其他字符忽略
}
}
return is_empty(stack); // 如果栈为空,说明所有括号都匹配了
}
// 主函数
int main() {
char str[] = "((()))";
if (is_balanced(str)) {
printf("The parentheses are balanced.\n");
} else {
printf("The parentheses are not balanced.\n");
}
return 0;
}
```
上述代码首先定义了一个栈结构,并实现了初始化、入栈、出栈、查看栈顶、判断栈是否为空以及括号匹配的功能。`is_balanced`函数会遍历输入的字符串,每遇到左括号就入栈,遇到右括号则检查是否与栈顶的左括号匹配。如果栈为空或栈顶不是左括号,则不匹配。最后,在主函数中测试括号匹配功能。
请注意,这只是一个基本的示例,实际项目中可能还需要添加错误处理和内存释放的代码。如果你需要更多关于这个实验的代码细节,或者有特定的疑问,随时告诉我。
阅读全文