De ce trebuie să susținem funcția isFull() într-o coadă sau stivă? (Programare, Funcție, Stivă, Coadă)

hatemfaheem a intrebat.

De ce trebuie să susținem funcția isFull() într-o coadă sau într-o stivă?

Putem stoca datele pe disc și încărca orice dimensiune pe care o putem încărca în memorie

Cu alte cuvinte, cum putem rămâne fără memorie dacă avem discuri foarte mari?

1 răspunsuri
Pratik Singhal

În principiu, are același scop ca și isEmpty() funcție. Deși ați putea folosi

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

Să presupunem că implementați stiva ca o matrice în orice limbaj, cum ar fi C#. Acum, din moment ce nu puteți modifica capacitatea stivei după crearea acesteia. Trebuie să verificați dacă stiva este plină înainte de a introduce mai multe elemente în stivă.
de exemplu: –

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

Aici, doriți să împingeți cât mai multe elemente din s2 pe o altă stivă

În caz contrar, va trebui să faceți:-

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

În acest caz, dacă numărul de elemente este mai mare decât capacitatea lui s1, atunci împingerea elementelor pe s1 va genera o excepție.

O altă experiență reală de joc: să presupunem că faceți un joc de rezolvare a unui puzzle și nu doriți să oferiți utilizatorului mai mult de, să zicem, 25 de mișcări pentru a rezolva puzzle-ul, iar starea puzzle-ului să fie stocată într-o stivă. Astfel, puteți utiliza funcția isEmpty() pentru a verifica dacă utilizatorul este pe punctul de a depăși numărul permis de mutări.
Deși pot exista și alte metode pentru a face același lucru, dar puteți folosi funcția isEmpty() pentru a face același lucru.

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

Comentarii

  • Dacă implementăm stiva ca un array, nu putem modifica capacitatea. Dar ce se întâmplă dacă folosim pointeri, poate fi în C++. Inițial, avem un pointer nul, apoi dorim să introducem un nou element, alocăm dinamic memorie pentru noul element în heap. Atâta timp cât heap-ul are sloturi disponibile, pot aloca memorie nouă pentru elemente noi, iar atunci când heap-ul nu reușește să aloce memorie (CAZUL PLIN) putem muta întregul (sau o parte din elementele prezente în memorie) pe disc și aloca noi elemente în memorie. –  > Por hatemfaheem.