【问题标题】:Why do we need to support the function isFull() in a queue or stack?为什么我们需要在队列或堆栈中支持函数 isFull()?
【发布时间】:2014-01-21 06:42:59
【问题描述】:

为什么我们需要在队列或堆栈中支持函数isFull()?

我们可以将数据存储在磁盘上并加载我们可以加载到内存中的任何大小

换句话说,如果我们有非常大的磁盘,我们怎么会耗尽内存?

【问题讨论】:

    标签: function stack queue


    【解决方案1】:

    基本上,它的用途与isEmpty() 函数相同。虽然你可以使用

        Stack s1 = new Stack() ; 
        if(s1.size == 0)
        {
            //  Do something.
        }
    

    假设您使用任何语言(例如 C#)将堆栈实现为数组。现在,由于您无法在创建堆栈后修改堆栈的容量。在将更多元素压入堆栈之前,您需要检查堆栈是否已满。
    例如:-

        Stack s1 = new Stack() ;
        while(!(s1.isFull()&&s2.isEmpty()))
        {
           int temp = s2.pop() ;  // s2 is another stack.
           s1.push(temp)
        }
    

    在这里,您希望将 s2 的尽可能多的元素压入另一个堆栈

    否则,您将需要这样做:-

        Stack s1 = new Stack() ; 
        while(!s2.isEmpty())
        {
           s1.push(s2.pop()) ;  // I am assuming that s2.pop() returns the popped element.
        }
    

    在这种情况下 如果元素的数量大于 s1 的容量,则将元素推送到 s1 将引发异常。

    另一个真实的游戏体验,假设您制作了一款解谜游戏,并且不想给用户超过 25 个动作来解谜,并且您将拼图的状态存储在堆栈中。因此,您可以使用isEmpty() 函数来检查用户是否即将超出允许的移动次数。
    虽然可以有其他方法来做同样的事情,但您也可以使用isEmpty() 函数来做同样的事情。

        while(!s1.isEmpty())
        {
            // wait for the user to make move.
        }
    

    【讨论】:

    • 如果我们将栈实现为数组,我们无法修改容量。但是如果我们使用指针可能是在 C++ 中。最初我们有一个空指针,然后我们想要推送新项目,我们在堆中为新项目动态分配内存。只要堆有可用的插槽,我就可以为新元素分配新内存,并且当堆无法分配内存(完整情况)时,我们可以将整个(或内存中存在的部分元素)移动到磁盘并分配新的内存中的元素。
    猜你喜欢
    • 2012-05-30
    • 2018-11-02
    • 1970-01-01
    • 2013-09-30
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2020-03-25
    • 2020-09-16
    相关资源
    最近更新 更多