美文网首页
数据结构基础 - 队列与链表

数据结构基础 - 队列与链表

作者: OkCoco | 来源:发表于2018-01-06 12:09 被阅读0次

    数据结构

    指相互之间存在一种或多种特定关系的数据元素的集合,即对象间逻辑关系。

    数据存储结构

    用来描述数据在计算机中的存储方式;
    常用的数据存储方式就两种:
      顺序存储 -- Array、ArrayList、Queue
      非顺序存储 -- 链表、Tree

    常见数据结构

    • 数组
      数组是使用一块连续的内存空间保存数据,数组的容量在分配内存时就已经确定。
      数组的查找操作时间复杂度是O(1),但是删除和插入的复杂度是O(n),且如果两者操作的不是在尾部,则会导致数组元素的移动。


      image.png

      删除数值3:


      image.png
    • 链表
      1.单链表
      链表是在非连续的内存单元中保存数据,并且通过指针将各个内存单元链接在一起,最后一个节点的指针指向 NULL 。
      链表不需要提前分配固定大小存储空间,当需要存储数据的时候分配一块内存并将这块内存插入链表中。
      在链表中查找第 n 个数据以及查找指定的数据的时间复杂度是 O(N) ,但是插入和删除数据的时间复杂度是 O(1) ,因为只需要调整指针就可以:


      image.png

      插入元素:


      image.png

    2.双链表
    双链表,就是节点中包含指向下一个节点的指针和指向上一个节点的指针

    image.png

    3.循环链表
    即双向链表的头尾相接


    image.png

    4.优点
    (1)使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。
    (2)数据的存取往往要在不同的排列顺序中转换,而链表是一种自我指示数据类型,因为它包含指向另一个相同类型的数据的指针(链接)。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。

    5.缺点
    失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。

    • 队列(FIFO)
      1.概念定义
      一般队列只允许在队尾添加数据,在队头删除数据。


      image.png
    1. 队列的方法
    add(E e)     将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。返回boolean。
    element()    获取不移除此队列的头,如果此队列为空,则抛出NoSuchElementException,返回泛型E。
    offer(E e)   将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。返回boolean。
    peek()       获取不移除此队列的头,如果此队列为空,则返回 null。返回泛型E。
    poll()       获取并移除此队列的头,如果此队列为空,则返回 null。返回泛型E。
    remove()     获取并移除此队列的头。返回泛型E。
    

    1.优点
    (1)保证数据的有序性,先到先处理。
    (2)插入数据快速
    2.缺点
    (1)遍历数据较为缓慢

    相关文章

      网友评论

          本文标题:数据结构基础 - 队列与链表

          本文链接:https://www.haomeiwen.com/subject/dvgenxtx.html