数据结构创建顺序栈的结构、出栈、入栈、判栈空、栈满、实现加、减、乘、除功能、能正确计算带有圆括号的表达式的·代码
时间: 2024-04-21 11:21:44 浏览: 87
顺序栈是一种基于数组实现的栈结构,它具有以下特点:
1. 结构:使用数组作为底层数据结构,通过一个指针top来指示栈顶元素的位置。
2. 入栈:将元素插入到栈顶,同时将top指针向上移动一位。
3. 出栈:将栈顶元素弹出,同时将top指针向下移动一位。
4. 判栈空:当top指针为-1时,表示栈为空。
5. 判栈满:当top指针等于数组的最大索引时,表示栈已满。
下面是一个用C语言实现顺序栈的代码示例:
```c
#include <stdio.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} SeqStack;
// 初始化栈
void initStack(SeqStack *stack) {
stack->top = -1;
}
// 入栈
void push(SeqStack *stack, int value) {
if (stack->top == MAX_SIZE - 1) {
printf("Stack is full.\n");
return;
}
stack->data[++stack->top] = value;
}
// 出栈
int pop(SeqStack *stack) {
if (stack->top == -1) {
printf("Stack is empty.\n");
return -1;
}
return stack->data[stack->top--];
}
// 判栈空
int isEmpty(SeqStack *stack) {
return stack->top == -1;
}
// 判栈满
int isFull(SeqStack *stack) {
return stack->top == MAX_SIZE - 1;
}
// 实现加、减、乘、除功能
int calculate(int a, int b, char operator) {
switch (operator) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return a / b;
default:
printf("Invalid operator.\n");
return 0;
}
}
// 计算带有圆括号的表达式
int calculateExpression(char *expression) {
SeqStack stack;
initStack(&stack);
int i = 0;
while (expression[i] != '\0') {
if (expression[i] >= '0' && expression[i] <= '9') {
push(&stack, expression[i] - '0');
} else if (expression[i] == ')') {
int b = pop(&stack);
int a = pop(&stack);
char operator = pop(&stack);
int result = calculate(a, b, operator);
push(&stack, result);
} else if (expression[i] != '(') {
push(&stack, expression[i]);
}
i++;
}
return pop(&stack);
}
int main() {
char expression[] = "((1+2)*(3-4))/5";
int result = calculateExpression(expression);
printf("Result: %d\n", result);
return 0;
}
```
阅读全文