C++实现双向链表插入数据并自动排序
时间: 2024-05-13 08:15:18 浏览: 99
C++实现双向链表(List)
以下是基于双向链表的插入数据并自动排序的 C 代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
/* 双向链表结构体 */
typedef struct node {
int data;
struct node *next;
struct node *prev;
} Node;
/* 插入数据并自动排序 */
void insert(Node **head, int data) {
/* 创建新节点 */
Node *new_node = (Node*) malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
new_node->prev = NULL;
/* 如果链表为空,则新节点为头节点 */
if (*head == NULL) {
*head = new_node;
return;
}
/* 头节点数据比新节点数据大,新节点插入头部 */
if ((*head)->data > data) {
new_node->next = *head;
(*head)->prev = new_node;
*head = new_node;
return;
}
/* 查找新节点插入位置 */
Node *cur = *head;
while (cur->next != NULL && cur->next->data < data) {
cur = cur->next;
}
/* 插入新节点 */
new_node->next = cur->next;
new_node->prev = cur;
if (cur->next != NULL) {
cur->next->prev = new_node;
}
cur->next = new_node;
}
/* 打印链表 */
void print_list(Node *head) {
Node *cur = head;
while (cur != NULL) {
printf("%d ", cur->data);
cur = cur->next;
}
printf("\n");
}
/* 主函数 */
int main() {
Node *head = NULL;
insert(&head, 3);
insert(&head, 1);
insert(&head, 4);
insert(&head, 2);
insert(&head, 5);
print_list(head);
return 0;
}
```
在上述代码中,我们首先定义了双向链表的结构体,包括数据域 `data` 和指向前驱节点和后继节点的指针 `prev` 和 `next`。
然后,我们定义了一个 `insert` 函数来实现插入数据并自动排序。如果链表为空,则新节点为头节点;如果头节点数据比新节点数据大,则新节点插入头部;否则,我们遍历链表找到新节点的插入位置,并插入新节点。
最后,我们实现了一个 `print_list` 函数来打印链表,并在主函数中测试了我们的代码。
阅读全文