C语言顺序栈实现十进制转十六进制
#include <stdio.h>
#include <stdlib.h>
typedef int SElemType; // 定义栈元素类型为整型
typedef struct {
SElemType* data; // 栈的元素数组指针
int top; // 栈顶指针
int maxSize; // 栈的最大容量
} SqStack;
// 初始化栈
void InitStack(SqStack* s, int maxSize) {
s->data = (SElemType*)malloc(sizeof(SElemType) * maxSize);
s->top = -1;
s->maxSize = maxSize;
}
// 入栈
void Push(SqStack* s, SElemType x) {
if (s->top == s->maxSize - 1) {
return; // 栈满,无法入栈
}
s->top++;
s->data[s->top] = x;
}
// 出栈
SElemType Pop(SqStack* s) {
if (s->top == -1) {
return -1; // 栈空,无法出栈
}
SElemType x = s->data[s->top];
s->top--;
return x;
}
// 十进制转换为十六进制
void DecimalToHexadecimal(unsigned n) {
SqStack s;
InitStack(&s, 100);
// 除以16取余数,将余数入栈,直到商为0
while (n != 0) {
Push(&s, n % 16);
n = n / 16;
}
// 出栈并打印每个十六进制数位
while (s.top != -1) {
SElemType x = Pop(&s);
if (x < 10) {
printf('%d', x);
} else {
printf('%c', x - 10 + 'A');
}
}
printf('\n');
}
int main() {
unsigned n;
scanf('%u', &n);
DecimalToHexadecimal(n);
return 0;
}
输入:
10
输出:
A
解释:
代码实现了一个DecimalToHexadecimal函数,该函数接受一个无符号整数作为输入,并使用顺序栈将其转换为十六进制数。
- 首先,初始化一个空栈。
- 循环执行以下操作,直到输入的十进制数变为0:
- 计算十进制数除以16的余数。
- 将余数压入栈中。
- 将十进制数除以16。
- 循环执行以下操作,直到栈为空:
- 从栈中弹出一个元素。
- 如果元素小于10,则直接打印该元素。
- 如果元素大于等于10,则将其转换为相应的十六进制字符('A' - 'F')并打印。
例如,对于输入10,程序执行以下步骤:
- 10 % 16 = 10,将10压入栈中。
- 10 / 16 = 0,循环结束。
- 从栈中弹出10,由于10大于等于10,将其转换为'A'并打印。
因此,最终输出为'A'。
原文地址: https://www.cveoy.top/t/topic/OP0 著作权归作者所有。请勿转载和采集!