zoukankan      html  css  js  c++  java
  • 3.数组和链表

    数组和链表是计算机中最最基本的两个数据结构,是其他数据结构的基础。

    一.数组

      数组是一种线性表数据结构,它用一组连续的内存空间存储相同类型的数据,有以下三个特点:

    • 线性表(类似数据结构还有链表、队列、栈,每个线性表上的数据最多只有向前和向后两个方向)
    • 申请连续的内存空间和存储相同的数据类型

          申请连续的内存空间意味着可以随机访问(arr[k]_address=base_address + k*type_size),所以数组的查询时间复杂度为O(1),

        但同时也意味着对内存利用的苛刻,比如此时内存剩余空间有500M,但是剩余空间非连续,分别有200M和300M两个空闲区组成,此时

        如果数组需要申请的空间为400M,则会报内存空间不足。

    • 低效的插入和删除(为了在插入和删除元素后保持数组所在空间的连续性而需要移动元素,时间复杂度为O(n))

    二.链表

      链表是一种线性表数据结构,它通过“指针”将零散的内存块串联起来使用,这里主要讲的是单链表,有以下特点:

    • 线性表
    • 能利用零散的内存块(意味着能充分利用内存空间,但是每次查询时都是通过头结点遍历,所以查询时间复杂度为O(n))
    • 高效的插入和删除(由于插入和删除只需改变节点指针的指向,所以时间复杂度为O(1)

    下图是二者在内存中的区别:

      

      

      

  • 相关阅读:
    推荐一款稳定快速免费的前端开源项目 CDN 加速服务
    MySQL限时解答
    OneProxy的功能与限制
    MySQL浮点计算存在的问题与解决方案
    DAS、SAN、NAS的区别
    气质
    受制于人
    mysqlbinlog flashback 5.6完全使用手册与原理
    Innodb引擎 compact模式下元组的磁盘存储结构
    数据迁移程序
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/12050071.html
Copyright © 2011-2022 走看看