c语言编写在非递减有序链表中插入一个元素(整型),使链表元素仍有序的函数(必须采用函数实现,否则不算成绩),并利用该函数建立一个非递减有序单向链表,之后输出这个有序的单链表。
时间: 2024-10-10 20:10:03 浏览: 29
在单向链表的某结点前插入一个结点-第10章 复杂数据类型
在C语言中,我们可以创建一个结构体`ListNode`来表示链表节点,并实现一个名为`insert_sorted`的函数来插入新元素,保持链表的非递减顺序。这里是一个简单的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 插入排序元素到链表函数
void insert_sorted(ListNode** head, int value) {
ListNode* new_node = (ListNode*)malloc(sizeof(ListNode));
if (*head == NULL || value <= (*head)->data) {
// 如果链表为空或者新值小于等于头节点,直接作为头节点
new_node->data = value;
new_node->next = *head;
*head = new_node;
} else {
ListNode* current = *head;
while (current->next != NULL && current->next->data < value) {
current = current->next;
}
// 找到适当的位置插入新节点
new_node->data = value;
new_node->next = current->next;
current->next = new_node;
}
}
// 创建并初始化一个空链表
ListNode* create_empty_list() {
return NULL;
}
// 添加元素到链表
void add_to_list(ListNode** head, int value) {
insert_sorted(head, value);
}
// 打印链表
void print_list(ListNode* head) {
printf("链表内容: ");
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
// 初始化链表
ListNode* list_head = create_empty_list();
// 添加一些元素
add_to_list(&list_head, 5);
add_to_list(&list_head, 2);
add_to_list(&list_head, 9);
add_to_list(&list_head, 1);
// 输出链表
print_list(list_head);
return 0;
}
```
在这个示例中,`create_empty_list()`用于创建一个空链表,`add_to_list()`函数则通过调用`insert_sorted()`函数添加新的非递减有序元素。`print_list()`函数用于打印链表的内容。
阅读全文