栈同时实现加减乘除和进制转换c语言代码
时间: 2023-10-26 11:10:39 浏览: 98
堆栈实现加减乘除,c代码
5星 · 资源好评率100%
以下是一个栈同时实现加减乘除和进制转换的 C 语言代码示例:
```c
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <ctype.h>
#define STACK_SIZE 100
// 定义栈结构体
struct stack {
int top;
int data[STACK_SIZE];
};
// 初始化栈
void init_stack(struct stack *s) {
s->top = -1;
}
// 判断栈是否为空
bool is_empty(struct stack *s) {
return s->top == -1;
}
// 判断栈是否已满
bool is_full(struct stack *s) {
return s->top == STACK_SIZE - 1;
}
// 入栈操作
void push(struct stack *s, int value) {
if (is_full(s)) {
printf("Stack Overflow\n");
return;
}
s->top++;
s->data[s->top] = value;
}
// 出栈操作
int pop(struct stack *s) {
if (is_empty(s)) {
printf("Stack Underflow\n");
return -1;
}
int value = s->data[s->top];
s->top--;
return value;
}
// 获取栈顶元素
int peek(struct stack *s) {
if (is_empty(s)) {
printf("Stack Underflow\n");
return -1;
}
return s->data[s->top];
}
// 判断字符是否为数字
bool is_digit(char c) {
return c >= '0' && c <= '9';
}
// 将字符表示的数字转换为整数
int char_to_int(char c) {
return c - '0';
}
// 将整数转换为字符表示的数字
char int_to_char(int n) {
return n + '0';
}
// 计算加法
int add(int a, int b) {
return a + b;
}
// 计算减法
int subtract(int a, int b) {
return a - b;
}
// 计算乘法
int multiply(int a, int b) {
return a * b;
}
// 计算除法
int divide(int a, int b) {
return a / b;
}
// 进制转换
void convert(int n, int base) {
struct stack s;
init_stack(&s);
while (n != 0) {
int remainder = n % base;
push(&s, remainder);
n /= base;
}
while (!is_empty(&s)) {
int digit = pop(&s);
if (digit < 10) {
printf("%c", int_to_char(digit));
} else {
printf("%c", 'A' + digit - 10);
}
}
}
int main() {
struct stack s;
init_stack(&s);
char input[STACK_SIZE];
printf("Enter expression: ");
scanf("%s", input);
int length = strlen(input);
int i = 0;
while (i < length) {
char c = input[i];
if (is_digit(c)) {
int value = char_to_int(c);
push(&s, value);
} else {
int b = pop(&s);
int a = pop(&s);
switch (c) {
case '+':
push(&s, add(a, b));
break;
case '-':
push(&s, subtract(a, b));
break;
case '*':
push(&s, multiply(a, b));
break;
case '/':
push(&s, divide(a, b));
break;
default:
printf("Invalid operator\n");
return 1;
}
}
i++;
}
int result = pop(&s);
printf("Result: %d\n", result);
printf("Binary: ");
convert(result, 2); // 转换为二进制
printf("\nHexadecimal: ");
convert(result, 16); // 转换为十六进制
printf("\n");
return 0;
}
```
该程序实现了一个简单的逆波兰表达式计算器,可以读入一个表达式并计算其结果,同时还可以将结果转换为二进制和十六进制。在这个示例中,我们使用一个数组来表示栈的数据,同时使用一个整数变量来跟踪栈顶的位置。我们还定义了一些辅助函数来执行栈操作,以及一些函数来执行加减乘除运算和进制转换。
阅读全文