23_顺序表和单链表的对比分析

作者: 编程半岛 | 来源:发表于2018-01-25 12:23 被阅读8次

    关键词:List中的find函数、顺序表使用条件、单链表使用条件

    1. 补充: 线性表中的find操作

    List.h中增加一个查找操作

    virtual int find(const T& e) const =0;
    
    参数e: 待查找的数据元素
    返回值:
    >=0: 数据元素在线性表中第一次出现的位置
    -1: 数据元素不存在
    

    SeqList.h中实现

        int find(const T& e) const
        {
            int ret = -1;
    
            for(int i=0; i<m_length; i++)
            {
                if( m_array[i] == e)
                {
                    ret = i;
                    break;
                }
            }
    
            return ret;
        }
    

    LinkList.h中实现

        int find(const T& e) const
        {
            int ret = -1;
            int i = 0;
            Node* node = m_header.next;
    
            while( node )
            {
                if( node->value == e )
                {
                    ret = i;
                    break;
                }
                else
                {
                    node = node->next;
                    i++;
                }
            }
    
            return ret;
        }
    

    当插入的为类类型时,需要将类类型继承自Object

    2. 顺序表和单链表时间复杂度对比分析

    3. 问题:顺序表的整体时间复杂度比单链表要低,那么单链表还是有使用价值吗?

    效率的深度分析:
    1) 实际工程开发中,时间复杂度只是效率的一个参考指标
    对于内置基础类型,顺序表和单链表的效率不相上下
    对于自定义类类型顺序表在效率上低于单链表
    2) 插入和删除:
    顺序表:涉及大量数据对象的复制操作,因此对于自定义的复杂类类型插入和删除操作效率低
    单链表:只涉及指针操作,效率与数据对象无关
    3) 数据访问:
    顺序表:随机访问,可直接定位数据对象
    单链表:顺序访问,必须从头访问数据对象,无法直接定位
    4) 工程开发中的选择:
    顺序表
    数据元素的类型相对简单,不涉及深拷贝;
    数据元素相对稳定,访问操作远多于插入和删除操作
    单链表
    数据元素的类型相对复杂,复制操作相对耗时的类型
    数据元素不稳定,需要经常插入和删除,访问操作较少

    4. 小结

    • 线性表中元素的查找依赖于相等比较操作符(==)
    • 顺序表适用于访问需求量较大的场合(随机访问)
    • 单链表适用于数据元素频繁插入删除的场合(顺序访问)
    • 当数据类型相对简单时,顺序表和单链表的效率不相上下

    声明:此文章仅是本人在学习狄泰学院《数据结构实战开发教程》所做的笔记,文章中包含狄泰软件资料内容,一切版权归狄泰软件所有!
    实验环境:ubuntu10 + Qt Creator2.4.1 + Qt SDK 4.7.4

    相关文章

      网友评论

        本文标题:23_顺序表和单链表的对比分析

        本文链接:https://www.haomeiwen.com/subject/kcimaxtx.html