写数据结构(C语言)代码1. 定义栈的存储结构(顺序栈或者链栈均可)。 2. 在所定义的栈存储结构上实现栈的初始化、入栈、出栈、判断栈空以及查找栈顶等基本操作。 3. 基于栈基本操作的实现,设计主函数实现表达式中括号匹配问题的检验。
时间: 2024-10-21 22:04:22 浏览: 40
为了演示顺序栈的C语言实现,我们将定义一个顺序栈结构并实现基本操作。这里以顺序栈为例:
```c
// 顺序栈的存储结构
typedef struct Stack {
int* data; // 存储元素的数组
int top; // 栈顶指针,指向栈顶元素的下一个位置
int capacity; // 栈的最大容量
} Stack;
// 初始化顺序栈
void init(Stack* s, int size) {
s->data = malloc(size * sizeof(int));
if (!s->data) { // 检查内存分配是否成功
printf("Memory allocation failed.\n");
return;
}
s->top = -1;
s->capacity = size;
}
// 入栈操作
void push(Stack* s, int value) {
if (s->top == s->capacity - 1) { // 如果栈满
printf("Stack overflow.\n");
return;
}
s->data[++s->top] = value;
}
// 出栈操作
int pop(Stack* s) {
if (s->top == -1) { // 如果栈空
printf("Stack underflow.\n");
return -1; // 返回错误代码
}
return s->data[s->top--];
}
// 判断栈是否为空
int isEmpty(Stack* s) {
return s->top == -1;
}
// 查找栈顶元素但不删除
int peek(Stack* s) {
return s->top == -1 ? -1 : s->data[s->top];
}
```
对于表达式中括号匹配问题的检验,可以借助上述栈来辅助。下面是一个简单的算法实现:
```c
bool checkBrackets(char* expr) {
Stack brackets;
init(&brackets, 2); // 初始化栈,假设最多嵌套两层
for (int i = 0; expr[i]; ++i) {
if (expr[i] == '(') {
push(&brackets, '(');
} else if (expr[i] == ')') {
if (isEmpty(&brackets)) {
return false; // 结束符出现在开始符之前,不匹配
}
if (pop(&brackets) != '(') {
return false; // 匹配失败
}
}
}
return isEmpty(&brackets); // 如果栈为空,表示括号完全匹配
}
```
阅读全文