1. 顺序栈的基本操作,创建、压栈、读栈顶、出栈,并利用 进行表达式求值c语言实现代码
时间: 2024-11-22 20:36:37 浏览: 18
顺序栈是一种基于数组实现的线性数据结构,主要用于暂时存储数据并支持基本的插入(入栈)和删除(出栈)操作。下面是一些基本操作:
1. **创建**(初始化栈):
```c
#include <stdio.h>
#define MAX_SIZE 100
struct Stack {
int top;
int data[MAX_SIZE];
};
void createStack(struct Stack* s) {
s->top = -1; // 初始化栈顶指针为空
}
```
2. **压栈**(元素入栈):
```c
void push(struct Stack* s, int value) {
if (s->top == MAX_SIZE - 1) {
printf("Stack is full.\n");
return;
}
s->data[++s->top] = value;
}
```
3. **读栈顶**(查看栈顶元素但不移除):
```c
int peekTop(struct Stack* s) {
if (s->top == -1) {
printf("Stack is empty.\n");
return -1;
}
return s->data[s->top];
}
```
4. **出栈**(弹出栈顶元素):
```c
void pop(struct Stack* s) {
if (s->top == -1) {
printf("Stack is empty.\n");
return;
}
s->top--;
}
```
5. **表达式求值**(假设栈里包含的是操作数和运算符,这里简化处理加法):
```c
int evaluateExpression(struct Stack* s) {
int num1, num2;
char op;
while (!isEmpty(s)) {
op = pop(s); // 弹出栈顶的操作符
num2 = pop(s);
num1 = pop(s);
switch (op) {
case '+':
push(s, num1 + num2);
break;
// 其他运算符处理类似
}
}
return isEmpty(s) ? pop(s) : -1; // 返回最终结果或错误信息
}
```
注意:这个代码片段是一个简化的版本,实际的表达式求值会更复杂,涉及到优先级和括号处理。以上代码仅适用于单级算术表达式。
阅读全文