Liste varie

di il
61 risposte

61 Risposte - Pagina 5

  • Re: Liste varie

    Bhe ha detto che se voglio mantenere il delete e get at index, devo rifarli togliendo i nodi, mettendoli in una pila provvisoria, e dopo rimetterli in quella in uso. quindi ho idea che lo farò, tanto non è una cosa che richiede troppo tempo... e questi li sposto nella lista libera
  • Re: Liste varie

    Ok, forse sono fuso ma non ne vengo a capo
    sto cercando di implementare il getatindex e il deleteatindex nella queue
    dato che secondo la mia prof. devo estrarre via via i nodi, per poter arrivare a quella posizione, ho pensato
    "bene, posso estrarli e rimetterli in coda, arrivato a quello che mi interessa lo tiro fuori, e continuo il ciclo, appoggiandomi al size()-1"
    il problema è che mi fa un giro in più e non ne vengo fuori
    premetto che sto usando un unico "puntatore" che punta alla coda della queue, sempre secondo quanto dice la prof
    
    public void delete(int index)
        {
            if (index < 0)
            throw new IndexOutOfBoundsException("non puoi inserire un numero negativo come indice");
            else if(isEmpty())
            throw new  EmptyStackException();
            else if (index == 0)
            {
                Node<E> tmp = top;
                while(tmp.getLink().getLink() != null)
                tmp = tmp.getLink();
                tmp.setLink(null);
            }
            else
            {
                if(size()-1 >= index)
                {
                    //Stack<E> s = new Stack<>();
                    int size = size();
                    int count = 0;
                    while(size > 0)
                    {
                        System.out.println("size = " + size + " count = " + count + " index = " + index);
                        if(count == index)
                        {
                            System.out.println("size = " + size + " count = " + count + " index = " + index);
                            Node<E> tmp = get();
                            tmp.setLink(null);
                        }
                        add(get());
                        count++;
                        size--;
                    }
                }
                else
                throw new IndexOutOfBoundsException("pila di grandezza inferiore all'indice inserito");
            }
        }
    ho provato un po' di tutto.
    la soluzione più semplice, che non vorrei fare amenochè non mi venga richiesta, sarebbe implementare una seconda coda temporanea dove infilare i nodi che estraggo per poi ributtarli in quella in uso, ma mi sembra uno spreco di risorse.
    copio anche i codici dell'add
    
    public void add(Node<E> n)
        {
            if(isEmpty())
            top = n;
            else
            {
                n.setLink(top);
                top = n;
            }
        }
    e del get
    
    public Node<E> get()
        {
            if(isEmpty())
            throw new  EmptyStackException();
            else
            {
                Node<E> tmp = top;
                Node<E> pointer;
                while(tmp.getLink().getLink() != null)
                {
                    tmp = tmp.getLink();
                    
                }
                pointer = tmp.getLink();
                pointer.setLink(null);
                tmp.setLink(null);
                return pointer;
            }
        }
    potranno sembrare contorti ma funzionano, se avete idee migliori, son aperto a suggerimenti
Devi accedere o registrarti per scrivere nel forum
61 risposte