线性表中数据元素的值为整数,若采用带头节点的单链表结构,则创建一个有序的单链表 写出c语言代码
时间: 2024-09-30 13:03:37 浏览: 34
数据结构 两个有序线性表的归并算法 西南交通大学
在C语言中,创建一个带头结点的有序单链表并插入新元素,通常会涉及到链表的初始化、比较和插入操作。这里是一个基本的例子:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data; // 数据域存储整数值
struct Node* next; // 指针域指向下一个节点
} Node;
// 创建一个新节点并分配内存
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 插入一个节点保持有序(升序)
void insertSorted(Node** head, int value) {
Node* current = *head;
if (*head == NULL || value <= current->data) {
// 如果头节点为空或者新值小于等于当前节点,直接插入
newNode = createNode(value);
if (newNode != NULL) {
newNode->next = *head;
*head = newNode;
}
} else {
// 否则遍历链表找到合适的位置插入
while (current->next != NULL && current->next->data < value) {
current = current->next;
}
if (current->next != NULL) {
newNode = createNode(value);
if (newNode != NULL) {
newNode->next = current->next;
current->next = newNode;
}
} else {
// 链表末尾需要插入,添加新节点
newNode = createNode(value);
if (newNode != NULL) {
newNode->next = NULL;
*head = newNode;
}
}
}
}
// 打印链表(仅用于演示)
void printList(Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
int main() {
Node* head = NULL; // 初始化链表头部
// 插入一些整数,例如从小到大顺序
insertSorted(&head, 5);
insertSorted(&head, 2);
insertSorted(&head, 9);
insertSorted(&head, 1);
// 打印链表验证是否按顺序排列
printList(head);
return 0;
}
```
阅读全文