本文包含以下内容:
一、线性表的介绍以及抽象ADT
二、顺序表及顺序表的实现
三、链表及链表的实现
四、顺序表和链表的比较
五、总结
参考书目:《数据结构与算法分析》【美】Clifford A.Shaffer著
一、线性表的介绍以及抽象ADT
1.什么是线性表?
关键字:线性、有序、有限。
所谓线性,是一个元素接着一个元素,就像一条线那样排放。而不是离散散乱的,或者一堆一堆的。
所谓有序,不是说表中的元素要按照从小到大或者从大到小排列,而是说每个元素都有它自己的位置
所谓有限,表中的元素个数不能是无穷多。
2.线性表应该有什么样的属性和操作
属性:表头、表尾、长度。
操作:增删改查
线性表中最重要的概念应该是当前位置,一切的操作都是对当前位置的操作。
比如getvalue()得到当前位置的值,insert()在当前位置添加元素,remove(),移除当前位置的元素
3.抽象ADT
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&it)=0;
virtual void append(const E&it)=0;
virtual E remove()=0;
virtual void moveToStart() =0;
virtual void moveToEnd()=0;
virtual void pre()=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 {};
};
4.关于抽象ADT的一些解释
常量引用参数、常量函数、常量引用返回值
常量引用参数