zoukankan      html  css  js  c++  java
  • 栈和堆简介

        线性结构的两种常见应用之一   栈   (存储数据的结构)

      静态分配的内存都在栈里(系统处理)

      动态分配的内存都在堆里(手动处理)

        定义

        一种可以实现“先进后出” 的存储结构

        栈类似于箱子

      

        

        分类

        静态栈 (类似于用数组实现)

        动态栈 (类似于用链表实现)

        

        算法(往里放,从里取)

        出栈

        压栈(参看Java中线程的例子,成产消费的例子)

        

        应用

        函数调用

        中断

        表达式求值(用两个栈,一个存放数字,一个存放符号)

        内存分配

        缓冲处理

        迷宫

        

        线性结构的两种常见应用之二   队列

        定义:

        一种可是实现“先进先出”的存储结构

        分类:

        链式队列:用链表实现

        

        静态队列:用数组实现

        静态对流通常都必须是循环队列,为了减少

        内存浪费。

        

        循环队列的讲解:

        1、 静态队列为什么必须是循环队列

        2、 循环队列需要几个参数来确定 及其含义

        需要2个参数来确定

        front

         

        rear

              

        

        3、 循环队列各个参数的含义

      

    2个参数不同场合不同的含义?    

                建议初学者先记住,然后慢慢体会

        

            1)队列初始化

        front和rear的值都是零

         2)队列非空

        front代表队列的第一个元素

        rear代表了最后一个有效元素的下一个元素

         3)队列空

        front和rear的值相等,但是不一定是零

         4、 循环队列入队伪算法讲解

           两步完成:

           1)将值存入r所代表的位置

           2)将r后移,正确写法是 rear = (rear+1)%数组长度

           错误写法:rear=rear+1;

           

        5、 循环队列出队伪算法讲解

        front = (front+1) % 数组长度

        

        6、 如何判断循环队列是否为空

        如果front与rear的值相等,

        则队列一定为空

        

        7、 如何判断循环队列是否已满

        预备知识:

        front的值和rear的值没有规律,

        即可以大,小,等。

        

        两种方式:

        1、多增加一个表标识的参数

        2、少用一个队列中的元素(才一个,不影响的)

        通常使用第二种方法

        如果r和f的值紧挨着,则队列已满

        用C语言伪算法表示就是:

        if( (r+1)%数组长度 == f )

        已满

        else

        不满

        

    队列算法:

        入队

        出队

        队列的具体应用:

        所有和事件有关的操作都有队列的影子。

        (例如操作系统认为先进来的先处理)

        

  • 相关阅读:
    POJ 2823 Sliding Window 单调队列
    Java常见面试题汇总(一)
    5.4 heapq--堆队列算法
    使用 rman duplicate from active database 搭建dataguard 手记--系列二
    [LeetCode]Delete Node in a Linked List
    webstorm中使用java的块凝视
    Gradle 1.12用户指南翻译——第三十二章. JDepend 插件
    iOS上如何让按钮(UIbutton)文本左对齐展示
    【matlab】:matlab中不断的出现计算过程怎么办
    apk 签名
  • 原文地址:https://www.cnblogs.com/jiefangzhe/p/10811495.html
Copyright © 2011-2022 走看看