设计一个算法,向一个非递增有序的顺序表中插入元素x,使其仍然非递增有序。要求:采用实例测试并写出完整程序。用c语言或者c++
时间: 2024-09-24 08:21:26 浏览: 49
递增有序顺序表的插入java
设计一个算法在非递增有序的顺序表中插入元素X的过程通常涉及比较新元素与列表中的现有元素,并在适当的位置添加它。这里我们假设列表中的元素可以有重复值。
以下是一个简单的C++示例程序,用于插入元素到已排序的整数列表:
```cpp
#include <iostream>
// 定义结构体表示顺序表(数组)
struct Node {
int value;
Node* next;
};
// 创建新的节点
Node* createNode(int value) {
Node* newNode = new Node();
newNode->value = value;
newNode->next = nullptr;
return newNode;
}
// 插入元素到非递减有序列表
void insertSorted(Node** head, int x) {
// 检查列表是否为空
if (*head == nullptr) {
*head = createNode(x);
return;
}
// 找到插入位置
Node* current = *head;
while (current->next != nullptr && current->next->value <= x) {
current = current->next;
}
// 插入新节点
Node* newNode = createNode(x);
newNode->next = current->next;
current->next = newNode;
}
// 示例测试
int main() {
Node* listHead = nullptr; // 初始空列表
// 添加一些元素到列表
insertSorted(&listHead, 5); // [5]
insertSorted(&listHead, 2); // [2, 5]
insertSorted(&listHead, 7); // [2, 5, 7]
// 打印插入后的列表
Node* temp = listHead;
std::cout << "Sorted List after insertion: ";
while (temp != nullptr) {
std::cout << temp->value << " ";
temp = temp->next;
}
std::cout << "\n";
// 清理内存
Node* cleanUp = listHead;
while (cleanUp != nullptr) {
Node* nextToClean = cleanUp->next;
delete cleanUp;
cleanUp = nextToClean;
}
return 0;
}
```
这个程序首先检查列表是否为空,然后遍历找到合适的位置插入新元素。注意,最后别忘了清理动态分配的内存以避免内存泄漏。
阅读全文