要求针对顺序存储的线性表完成四个操作函数,分别实现线性表中数据的插入、删除与查找等功能C++
时间: 2024-09-13 08:05:34 浏览: 64
《数据结构C++版》实验一:线性表的顺序存储结构实验报告
在C++中,我们可以创建一个简单的线性表结构(如动态数组),并为其提供插入、删除和查找的成员函数。假设我们有一个模板类`SequentialList`,可以处理任意类型的元素:
```cpp
template <typename T>
class SequentialList {
private:
T* data; // 存储元素的指针
size_t size; // 当前元素的数量
size_t capacity; // 容量
public:
// 构造函数,初始化空列表
SequentialList(size_t capacity_ = 10) : data(nullptr), size(0), capacity(capacity_) {
resize(capacity_);
}
// 插入操作:在指定位置插入新元素
void insert(size_t index, const T& value) {
if (index > size) {
throw std::out_of_range("Index out of range");
}
if (size == capacity) {
expandCapacity();
}
for (size_t i = size; i >= index; --i) {
data[i] = data[i - 1];
}
data[index] = value;
size++;
}
// 删除操作:删除指定位置的元素
void remove(size_t index) {
if (index >= size || index == 0) {
throw std::out_of_range("Index out of range");
}
for (size_t i = index; i < size - 1; ++i) {
data[i] = data[i + 1];
}
size--;
if (size == capacity / 4 && capacity > 0) {
shrinkCapacity();
}
}
// 查找操作:查找指定元素,如果存在返回其位置,不存在返回-1
size_t search(const T& value) const {
for (size_t i = 0; i < size; ++i) {
if (data[i] == value) {
return i + 1; // 返回从1开始的索引
}
}
return -1;
}
private:
// 扩展容量以容纳更多元素
void expandCapacity() {
capacity *= 2;
data = static_cast<T*>(std::realloc(data, sizeof(T) * capacity));
}
// 缩小容量,减少浪费的空间
void shrinkCapacity() {
capacity /= 2;
data = static_cast<T*>(std::realloc(data, sizeof(T) * capacity));
}
};
```
上述代码实现了线性表的基本操作,但请注意,实际应用中可能需要处理内存分配失败等错误情况。
阅读全文