第十八课、顺序存储链表的分析

1、效率分析

2、长度相同的的两个SeqList,插入和删除操作平均耗时并不相同

原因:如插入操作

假设一个顺序表里面的元素为int型,一个为string,插入过程中涉及到元素的拷贝,字符串的拷贝过程比int型的拷贝过程耗时

3、以下代码是否正确?

答案是否定的,两个指针指向了同一片内存,意味着析构时同一片空间被释放了两次

4、以下代码是否正确?

原因与上题类似:

DynamicList是在堆空间分配内存的,故指向了同一片内存,修改d1和d2会互相影响。且此函数结束时会对同一片空间释放两次。

因此,对于容器类型的类,可以考虑禁用拷贝构造和赋值操作

5、以下代码是否正确

答案依然是否定的:线性表必须先插入元素,才能使用数组操作符

顺序存储结构线性表提供了数组操作符重载。通过重载能够快捷方便获取目标位置的元素,在具体的使用形式上类似于数组,但由于本质不是数组,不能用线性表代替数组。

故需开发自己的数组类

6、小结

(1)、顺序存储线性表的插入和删除操作存在重大效率隐患

(2)、顺序线性表作为容器类,应该避免使用赋值操作符和拷贝构造

(3)、顺序存储线性表可能被误当做数组

(4)、工程开发中可以考虑使用数组类代替原生数组

 

posted @ 2017-09-06 16:31  lgc202  阅读(10)  评论(0编辑  收藏  举报