• 程序员求职之道(《程序员面试笔试宝典》)之数据结构与算法(数组和链表的区别)?


    数组与链表是两种不同的数据存储方式, 链表的特性是在中间任意位置添加元素、删除元素都非常地快,不需要移动其它的元素,通常对于单链表而言,链表中每一个元素都要保存一个指向下一个元素的指针,而对于双链表,每个元素既要保存一个指向下一个元素的指针,还要保存一个指向上一个元素的指针,循环链表则在最后一个元素中保存一个指向第一个元素的指针。

    而数组是一组具有相同类型和名称的变量的集合,这些变量称为数组的元素,每个数组元素都有一个编号,这个编号称为数组的下标,可以通过下标来区别并访问这些元素,数组元素的个数也称为数组的长度。 

    具体而言,数组和链表的区别主要表现在以下几个方面内容:

    (1)       逻辑结构。数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况,即在使用数组之前,就必须对数组的大小进行确定。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。数组中插入、删除数据项时,需要移动其它数据项。而链表采用动态分配内存的形式实现,可以适应数据动态地增减的情况,需要时可以用new/malloc分配内存空间,不需要时用delete/free将已分配的空间释放,不会造成内存空间浪费,且可以方便地插入、删除数据项。

    (2)       内存结构。(静态)数组从栈中分配空间,对于程序员方便快速,但是自由度小。链表从堆中分配空间,自由度大,但是申请管理比较麻烦。

    (3)       数组中的数据在内存中是顺序存储的,而链表是随机存储的。数组的随机访问效率很高,可以直接定位,但插入、删除操作的效率比较低。链表在插入、删除操作上相对数组有很高的效率,而如果要访问链表中的某个元素的话,那就得从表头逐个遍历,直到找到所需要的元素为止,所以,链表的随机访问效率比数组低。

    (4)       链表不存在越界问题,数组有越界问题。数组便于查询,链表便于插入删除,数组节省空间但是长度固定,链表虽然变长但是占了更多的存储空间。

    所以,由于数组存储效率高,存储速度快的优点,如果需要频繁访问数据,很少插入删除操作,则使用数组;反之,如果频繁插入删除,则应使用链表。二者各有用处。

     

  • 相关阅读:
    CF终于上紫了。。。
    CF567F/51nod2522 上下序列
    bzoj 前100题计划
    CF1110G Tree-Tac-Toe 博弈论、构造
    BZOJ4816 SDOI2017 数字表格 莫比乌斯反演
    UOJ400/LOJ2553 CTSC2018 暴力写挂 边分治、虚树
    Luogu4774 NOI2018 屠龙勇士 ExCRT
    CF1039D You Are Given a Tree 根号分治、二分、贪心
    CF1056E Check Transcription 字符串哈希
    Luogu4345 SHOI2015 超能粒子炮·改 Lucas、数位DP
  • 原文地址:https://www.cnblogs.com/anyuan9/p/6171663.html
Copyright © 2020-2023  润新知