线性表中数据元素的值为正整数,若线性表采用带头结点的单链表结构,请创建一个非递减有序的单链表,请用c语言写出这个算法
时间: 2024-10-13 13:07:21 浏览: 26
北邮数据结构实验报告——线性表.pdf
在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->next = *head;
*head = newNode;
return;
}
while (current->next != NULL && current->next->data < value) {
current = current->next; // 遍历到适当位置
}
newNode->next = current->next; // 插入新节点
current->next = newNode;
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
Node* head = NULL; // 初始化链表头指针
// 添加一些节点,例如从最小到最大
for (int i = 1; i <= 10; ++i) {
insertSorted(&head, i);
}
// 打印链表确认是否排序
printList(head);
return 0;
}
```
注意,这只是一个基础示例,实际应用中可能需要考虑更多边界情况和错误处理。运行这个程序会创建一个非递减有序的链表,其中包含正整数。
阅读全文