编写函数,将一个顺序表 A(有n个元素且任何元素均不为 0),分拆成两个顺序表B和C。使A中大于0的元素存放在B中,小于0的元素存放在 C 中,返回顺序表B和C。C++
时间: 2024-09-30 10:05:54 浏览: 31
顺序表中有n个元素,每个元素是一个字符。试设计一算法,使表中字符按照字母字符,数字字符和其他字符的顺序排列。要求利用原来的存储空间,元素移动次数最小。
在C++中,你可以编写一个函数来实现这个功能。这里是一个简单的示例,假设我们有一个动态数组`List<int>`表示顺序表A,我们可以创建两个新的动态数组`List<int> B`和`List<int> C`来分别存储正数和负数:
```cpp
#include <iostream>
#include <vector>
// 定义一个列表模板类
template<typename T>
class List {
private:
std::vector<T> elements;
public:
// 添加元素到列表尾部
void add(T value) {
elements.push_back(value);
}
// 分拆并返回两个列表
std::pair<List<T>, List<T>> split() {
List<T> positive, negative;
for (T& value : elements) {
if (value > 0)
positive.add(value);
else if (value < 0)
negative.add(value);
}
return {positive, negative};
}
};
// 示例用法
int main() {
List<int> A = {1, -2, 3, -4, 5}; // 初始化顺序表A
auto [B, C] = A.split(); // 分解A为B和C
// 输出结果
std::cout << "Positive elements in B: ";
for (const int& num : B.elements)
std::cout << num << " ";
std::cout << "\nNegative elements in C: ";
for (const int& num : C.elements)
std::cout << num << " ";
return 0;
}
```
在这个例子中,`split()`函数遍历输入列表,根据元素的正负值将其添加到对应的B或C列表中。最后,它返回一个包含两个列表的`std::pair`。
阅读全文