• 栈 & 队列


    先进者后出,后进者先出,LIFO,典型的"栈"结构

    从栈的操作特性上来看,栈是一种"操作受限"的线性表,只允许在一段插入和删除数据。

    在功能上来说,数组和链表可以代替栈,但特定的数据结构是对特定场景的抽象,

    数组或链表暴露了太多的操作接口,操作上的确灵活自由,但使用时就比较不可控,也就更容易出错。

    当某个数据集合 只涉及在一端插入和删除数据,并且满足后进先出、先进后出的特性,"栈"的存在就凸显出来了。

    栈可以用数组来实现,叫顺序栈

    也可以用链表来实现,叫链式栈

    栈主要有两个操作:入栈push()出栈pop()

    也就是在栈顶插入一个数据和从栈顶删除一个数据。

    不管是顺序栈还是链式栈,入栈、出栈只涉及栈顶个别数据的操作。

     

    队列

    先进者先出,FIFO,典型的"队列"结构。

    跟栈一样也是一种操作受限的线性表数据结构。

    队列很贴近生活中的排队,先来先买,后来者排在后面,不允许插队。

    特点:先进先出,主要的两个操作:入队和出队。

    跟栈的操作一般无二,数组实现的叫顺序队列,链表的是链式队列

    队列只支持:入队enqueue(),放一个数据到队列尾部;

          出队dequeue(),  从队列头部取一个数据。

    循环队列、阻塞队列、并发队列等具有某些额外特性的队列,

    它们在很多偏底层系统,框架、中间件的开发中,起到了关键性作用。

    阻塞队列 (有点生成器的味道

    就是在队列基础上添加了阻塞操作。

    在队列为空的时候,从对头取数据会被阻塞。因为此时还没有数据可取,直到队列中有了数据才能返回;

    如果队列满了,那么插入数据的操作就会被阻塞,直到有了空闲位置,再插入数据,然后再返回

    使用阻塞队列 可以轻松实现一个  "生产者 - 消费者模式"。

    可以有效地协调生产和消费速度。当“生产者”生产数据的速度过快,

    “消费者”来不及消费时,存储数据的队列很快就满了。这个时候,生产者就阻塞等待,直到“消费者”消费了数据,

    “生产者”才会被唤醒继续“生产”。

    还可以通过协调“生产者”和“消费者”的个数,来提高数据的处理效率。

    可以多配置几个“消费者”,来应对一个“生产者”。

  • 相关阅读:
    1105 Spiral Matrix (25 分)螺旋矩阵
    1089 Insert or Merge (25 分)
    1044 Shopping in Mars (25 分)二分查找
    1068 Find More Coins (30 分)记忆化搜索
    1133 Splitting A Linked List (25 分)
    1145 Hashing
    1147 Heaps (30 分)
    1098 Insertion or Heap Sort (25 分)
    自测-3 数组元素循环右移问题 (20 分)
    自测-1 打印沙漏 (20 分)
  • 原文地址:https://www.cnblogs.com/wy919/p/13054704.html
Copyright © 2020-2023  润新知