Memorizza i dati in ordine inverso in un elenco basato su array in modo efficiente

1

Ciao, ho un progetto di programmazione di strutture dati che comporta la creazione di un mio elenco basato su array e quindi la memorizzazione efficiente di String read da un file ma al contrario. In modo che arr [0] = l'ultima riga del file

Inizialmente pensavo di avere due loop per:
In primo luogo per memorizzare i dati dal suo ordine nel mio elenco
Secondo per creare una nuova lista e aggiungere elementi in ordine inverso

Poi ho pensato solo a creare un elenco basato su array che memorizza i dati al contrario, in modo che la prima riga del file sia memorizzata arr [arr.length-1] e così via. Questo credo mi stia salvando un ciclo for

So che alla fine entrambi sono O (n), ma questo è ciò che intende il mio professore quando dice "il più efficiente possibile"?

Ci sono altri modi in cui posso invertire la mia lista?

Grazie.

    
posta Justin 18.10.2016 - 03:47
fonte

3 risposte

1

Deve essere una lista? Memorizzare i dati in ordine inverso mi sembra una situazione in cui dovrebbe essere usato uno stack .

Potresti implementare uno stack e solo spingere ogni riga su di esso. Quindi, quando apri tutti gli elementi nella parte superiore della pila, verrebbero visualizzati nell'ordine inverso.

Considerando che questo è un progetto di programmazione di strutture dati, potrebbe essere quello che il tuo professore vorrebbe vedere.

    
risposta data 04.11.2016 - 22:16
fonte
0

Non sono sicuro del vincolo per il problema dato. Puoi ottenere il numero di linee dal file specificato. Se la lunghezza è n. È possibile compilare l'arraylist in ordine inverso. o È possibile creare un elenco con l'ordine originale. Quindi prova a ripristinare l'elenco creato.

    
risposta data 19.10.2016 - 04:04
fonte
0

Then I thought about just creating an array based list that stores data in reverse, so that the first line of the file is stored at arr[arr.length-1] and so on. This I believe is saving me a for loop

Sì, lo fa, e penso che questo sia probabilmente il modo più efficace per farlo! Ricorda che il tuo elenco basato su array non deve sapere quanti oggetti verranno aggiunti ad esso: quando qualcuno chiama yourArrayList.get (2), puoi restituire l'ultimo elemento attualmente nel tuo elenco (cioè array.length-2-1 ).

Penso che il tuo professore abbia inteso sia la complessità computazionale (cioè O(n) ) sia la minore quantità di tempo. Un ciclo richiederà meno tempo di due!

    
risposta data 04.11.2016 - 21:33
fonte

Leggi altre domande sui tag