数据结构与算法(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等

 

原文地址:https://www.cnblogs.com/sweetyu/p/5012817.html