第二十三课 顺序表和单链表的对比分析

问题:

如何判断某个数据元素是否存在于线性表中?

查找一个元素是否在线性表中,每次查找就需要使用for循环,因此,我们需要封装一个find成员函数。

在List.h中添加find函数:

SeqList.h中添加find的实现:

LinkList.h中添加find的实现:

 测试程序如下:

 1 #include <iostream>
 2 #include "LinkList.h"
 3 
 4 
 5 using namespace std;
 6 using namespace DTLib;
 7 
 8 
 9 int main()
10 {
11     LinkList<int> list;
12 
13     for(int i = 0; i<5; i++)
14     {
15         list.insert(0,i);
16     }
17 
18     cout << list.find(3) << endl;
19 
20     return 0;
21 }

运行结果:

这意味着查找到了3,在1位置处。

 如果是自定义类类型,则必须重载相等操作符。

程序如下:

当我们使用Test类定义一个LinkList类对象时,即使没有使用到Test类对象的时候,编译也会报错,告诉我们Test类没有重载相等操作符,为了解决这个错误,我们必须要定义重载操作符,但是,这时我们还没有使用到Test类具体的对象,如上图所示的那样。这个问题怎么解决呢?

我们在顶层父类Object中重载==和!=操作符,如果用户想要自定义类类型就要继承自这个Object,这相当于使用这个库的一个附加条件。

我们的默认实现是根据地址判断两个对象是否相等,而实际情况中有可能根据对象中的某个成员来判断是否相等,因此,用户有些时候需要重载相等和不相等操作符。

示例如下:

这样就可以正确查找了。

想使用DTLib,最好将每一个自定义类类型都继承自Object。

这样可以避免一些编译错误。

 时间复杂度对比分析:

 

对于插入和删除,数据对象比较大的时候更适合用单链表。

小结:

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9650413.html