// abstract data type for List
template <class T>
class List {
void clear(); // 置空线性表
bool isEmpty(); // 线性表为空时,返回True
bool append(T value); // 在表尾加上一个元素value,表的长度增1
bool insert(int p, T value); // 在位置p上插入一个元素vaule,标的长度增1
bool del(int p); // 删除位置p上的元素,表的长度减1
T getValue(int p); // 返回位置p的元素值
T setValue(int p, T value); // 用value修改位置p的元素值
void print(); // 打印线性表
};
template <class T> // 假定线性表的元素类型为T
class arrList : public List<T> // 顺序表,向量
{
private: // 现行包的取值类型和取值空间
int maxSize; // 私有变量,顺序表实例的最大长度
int curLen; // 私有变量,顺序表实例的当前长度
int position; // 私有变量,当前处理位置
T* aList; // 私有变量,存储顺序表的实例
public: // 顺序表的运算集
arrList(const int size) // 创建一个新的顺序表,参数为表实例的最大长度
{
maxSize = size;
aList = new T[maxSize];
curLen = 0;
position = 0;
}
~arrList() // 析构函数,用于消除该表实例
{
delete [] aList;
}
void clear() // 讲顺序表存储的内容清除,成为空表
{
delete [] aList;
curLen = 0;
position = 0;
aList = new T[maxSize];
// 或者直接置curlen和position为0
}
int length(); // 返回此顺序表的当前实际长度
bool append(T value); // 在表尾添加一个元素value,表的长度增1
bool insert(int p, T value);// 在位置p上插入一个元素value,表的长度增1
bool del(int p); // 删除位置p上的元素,表的长度减1
int getPos(const T value); // 在线性表中查找值为value的元素,并返回第1次出现的位置
void print(); // 打印线性表
};
template <class T>
bool arrList<T>::append(T value) // 在表尾添加一个元素value,表的长度增1
{
if (curLen >= maxSize) // 检查顺序表是否溢出
{
cout << "The list is overflow." << endl;
return false;
}
aList[curLen++] = value;
return true;
}
template <class T>
bool arrList<T>::insert(int p, T value) // 在位置p上插入一个元素value,表的长度增1;插入成功返回true,否则返回false
{
if (curLen >= maxSize) // 检查顺序表是否溢出
{
cout << "The list is overflow." << endl;
return false;
}
if (p<0 || p>curLen) // 检查插入位置是否合法
{
cout << "Insertion is illegal" << endl;
return false;
}
int i;
for (i = curLen; i > p; i++) // 从表位curLen-1开始往右移一位直到p
aList[i] = aList[i-1];
aList[p] = value; // 在位置p出插入新元素
curLen++; // 表的实际长度增1
return true;
}
template <class T>
bool arrList<T>::del(int p) // 删除位置p上的元素,表的长度减 1
{
if (curLen <= 0) // 检查顺序表是否为空
{
cout << "No element to delete." << endl;
return false;
}
if (p < 0 || p > curLen-1) // 检查删除位置是否合法
{
cout << "deletion is illegal" << endl;
return false;
}
int i;
for (i = p; i < curLen - 1; i++)// 从位置p开始每个元素左移一位知道curLen-1
aList[i] = aList[i+1];
curLen--; // 表的实际长度减1
return true;
}
template <class T>
int arrList<T>::getPos(const T value)// 在线性表中查找值为value的元素,并返回第1次出现的位置
{
int i; // 元素下表
for (i=0; i<curLen; i++) // 依次比较
{
if (value == aList[i]) // 找到下标为i的元素与value相等,就返回下标i
return i;
}
return -1; // 如果没有找到元素值为value的元素,返回-1
}
template <class T>
void arrList<T>::print() // 打印线性表
{
for (int i = 0; i < curLen; i++)
cout << aList[i] << " ";
cout << endl;
}
顺序表类定义
最新推荐文章于 2023-07-24 17:30:51 发布