在一个顺序表中,存在多个零元素,编写函数将顺序表中所有的零元素都移动到表的末尾,即顺序表的前部为非零元素,而顺序表的后部均为零元素。要求:该函数作为类的成员函数,移动在原顺序表的存储空间中进行,不允许使用辅助的数组。
时间: 2024-09-27 14:17:35 浏览: 27
要实现这个功能,你可以创建一个名为`SequentialList`的类,其中包含一个整数向量(vector)表示顺序表,并定义一个成员函数`moveZerosToEnd`来完成移动操作。在这个函数中,你可以遍历整个向量,如果遇到0,则交换当前元素与其后的第一个非零元素的位置,直到找到所有零元素并将其移到末尾。
以下是`SequentialList`类和`moveZerosToEnd`函数的实现:
```cpp
#include <iostream>
#include <vector>
class SequentialList {
private:
std::vector<int> elements;
public:
// 添加元素到列表的末尾
void addElement(int value) {
elements.push_back(value);
}
// 移动所有零元素到列表的末尾
void moveZerosToEnd() {
int nonZeroIndex = elements.size(); // 初始化非零元素的索引为向量长度
for (size_t i = 0; i < elements.size(); ++i) {
if (elements[i] != 0) { // 如果遇到非零元素
// 将非零元素放到正确的位置(即非零元素的索引)
std::swap(elements[nonZeroIndex], elements[i]);
--nonZeroIndex;
}
}
}
// 打印顺序表的内容
void printList() const {
for (const auto& elem : elements) {
std::cout << elem << " ";
}
std::cout << "\n";
}
};
int main() {
SequentialList list;
list.addElement(5);
list.addElement(0);
list.addElement(2);
list.addElement(0);
list.addElement(3);
std::cout << "Original List:\n";
list.printList();
list.moveZerosToEnd();
std::cout << "List after moving zeros to end:\n";
list.printList();
return 0;
}
```
当你运行这段代码时,你会看到原始列表中的所有零元素都被移动到了末尾。
阅读全文