有 5 个数:1,5,3,2,4,按从小到大的顺序依次插入到一个非循环的双向链表中,用c语言程序写出来
时间: 2024-09-09 11:11:57 浏览: 47
在 C 语言中,我们可以创建一个结构体表示链表节点,并编写一个函数来按照升序将数字插入到链表中。首先,我们定义链表节点结构:
```c
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构
typedef struct Node {
int data;
struct Node* next;
struct Node* prev; // 双向链表需要前驱指针
} Node;
// 初始化一个新的链表节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = value;
newNode->next = NULL;
newNode->prev = NULL;
}
return newNode;
}
// 插入节点并保持链表有序
void insertInOrder(Node** head, int value) {
if (*head == NULL || (*head)->data > value) {
Node* newNode = createNode(value);
newNode->next = *head;
if (*head != NULL) {
(*head)->prev = newNode;
}
*head = newNode;
} else {
Node* current = *head;
while (current->next != NULL && current->next->data < value) {
current = current->next;
}
if (current->next != NULL) {
Node* newNode = createNode(value);
newNode->prev = current;
newNode->next = current->next;
current->next->prev = newNode;
} else {
Node* newNode = createNode(value);
newNode->prev = current;
newNode->next = NULL;
current->next = newNode;
}
}
}
int main() {
Node* head = NULL;
// 数组里的数据
int numbers[] = {1, 5, 3, 2, 4};
for (int i = 0; i < 5; i++) {
insertInOrder(&head, numbers[i]);
}
// 打印链表内容
Node* temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
return 0;
}
```
这个程序首先初始化一个空链表,然后遍历数组,对每个元素调用 `insertInOrder` 函数将其插入到链表中保持有序。最后,它会打印出链表的所有元素。
阅读全文