使用c语言,运用栈的知识
时间: 2024-03-22 10:39:21 浏览: 15
以下是使用 C 语言,通过栈实现任意进制转换为十进制的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct {
int top;
int capacity;
int* array;
} Stack;
Stack* createStack(int capacity) {
Stack* stack = (Stack*) malloc(sizeof(Stack));
stack->top = -1;
stack->capacity = capacity;
stack->array = (int*) malloc(capacity * sizeof(int));
return stack;
}
int isFull(Stack* stack) {
return stack->top == stack->capacity - 1;
}
int isEmpty(Stack* stack) {
return stack->top == -1;
}
void push(Stack* stack, int item) {
if (isFull(stack)) {
printf("Stack is full!\n");
return;
}
stack->array[++stack->top] = item;
}
int pop(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty!\n");
return -1;
}
return stack->array[stack->top--];
}
int peek(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty!\n");
return -1;
}
return stack->array[stack->top];
}
int any2dec(char* num, int base) {
int dec = 0;
int len = strlen(num);
Stack* stack = createStack(len);
for (int i = 0; i < len; i++) {
int digit = (num[i] >= '0' && num[i] <= '9') ? num[i] - '0' : num[i] - 'A' + 10;
push(stack, digit);
}
int power = 0;
while (!isEmpty(stack)) {
int digit = pop(stack);
dec += digit * pow(base, power++);
}
return dec;
}
int main() {
char num[100];
int base;
printf("Enter a number in any base: ");
scanf("%s", num);
printf("Enter the base of the number: ");
scanf("%d", &base);
int dec = any2dec(num, base);
printf("The decimal equivalent of %s in base %d is %d\n", num, base, dec);
return 0;
}
```
在代码中,我们首先定义了一个栈的结构体,包括栈顶指针、容量和数组等成员。然后实现了栈的常用操作函数,包括创建栈、判满、判空、入栈、出栈和取栈顶元素等。接着,我们实现了任意进制转换为十进制的函数 any2dec,其中我们使用栈来存储输入的任意进制数,每次将栈顶元素弹出并按照公式计算权重,最终得到十进制数。在 main 函数中,我们输入待转换的任意进制数和进制,调用 any2dec 函数得到转换结果并输出。