用顺序栈实现数值转换(C语言)
时间: 2024-10-14 13:07:43 浏览: 36
用栈实现数值转换源代码
在C语言中,可以使用顺序栈(数组实现的栈)来实现数值转换,比如从二进制转换成十进制。这里是一个简单的步骤:
1. 定义一个栈结构体,通常包含一个整型数组作为存储元素的空间,以及栈顶指针top表示当前栈顶的位置。
```c
typedef struct {
int capacity;
int* stack;
int top;
} Stack;
```
2. 初始化栈,分配内存并设置top为-1(表示栈为空)。
```c
Stack* createStack(int size) {
Stack* s = (Stack*)malloc(sizeof(Stack));
s->capacity = size;
s->stack = malloc(size * sizeof(int));
s->top = -1;
return s;
}
```
3. 实现入栈操作(push),当输入的二进制位非零时,将该位置的值推入栈中。
```c
void push(Stack* s, int bit) {
if (s->top < s->capacity - 1) {
s->stack[++s->top] = bit;
}
}
```
4. 从栈中出栈,并累加计算得到的十进制数。遍历栈的过程相当于乘以2的幂次然后加上对应位的值。
```c
int popAndMultiply(Stack* s, int basePower, int* result) {
int value = 0;
while (s->top != -1 && basePower > 0) {
value += s->stack[s->top--] * pow(2, basePower--);
}
*result = value;
return value;
}
```
5. 主函数中,接收二进制字符串,逐位处理并将结果累加到最终的十进制数上。
```c
void binaryToDecimal(const char* binaryStr, int* decimalResult) {
Stack* stack = createStack(strlen(binaryStr));
for (int i = 0; binaryStr[i]; ++i) {
push(stack, binaryStr[i] - '0');
}
int decimal = 0;
while (!stack->is_empty()) {
decimal = popAndMultiply(stack, stack->top++, &decimal);
}
free(stack->stack);
free(stack);
*decimalResult = decimal;
}
```
阅读全文