zoukankan      html  css  js  c++  java
  • 【练内功,促成长】算法学习(一)数据结构记录

    • 数组

      • 数组占用的内存中连续的空间。
      • JAVA中的ArrayList这种数组,会在数组空间占满后,自动扩容,
        • 扩容方案,就是申请一份更大的内容(应该是1.5倍大), 然后将原数组中的内容复制过去
        • 所以数组的插入操作,一般的时间复杂度是O(1), 最后需要扩容时是O(n), 因为只有极端情况下才会变成O(n), 摊还复杂度是O(1)
      • 如何找到数组中节点在内存中的位置
        • 首节点的内存地址 + 数组下标 * 节点size
        • 这也是为什么数组从0开始,因为可以减少一次 下标 - 1 的操作
    • 链表

      • 链表可以使用内存中不连续的内存空间
      • 一般的链表是由一个链表本身的内容加上一个next的指针(指向下一个节点的内存地址)构成
      • 双向链表,就是普通的链表内容中附加一个prev指针(指向该节点的上一个节点)
      • 循环单向链表,单向链表的最后一个节点的next指针指向第一个元素(head)
      • 循环双向列表, 就是链表的最后一个节点的next指针指向第一个元素(head), 链表的第一个节点的prev指针,指向最后一个元素;
      • 链表可以使用不连续的内存空间,所以链表的插入操作,时间复杂度都是O(1)。
      • 链表的算法练习题 leetCode对应编号:206,141,21,19,876
      • 栈是一种受限的数据结构
      • 先进后出
      • 只能将节点添加在栈的末尾
      • 取元素的时候,只能从后面取
    • 队列

      • 队列是另外一种受限的数据结构
      • 先进先出
      • 将节点添加在队列的尾端
      • 取元素的时候,从队列的前端取
  • 相关阅读:
    zabbix之自定义告警
    Appium获取toast消息
    fiddler在小米8下抓取https数据包.
    shell 获取指定ip的丢包率
    打造个人多媒体服务器之二
    关于pycharm+opencv没有代码提示的问题解决方法记录
    chrome出现“由贵单位管理”原因及解决方法
    jQuery 页面加载后执行的事件(3 种方式)
    VSCode
    2019.7月-前端面试总结(H5+C3+JS+ES6+Vue+浏览器)
  • 原文地址:https://www.cnblogs.com/clearfix/p/12750181.html
Copyright © 2011-2022 走看看