C++为顺序表类添加两个成员函数,实现对线性表的排序和就地逆置,并应用到主函数中
时间: 2024-10-12 21:16:10 浏览: 29
在C++中,为了给顺序表(通常我们称之为数组或者动态数组)类添加排序和就地逆置功能,我们可以创建`SortedList`类,包含一个动态数组作为数据存储以及对应的成员函数。这里是一个简单的例子:
```cpp
#include <iostream>
// 定义一个模板类 SortedList,T是元素的数据类型
template<typename T>
class SortedList {
private:
T* data; // 存储元素的指针
int size; // 数组长度
int capacity; // 最大容量
public:
// 构造函数,初始化数组并分配内存
SortedList(int capacity_ = 5) : size(0), capacity(capacity_) {
data = new T[capacity];
}
// 释放内存
~SortedList() { delete[] data; }
// 添加元素并保持排序
void addElement(T value) {
if (size == capacity) {
resize(capacity * 2); // 当满时,扩大两倍空间
}
// 插入排序
for (int i = size - 1; i >= 0 && value < data[i]; --i) {
data[i + 1] = data[i];
}
data[i + 1] = value;
++size;
}
// 就地逆置数组
void reverseInPlace() {
for (int i = 0, j = size - 1; i < j; ++i, --j) {
std::swap(data[i], data[j]);
}
}
// 主函数中使用示例
static void demonstrate() {
SortedList<int> list;
// 添加一些元素
list.addElement(5);
list.addElement(2);
list.addElement(9);
list.addElement(1);
// 打印原顺序
std::cout << "Original List: ";
for (int i = 0; i < list.size(); ++i) {
std::cout << list.data[i] << " ";
}
std::cout << std::endl;
// 逆置列表
list.reverseInPlace();
// 再次打印,展示逆置后的结果
std::cout << "Reversed List: ";
for (int i = 0; i < list.size(); ++i) {
std::cout << list.data[i] << " ";
}
std::cout << std::endl;
}
};
// 在主函数中测试
int main() {
SortedList::demonstrate();
return 0;
}
```
在这个例子中,`addElement`函数实现了插入排序,而`reverseInPlace`函数则是直接通过交换元素实现就地逆置。在主函数`main`中,我们创建了一个`SortedList`实例并演示了如何使用这两个操作。
阅读全文