数组 、链表 、堆栈 、队列

1、数组:

数组是使用一块连续的内存空间保存数据,
保存的数据的个数在分配内存的时候就是确定的:
    访问数组中第 n 个数据的时间花费是 O(1) ;
    但是要在数组中查找一个指定的数据则是 O(N);
    
 数组应用场景:
        1、数据比较少;
        2、经常做的运算是按序号访问数据元素;
        3、构建线性表较稳定;
        4、数组更容易实现,任何高级语言都支持;

2、链表

 链表是在非连续的内存单元中保存数据,
   并且通过指针将各个内存单元链接在一起,最有一个节点的指针指向 NULL ;
 链表不需要提前分配固定大小存储空间,当需要存储数据的时候分配一块内存并将这块内存插入链表中;
 在链表中查找第 n 个数据以及查找指定的数据的时间复杂度是 O(N) ,
 但是插入和删除数据的时间复杂度是 O(1) ;
 
 链表应用场景:
      1、对线性表的长度或者规模难以估计;
      2、 频繁做插入删除操作;
      3、构建动态性比较强的线性表;

3、栈

 栈实现了一种后进先出的语义 (LIFO) ,可以使用数组或者是链表来实现它:
   对于栈中的数据的所有操作都是在栈的顶部完成的,
   只可以查看栈顶部的数据,只能够向栈的顶部压入数据,也只能从栈的顶部弹出数据。
  栈应用场景:
         1、括号问题的求解;
         2、表达式的转换和求值;
         3、函数调用和递归实现;
         4、深度优先搜索遍历等;

4、队列

队列实现了先入先出的语义 (FIFO) 。队列也可以使用数组和链表来实现:
队列只允许在队尾添加数据,在队头删除数据,但是可以查看队头和队尾的数据;
队列的存储方式可以使用线性表进行存储,也可以使用链表进行存储。
   还有一种是双端队列,在两端都可以插入和删除:
   队列应用场景:
        1、计算机系统中各种资源的管理;
        2、消息缓冲器的管理;
        3、广度优先搜索遍历等;

5、堆

堆像一棵倒过来的树
堆是一种经过排序的树形数据结构,每个结点都有一个值。
通常我们所说的堆的数据结构,是指二叉堆。
堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。
堆可以分为最大堆和最小堆:
    最大堆:每个父节点都大于孩子节点
    最小堆:每个父节点都小于孩子节点
 
 堆应用场景:
        1、优先级队列的实现;
        2、大数据的处理;
        3、堆排的实现:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值