我想使用栈来编写这个程序
时间: 2023-05-12 07:02:40 浏览: 55
非常好的问题!使用栈来编写程序是一种非常常见的编程技巧。在使用栈的时候,我们可以使用 push() 函数将元素压入栈中,使用 pop() 函数将元素从栈中弹出。同时,我们还可以使用 peek() 函数来查看栈顶元素,使用 isEmpty() 函数来判断栈是否为空。如果你需要更多关于栈的信息,可以参考相关的编程教程。
相关问题
不使用栈来编写一个算术表达式求值的c语言程序
可以使用递归来实现算术表达式求值,以下是一个示例程序:
```c
#include <stdio.h>
int eval(char *expr, int *pos) {
int num = 0;
char op = '+';
while (expr[*pos] != '\0' && op != ')') {
if (expr[*pos] >= '0' && expr[*pos] <= '9') {
num = num * 10 + (expr[*pos] - '0');
} else if (expr[*pos] == '(') {
(*pos)++;
num = eval(expr, pos);
} else if (expr[*pos] == '+' || expr[*pos] == '-' || expr[*pos] == '*' || expr[*pos] == '/') {
op = expr[*pos];
} else if (expr[*pos] == ')') {
(*pos)++;
break;
}
(*pos)++;
}
if (op == '+') {
return num;
} else if (op == '-') {
return -num;
} else if (op == '*') {
return num * eval(expr, pos);
} else if (op == '/') {
return eval(expr, pos) / num;
}
}
int main() {
char expr[100];
printf("Enter an arithmetic expression: ");
scanf("%s", expr);
int pos = 0;
int result = eval(expr, &pos);
printf("Result: %d\n", result);
return 0;
}
```
该程序读入一个算术表达式,然后使用递归进行求值。在递归函数中,我们遍历表达式,根据不同的字符进行不同的操作。如果遇到数字,我们将其加入当前数字中;如果遇到左括号,我们递归地求解括号内的表达式;如果遇到运算符或右括号,我们根据前面的运算符进行相应的计算。最终,我们返回计算结果。
需要注意的是,这个程序没有进行任何错误检查,所以不保证在所有情况下都能正确求解表达式。
C语言用栈结构编写一个程序
以下是一个使用栈结构实现四则运算的C语言程序:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int top;
float data[MAX_SIZE];
} Stack;
void init(Stack *s) {
s->top = -1;
}
int is_empty(Stack *s) {
return s->top == -1;
}
int is_full(Stack *s) {
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, float x) {
if (is_full(s)) {
printf("Stack is full\n");
exit(1);
}
s->top++;
s->data[s->top] = x;
}
float pop(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty\n");
exit(1);
}
float x = s->data[s->top];
s->top--;
return x;
}
float peek(Stack *s) {
if (is_empty(s)) {
printf("Stack is empty\n");
exit(1);
}
return s->data[s->top];
}
int is_op(char c) {
return c == '+' || c == '-' || c == '*' || c == '/';
}
int precedence(char op) {
if (op == '+' || op == '-') {
return 1;
} else if (op == '*' || op == '/') {
return 2;
} else {
return 0;
}
}
float eval(char *expr) {
Stack num_stack;
Stack op_stack;
init(&num_stack);
init(&op_stack);
int i = 0;
while (expr[i] != '\0') {
if (isdigit(expr[i])) {
float num = 0;
while (isdigit(expr[i])) {
num = num * 10 + (expr[i] - '0');
i++;
}
push(&num_stack, num);
} else if (is_op(expr[i])) {
while (!is_empty(&op_stack) && precedence(peek(&op_stack)) >= precedence(expr[i])) {
float num2 = pop(&num_stack);
float num1 = pop(&num_stack);
char op = pop(&op_stack);
float result;
switch (op) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
}
push(&num_stack, result);
}
push(&op_stack, expr[i]);
i++;
} else {
i++;
}
}
while (!is_empty(&op_stack)) {
float num2 = pop(&num_stack);
float num1 = pop(&num_stack);
char op = pop(&op_stack);
float result;
switch (op) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
}
push(&num_stack, result);
}
return pop(&num_stack);
}
int main() {
char expr[] = "3+4*5-2/3";
float result = eval(expr);
printf("%s = %.2f\n", expr, result);
return 0;
}
```
该程序使用两个栈,一个用于存储数字,另一个用于存储运算符。它可以计算带有加减乘除运算符的表达式。该程序中还实现了栈的基本操作,如初始化、判断栈是否为空、判断栈是否已满、入栈、出栈、查看栈顶元素等。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)