配套环境
clion + g++
设计要求
SeqList设计要点
1.抽象类模板,存储空间的位置和大小由子类完成
2.实现顺序存储结构线性表的关键操作(增,删,改,查等)
3.提供数组操作符,方便快速获取元素
实现代码
#ifndef SEQLIST_H
#define SEQLIST_H
#include "List.h"
#include "Exception.h"
namespace DTLib {
template<typename T>
class SeqList : public List<T> {
protected:
T *m_array; // 顺序存储空间
int m_length; // 当前线性表长度
public:
bool insert(int i, const T &e){
bool ret = ((0 <= i) && (i <= m_length));
ret = ret && (m_length < capacity());
if(ret){
for(int p = m_length - 1; p >= i; p-- ){
m_array[p + 1] = m_array[p];
}
m_array[i] = e;
m_length++;
}
return ret;
}
bool remove(int i){
bool ret = ((0 <= i) && (i <= m_length));
ret = ret && (m_length < capacity());
if(ret){
for(int p = i; p < m_length - 1; p++ ){
m_array[p] = m_array[p + 1];
}
m_length--;
}
return ret;
}
bool set(int i, const T &e){
bool ret = ((0 <= i) && (i <= m_length));
ret = ret && (m_length < capacity());
if(ret){
m_array[i] = e;
}
return ret;
}
bool get(int i, T &e) const{
bool ret = ((0 <= i) && (i <= m_length));
ret = ret && (m_length < capacity());
if(ret){
e = m_array[i];
}
return ret;
}
int length() const{
return m_length;
}
bool clear(){
m_length = 0;
}
/* 顺序存储线性表的数组访问方式 */
T& operator[](int i){
if((0 <= i) && (i < m_length)){
return m_array[i];
}else{
THROW_EXCEPTION(IndexOutOfBoundsException, "Paramter i is invaild...");
}
}
T operator[](int i) const{
return (const_cast<SeqList<T>&>(*this))[i];
}
/* 顺序存储空间的容量 */
virtual int capacity() const = 0;
};
} // namespace DTLib
#endif //TEST_SEQLIST_H
喝水不忘挖井人: 更多内容请搜索狄泰软件学院(淘宝/B站)