源代码
#include <iostream>
using namespace std;
template <typename T>
class SeqList {
private:
T* data; // 存储元素的数组
int maxSize; // 顺序表的最大容量
int length; // 当前顺序表的长度
public:
SeqList(int size); // 构造函数
~SeqList(); // 析构函数
bool insert(int pos, const T& elem); // 插入元素
bool remove(int pos); // 删除元素
int find(const T& elem) const; // 查找元素
void display() const; // 显示顺序表中的所有元素
};
//如果 size 小于等于0,抛出 invalid_argument 异常。
//否则,初始化 maxSize,分配 data 数组的内存,并将 length 设置为0。
template <typename T>
SeqList<T>::SeqList(int size) {
if (size <= 0) {
throw invalid_argument("Size must be positive.");
}
maxSize = size;
data = new T[maxSize];
length = 0;
}
//释放动态分配的 data 数组的内存。
template <typename T>
SeqList<T>::~SeqList() {
delete[] data;
}
template <typename T>
bool SeqList<T>::insert(int pos, const T& elem) {
if (pos < 0 || pos > length || length >= maxSize) {
return false; // 插入位置不合法或顺序表已满
}
for (int i = length; i > pos; --i) {
data[i] = data[i - 1];
}
data[pos] = elem;
++length;
return true;
}
template <typename T>
bool SeqList<T>::remove(int pos) {
if (pos < 0 || pos > length) {
return false; // 删除位置不合法
}
for (int i = pos-1; i < length - 1; ++i) {
data[i] = data[i + 1];
}
--length;
return true;
}
template <typename T>
int SeqList<T>::find(const T& elem) const {
for (int i = 0; i < length; ++i) {
if (data[i] == elem) {
return i+1; // 找到元素,返回位置
}
}
return -1; // 未找到元素
}
template <typename T>
void SeqList<T>::display() const {
for (int i = 0; i < length; ++i) {
cout << data[i] << " ";
}
cout << endl;
}
int main() {
SeqList<int> list(10);
list.insert(0, 1);
list.insert(1, 2);
list.insert(2, 3);
list.insert(1, 4);
cout << "顺序表中的元素:";
list.display();
cout << "元素2的位置:" << list.find(2) << endl;
list.remove(4);
cout << "删除位置4后的顺序表:";
list.display();
system("pause");
return 0;
}