在顺序存储结构上,线性表递增有序。试写一个算法,将X插入到线性表的适当位置上,以保持线性表的有序性。用c语言
时间: 2024-09-13 10:01:01 浏览: 47
数据结构实验报告-线性表-两个有序线性表的归并算法
5星 · 资源好评率100%
为了在顺序存储的线性表中插入一个元素X并保持有序,我们可以采用二分查找的思想,如果列表已经排序,那么可以找到X应该插入的位置。以下是使用C语言的一个简单算法:
```c
#include <stdio.h>
// 定义线性表结构体
typedef struct {
int data;
struct Node *next;
} Node;
// 插入函数
void insertInOrder(Node **head, int x) {
// 创建新节点
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = x;
newNode->next = NULL;
// 如果表为空或需要插入的数据小于头节点,直接插入到头部
if (*head == NULL || x <= (*head)->data) {
newNode->next = *head;
*head = newNode;
return;
}
// 否则从中间开始遍历
Node *current = *head;
while (current->next != NULL && current->data < x) {
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("\n");
}
int main() {
Node *head = NULL; // 初始化空链表
// 测试数据插入
insertInOrder(&head, 5); // [5]
insertInOrder(&head, 2); // [2, 5]
insertInOrder(&head, 8); // [2, 5, 8]
// 打印结果
printList(head);
return 0;
}
```
这个`insertInOrder`函数会根据线性表的有序特性插入X,并保持原有的顺序。
阅读全文