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

Function 为什么我们需要在队列或堆栈中支持函数isFull()?,function,stack,queue,Function,Stack,Queue,为什么我们需要在队列或堆栈中支持函数isFull() 我们可以将数据存储在磁盘上,并加载任何大小的内存 换句话说,如果我们有非常大的磁盘,我们怎么可能耗尽内存呢?基本上,它与isEmpty()函数的作用相同。虽然你可以用 Stack s1 = new Stack() ; if(s1.size == 0) { // Do something. } 假设您在任何语言(如C#)中将堆栈实现为数组。现在,因为在创建堆栈后无法修改堆栈的容量。在将更多元

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

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


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

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

    Stack s1 = new Stack() ; 
    if(s1.size == 0)
    {
        //  Do something.
    }
假设您在任何语言(如C#)中将堆栈实现为数组。现在,因为在创建堆栈后无法修改堆栈的容量。在将更多元素推入堆栈之前,需要检查堆栈是否已满。
例如:-

在这里,您希望将尽可能多的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++中的。最初我们有一个空指针,然后我们想要推送新项,我们在堆中为新项动态分配内存。只要堆有可用的插槽,我就可以为新元素分配新的内存,当堆无法分配内存(完整情况)时,我们可以将整个(或内存中存在的部分元素)移动到磁盘,并在内存中分配新元素。
    while(!s1.isEmpty())
    {
        // wait for the user to make move.
    }