经典面试题之顺序表和链表的优缺点

★什么是顺序表?
顺序表是在计算机内存中以数组的形式保存的线性表,是指用一组连续地址的存储单元依次存储数据元素的线性结构。表中的任一元素的地址都可以通过这个公式得到:LOC(di)=LOC(d1)+(i-1)*L  1≤i≤n 其中,L是元素占用存储单元的长度。
                              
什么是链表?
链表是一种链式存储的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。它的数据是以结点(类型一般为结构体)来表示的,每个结点的构成:数据域(类型为要存储的数据的类型) + 指针域(结构体指针),数据就是链表里具体要存储的东西,指针就是用来把每个节点都连接起来,使它们形成一个链状。链表可以分成单链表、循环单链表、双向链表和静态链表。

                         
顺序表和链表分别有哪些优点和缺点呢?

①顺序表
     优点:
               (1)空间利用率高,数据是连续存放,命中率比较高 
               (2)存取速度高效,通过下标来直接访问。
     缺点:
               (1)插入和删除比较慢,在插入或者删除一个元素的时候,需要遍历整个顺序表移动前后的数据
               (2)需要预先分配足够大的空间,估计的过大,会导致顺序表后的大量空间被闲置;但是估计的过小,又会造成溢出。 
     时间复杂度 :查找操作为O(1) ,插入和删除操作为O(n)。
②链表

    优点:
              (1)插入和删除速度快,保留原有的物理顺序,在插入或者删除一个元素的时候,只需要改变指针指向即可。
              (2)没有空间限制,存储元素无上限,只与内存空间大小有关. 
              (3)动态分配内存空间,不用事先开辟内存
              (4)是内存的利用率变高

              
    缺点:
              (1)占用额外的空间以存储指针,比较浪费空间,不连续存储,malloc函数开辟空间碎片比较多)
              (2)查找速度比较慢,因为在查找时,需要循环链表。
    时间复杂度 :查找操作为O(n) ,插入和删除操作为O(1)。

猜你喜欢

转载自blog.csdn.net/hansionz/article/details/79939514