• 数据结构与算法(1)线性结构


    线性表

      (1)顺序表

              基本思想:元素的存储空间是连续的。在内存中是以顺序存储,内存划分的区域是连续的。存储结构如下图:

                               

      (2)链表

              基本思想:元素的存储空间是离散的,单独的(物理),它们可以通过在逻辑上指针的联系使得它成为了整体的链表。存储结构如下图:

     

         

                1.单链表

      

                2.循环链表

     

                3.双链表(双向循环表)

     

    顺序表和链表的对比:

     

    队列 ---  先进先出(FIFO)

      (1)顺序队列

         

               1)队空:head = tail

               2)队满:tail = m

      (2)循环队列

            

             1)队空:head = tail

             2)队满:tail + 1 = head

     

     

    栈 ---  后进先出(LIFO)

         常见操作

        1、入栈(队)
        2、出栈(队)
        3、判空
        4、判满
        5、初始化
        6、获取队列(栈)大小

    堆与栈的区别

    一、程序的内存分配

    • 栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其

      操作方式类似于数据结构中的栈。

    • 堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回

      收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

    • 全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的

      全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另

      一块区域。 - 程序结束后由系统释放。

    • 文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放

    • 程序代码区—存放函数体的二进制代码。

    二、从管理方式来讲

    • 对于栈来讲,是由编译器自动管理,无需我们手工控制;

    • 对于堆来说,释放工作由程序员控制,容易产生内存泄露(memory leak)

    三、从申请大小大小方面讲

    • 栈空间比较小

    • 堆控件比较大

    四、从数据存储方面来讲

      - 栈空间中一般存储基本类型,对象的地址

      - 堆空间一般存放对象本身,block的copy等

     

  • 相关阅读:
    nodejs 提示‘xxx’ 不是内部或外部命令解决方法
    nodejs安装express不是内部或外部命令
    菜鸟供应链升级实践
    数据治理框架解读分析
    Canal+Kafka实现MySQL与Redis数据同步
    一条 SQL 引发的事故,同事直接被开除!!
    我用几行 Python 自动化脚本完美解决掉了小姐姐的微信焦虑感
    从 Storm 迁移到 Flink,美团外卖实时数仓建设实践
    供应链管理学习心得
    解密京东智慧供应链
  • 原文地址:https://www.cnblogs.com/sweetyu/p/5012817.html
Copyright © 2020-2023  润新知