以下是一个使用链表和指针的 C 语言编程题:
题目:将一个无序整数数组按照升序排列,并存储在链表中。
要求:
1.定义一个链表节点结构体,包含一个整数和一个指向下一个节点的指针。
2.实现一个函数,将无序整数数组按照升序排列,并将结果存储在链表中。
3.实现一个函数,遍历链表并输出每个节点的值。
示例:
输入:
复制代码
c语言的冒泡排序算法
无序整数数组:[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
输出:
复制代码
链表节点值:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
以下是一个可能的实现:
c复制代码
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int value;
struct Node* next;
} Node;
// 插入节点到链表尾部
Node* insertNode(Node* head, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->value = value;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node* current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
return head;
}
// 将无序整数数组按照升序排列,并将结果存储在链表中
Node* sortAndBuildList(int arr[], int n) {
Node* head = NULL; // 头节点指针,初始为空
for (int i = 0; i < n; i++) { // 将数组元素插入链表尾部
head = insertNode(head, arr[i]);
}
// 对链表进行排序(可以使用快速排序、归并排序等算法)
// 这里简单起见,只使用了冒泡排序算法进行排序,实际应用中应使用更高效的排序算法。
Node* current = head;
while (current != NULL) { // 从链表头部开始遍历,依次比较相邻节点值,交换位置使链表有序。
Node* next = current->next; // 保存下一个节点指针,以便交换位置后能够正确指向下一个节点。
while (next != NULL && current->value > next->value) { // 比较相邻节点值,交换位置使链表有序。
int temp = current->value; // 临时保存当前节点值,以便交换位置后能够正确赋值。
current->value = next->value; // 将下一个节点值赋给当前节点。
next->value = temp; // 将当前节点值赋给下一个节点。
Node* tempNode = current; // 临时保存当前节点指针,以便交换位置后能够正确指向下一个节点。
current = next; // 将当前节点指针指向下一个节点。
next = tempNode->next; // 将下一个节点指针指向原当前节点的下一个节点。
}
current = next; // 将当前节点指针指向下一个节点。
}
return head; // 返回头节点指针。
}
// 遍历链表并输出每个节点的值。
void printList(Node* head) { // 从头节点开始遍历链表,输出每个节点的值。
while (head != NULL) { // 当头节点不为空时,继续遍历。
printf("%d ", head->value); // 输出当前节点值。
head = head->next; // 将头节点指针指向下一个节点。
} // 当头节点为空时,退出循环。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。