用c++给我实现一个顺序表,支持增删查改
时间: 2024-10-16 15:18:04 浏览: 0
在C++中,我们可以使用数组结构来实现一个简单的顺序表。这里是一个基础版本的实现,包含插入(Insert)、删除(Delete)、查找(Search)和修改(Update)操作:
```cpp
#include <iostream>
template <typename T>
class SequentialList {
private:
int capacity; // 存储容量
T* elements; // 存储元素的数组
public:
SequentialList(int size = 0) : capacity(size), elements(new T[capacity]) {}
~SequentialList() { delete[] elements; } // 析构函数释放内存
void Insert(int index, const T& value) {
if (index < 0 || index > capacity)
throw std::out_of_range("Index out of range");
if (capacity == capacity - 1) // 扩容
Resize(2 * capacity);
for (int i = capacity - 1; i >= index; i--)
elements[i + 1] = elements[i];
elements[index] = value;
}
void Delete(int index) {
if (index < 0 || index >= capacity)
throw std::out_of_range("Index out of range");
for (int i = index; i < capacity - 1; i++)
elements[i] = elements[i + 1];
if (capacity > 0 && index == capacity - 1) // 缩容
Resize(capacity / 2);
}
bool Search(const T& value, int& position) {
for (int i = 0; i < capacity; i++) {
if (elements[i] == value) {
position = i;
return true;
}
}
position = -1;
return false;
}
void Update(int index, const T& new_value) {
if (index < 0 || index >= capacity)
throw std::out_of_range("Index out of range");
elements[index] = new_value;
}
private:
void Resize(int new_capacity) {
T* new_elements = new T[new_capacity];
for (int i = 0; i < capacity; i++)
new_elements[i] = elements[i];
delete[] elements;
capacity = new_capacity;
elements = new_elements;
}
};
// 示例使用
int main() {
SequentialList<int> list(5);
list.Insert(0, 10);
list.Insert(2, 20);
list.Search(10, std::cout); // 输出索引位置
try {
list.Delete(-1); // 异常处理
} catch (const std::out_of_range& e) {
std::cerr << "Error: " << e.what() << '\n';
}
list.Update(1, 30);
return 0;
}
```
这个实现是一个基础版,它不考虑性能优化(如动态调整数组大小时的效率),并且没有提供直接的查找功能。对于大规模应用,建议使用更高效的数据结构,比如std::vector。