zoukankan      html  css  js  c++  java
  • 第二十三课 顺序表和单链表的对比分析

    问题:

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

    查找一个元素是否在线性表中,每次查找就需要使用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。

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

     时间复杂度对比分析:

     

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

    小结:

  • 相关阅读:
    UML学习笔记2
    UML学习笔记1
    IOS 删除git中的submodules 以sourceTree为例
    进入MySql小黑框的方法
    v-cloak v-text v-html
    构建一个vue实例
    SQL server 查询某个值在那张表那个字段
    centos镜像下载
    win10系统升级后mysql找不到服务及数据消失问题
    Visual Studio 2017设置版权的方法
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9650413.html
Copyright © 2011-2022 走看看