用C语言设计链表,输入一个十进制数,并把它转换成十六进制数,存进链表里
时间: 2023-06-27 16:06:21 浏览: 84
好的,下面是用C语言设计链表,输入一个十进制数,并把它转换成十六进制数,存进链表里的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data; // 存储数据
struct Node *next; // 指向下一个节点的指针
} Node;
// 定义链表头节点指针
Node *head = NULL;
// 将十进制数转换成十六进制数
char* convertToHex(int num) {
char *hex = (char*) malloc(sizeof(char) * 10); // 分配内存空间
int i = 0;
while (num != 0) {
int remainder = num % 16;
if (remainder < 10) {
hex[i++] = remainder + 48;
} else {
hex[i++] = remainder + 55;
}
num /= 16;
}
hex[i] = '\0';
strrev(hex); // 反转字符串
return hex;
}
// 在链表尾部插入节点
void insertNode(int data) {
Node *newNode = (Node*) malloc(sizeof(Node)); // 创建新节点
newNode->data = data; // 设置数据
newNode->next = NULL; // 设置下一个节点为 NULL
if (head == NULL) {
head = newNode; // 如果链表为空,则将新节点作为头节点
} else {
Node *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode; // 在链表尾部插入新节点
}
}
// 打印链表
void printList() {
Node *current = head;
while (current != NULL) {
printf("%s ", convertToHex(current->data)); // 将十进制数转换成十六进制数并打印
current = current->next;
}
printf("\n");
}
int main() {
int n;
printf("请输入一个十进制数:");
scanf("%d", &n);
while (n > 0) {
int remainder = n % 10;
insertNode(remainder); // 将余数插入链表
n /= 10;
}
printf("转换成十六进制数为:");
printList(); // 打印链表
return 0;
}
```
代码中,我们首先定义了一个链表节点结构体 `Node`,其中包含一个 `int` 类型的数据和一个指向下一个节点的指针。然后定义了一个链表头节点指针 `head`,开始时为 `NULL`。
接着,我们定义了一个函数 `convertToHex`,将十进制数转换成十六进制数并返回字符串类型。在该函数中,我们使用了 `malloc` 函数来动态分配内存空间,以存储转换后的十六进制数。
然后,我们定义了一个函数 `insertNode`,用于在链表尾部插入节点。在该函数中,我们先创建一个新节点,然后判断链表是否为空,如果为空则将新节点作为头节点,否则遍历链表至尾部,将新节点插入到尾部。
接着,我们定义了一个函数 `printList`,用于打印链表中的数据。在该函数中,我们遍历链表中的每个节点,将其数据转换成十六进制数并打印。
最后,我们在 `main` 函数中,先从用户输入中获取一个十进制数 `n`,然后使用循环将该数每一位上的余数依次插入链表中。最后调用 `printList` 函数,将链表中的数据打印出来。
阅读全文