• 栈和队列的概念


    栈和队列是非常重要的数据结构,后面要学习的很多算法都依赖于这俩数据结构,只要是学过编程的人应该都对这两个东东有所耳闻,这里还是对其进行复习一下,进一步认识它们的概念,虽然纯理论,但是有个了解之后有助于之后的使用。

    其实栈和队列可以理解成是对之前学过的数组和链表的一种限制,下面具体来了解一下:

    栈【Stack】:

    先来看一下来自维基百科上对它的定义:

    而为啥栈是后进先出的呢?下面看一下存数据与取数据就清楚啦:

    有木有豁然开朗,也就是后放的数据先被取出来,所以是“后进先出”。

    接下来看一下对实现一个栈通常需要实现的方法定义:

    看一下C++对于stack的实现:

    清楚了栈的定义之后,下面来看下它的实际意义:

    1、函数调用过程就是一个栈的最好应用。

      比如这样一个调用过程:

      函数A ---> 函数B ---> 函数C

      而返回过程是:

      函数C ---> 函数B ---> 回至A
      刚好就是栈的特性,后进先出。

    2、平常分析的算法的空间复杂度实际上就是指的栈的大小,怎么理解?

      比如说之前学习递归实现的快速排序【http://www.cnblogs.com/webor2006/p/7159078.html】的空间复杂度是O(log n),实际上也就是指函数调用的深度,而函数调用也就是一个栈的应用,所以说也是指栈的深度。

    队列【Queue】:

    先上维基百科的定义:

    为啥它是先进先出呢?看下图:

    清楚了队列的定义之后,下面来举一个实际比较有意义的使用场景:

    生产者与消费者问题:有一个消费者,多个生产者,则可以利用队列将生产者生产的数据都放到队列当中,当然这个队列要是线程安全的【blockqueue】,而消费数据时则按先来后到的顺序进行一一消费。

    总结:通过对上面的介绍,进一步发现其实栈和队列只不过是对容器【像之前学的数组或链表】进行了一定的也限制,也就是放数据得按一定的规则,而拿数据也得有一定的规则而已。

  • 相关阅读:
    62. Unique Paths
    120. Triangle
    EBS预置文件作用收集整理
    ORA-20002: [WF_NO_USER] NAME=<name> ORIG_SYSTEM=NULL ORIG_SYSTEM_ID=NULL
    Oracle定义DES加密解密及MD5加密函数
    EBS获取附件URL
    Oracle EBS标准错误信息如何追踪 (Debug)
    更改EBS APPS 密码流程
    Oracle之物化视图
    Oracle EBS打补丁
  • 原文地址:https://www.cnblogs.com/webor2006/p/7299385.html
Copyright © 2020-2023  润新知