第十八课、顺序存储链表的分析
1、效率分析
2、长度相同的的两个SeqList,插入和删除操作平均耗时并不相同
原因:如插入操作
假设一个顺序表里面的元素为int型,一个为string,插入过程中涉及到元素的拷贝,字符串的拷贝过程比int型的拷贝过程耗时
3、以下代码是否正确?
答案是否定的,两个指针指向了同一片内存,意味着析构时同一片空间被释放了两次
4、以下代码是否正确?
原因与上题类似:
DynamicList是在堆空间分配内存的,故指向了同一片内存,修改d1和d2会互相影响。且此函数结束时会对同一片空间释放两次。
因此,对于容器类型的类,可以考虑禁用拷贝构造和赋值操作
5、以下代码是否正确
答案依然是否定的:线性表必须先插入元素,才能使用数组操作符
顺序存储结构线性表提供了数组操作符重载。通过重载能够快捷方便获取目标位置的元素,在具体的使用形式上类似于数组,但由于本质不是数组,不能用线性表代替数组。
故需开发自己的数组类
6、小结
(1)、顺序存储线性表的插入和删除操作存在重大效率隐患
(2)、顺序线性表作为容器类,应该避免使用赋值操作符和拷贝构造
(3)、顺序存储线性表可能被误当做数组
(4)、工程开发中可以考虑使用数组类代替原生数组