内容概要:
1.代码部分:
- 线性表抽象类
- 顺序表类
- 单链表类
- 双链表类
- 主函数
2.基本概念及注意事项
代码(测试环境VS2017):
//线性表ADT类的定义:ADT_List.h
template <typename E>class List
{
private:
void operator=(const List&) {}
List(const List&) {}
public:
List() {}
virtual ~List(){}
virtual void clear() = 0;
virtual void insert(const E&item) = 0;
virtual void append(const E&item) = 0;
virtual E remove() = 0;
virtual void moveToStart() = 0;
virtual void moveToEnd() = 0;
virtual void prev() = 0;
virtual void next() = 0;
virtual int length() const = 0;
virtual int currPos()const = 0;
virtual void moveToPos(int pos) = 0;
virtual const E& getValue()const = 0;
};
//顺序表类的实现:ADT_List.h
template<typename E>
class AList :public List<E>
{
private:
int maxSize;
int listSize;
int curr;
E*listArry;
public:
AList(int size = 100)//构造,默认大小为100
{
maxSize = size;
listSize = curr = 0;
listArry = new E[maxSize];
}
~AList() { delete[]listArry; }
void clear()
{
delete[]listArry;
listSize = curr = 0;
listArry = new E[maxSize];
}
void insert(const E&it)
{
assert(listSize < maxSize);
for (int i = listSize; i > curr; i--)
listArry[i] = listArry[i - 1];
listArry[curr] = it;
listSize++;
}
void append(const E&it)
{
assert(listSize < maxSize);
listArry[listSize++] = it;
}
E remove()
{
assert((curr >= 0) && (curr < listSize));
E it = listArry[curr]