#include <iostream>
typedef int ElemType_SqList;
class SqList {
public:
ElemType_SqList* data;
int maxSize;
int length;
//默认构造函数
SqList() : data(nullptr), maxSize(0), length(0) {}
//构造函数
SqList(const int _maxSize) : maxSize(_maxSize), length(0) {
data = new ElemType_SqList[_maxSize];
}
//析构函数
~SqList() {
delete[] data;
data = nullptr;
}
//拷贝构造函数
SqList(const SqList& l) {
this->data = new ElemType_SqList[l.maxSize];
for (int i = 0; i < l.length; i++) {
this->data[i] = l.data[i];
}
this->maxSize = l.maxSize;
this->length = l.length;
}
//赋值运算符重载
SqList& operator=(const SqList& l) {
if (this->data != nullptr) {
delete[] this->data;
}
this->data = new ElemType_SqList[l.maxSize];
for (int i = 0; i < l.length; i++) {
this->data[i] = l.data[i];
}
this->maxSize = l.maxSize;
this->length = l.length;
return *this;
}
//InitList(&L) 初始化表,由构造函数替代
//求表长
int Length() const {
return length;
}
//按值查找,未找到时返回0,此处为顺序查找
int LocateElem(const ElemType_SqList& e) const {
for (int i = 0; i < length; i++) {
if (data[i] == e) {
return i + 1;
}
}
return 0;
}
//按位查找
bool GetElem(int i, ElemType_SqList& e) {
if (i <= 0 || i > length ) {
return false;
}
e = data[i - 1];
return true;
}
//插入
bool Insert(const int _i, const ElemType_SqList& e) {
if (length == maxSize || _i < 1 || _i > length + 1) {
return false;
}
for (int i = length; i >= _i; i--) {
data[i] = data[i - 1];
}
data[_i - 1] = e;
length++;
return true;
}
//删除
bool Delete(const int _i, ElemType_SqList& e) {
if (Empty() || _i <= 0 || _i > length) {
return false;
}
e = data[_i - 1];
for (int i = _i - 1; i < length - 1; i++) {
data[i] = data[i + 1];
}
length--;
return true;
}
//判空
bool Empty() const {
return length == 0 ? true : false;
}
//PrintList()输出,更改为运算符<<的重载
friend std::ostream& operator<<(std::ostream&, const SqList&);
//DestroyList()由析构函数替换
};
std::ostream& operator<<(std::ostream& os, const SqList& l) {
os << "[";
if (l.Empty()) {
os << "]";
return os;
}
for (int i = 0; i < l.length - 1; i++) {
os << l.data[i] << " ,";
}
os << l.data[l.length - 1] << "]";
return os;
}