LinkedList è una struttura dati astratta? [duplicare]

-2

Questa citazione proviene dal libro HeadFirst C :

A linked list is an example of an abstract data structure. It’s called an abstract data structure because a linked list is general: it can be used to store a lot of different kinds of data.

Questa informazione è accurata / corretta?

    
posta Koray Tugay 30.03.2015 - 16:40
fonte

3 risposte

3

La questione dell'astratto è strettamente correlata al linguaggio in cui è implementata.

In Java, C # e simili, una struttura di dati astratta è veramente astratta. Non è possibile creare un'istanza direttamente. Questo può essere perché è un'interfaccia o una classe astratta. È un concetto con alcune cose sottostanti ad esso. LinkedList non è astratto: è un'implementazione concreta di List (è una struttura di dati astratta in Java), che a sua volta è un Collection (per un insieme più astratto di operazioni su di esso).

In C, tuttavia, non hai i generici. A meno che tu non stia facendo tutto con tipi void* in una data struttura dati, non esiste realmente nel abstract . E così concetti come le tabelle hash (un tipo concreto in Java) e le liste concatenate rimangono nel regno astratto fino a quando non si crea una "struttura con questa struttura dati che consente di implementare un elenco collegato".

Quindi, è astratto o no? In alcune lingue lo è, in altre no.

Consente di confondere un po 'le cose.

Un elenco collegato è un Pattern: è uno strumento che usi o implementa quando un particolare problema lo richiede. Alcuni hanno sostenuto che le i modelli di progettazione mancano delle funzionalità linguistiche . Che sia astratto in una lingua e concreto in un'altra è perché è una caratteristica del linguaggio "mancante" in C e non in Java (ma c'è la sua parte della libreria di classi piuttosto che essere una parte fondamentale del linguaggio come in Lisp).

Alla fine della giornata, non preoccuparti se è astratto o meno. È qualcosa. E tu lo realizzi o lo usi in qualche modo. Quando un programmatore C e un programmatore Java parlano di una lista collegata, stanno parlando della stessa cosa (solo il programmatore C ha fatto più lavoro). Questo è tutto ciò che conta. È un modo comune di parlare di una cosa comune, ed è di questo che sono i Pattern.

    
risposta data 30.03.2015 - 17:33
fonte
1

Dipende solo da come interpreti "astratto". L'estratto che citi definisce "astratto" come capace di contenere diversi tipi di dati.

Non confondere questo senso di "astratto" con il senso dell'astrazione JAVA / OOP. In Java, ad esempio, la classe LinkedList è non astratta - può essere istanziata.

    
risposta data 30.03.2015 - 17:14
fonte
0

La risposta è aperta all'interpretazione.

Per me una base o concreta struttura dei dati semplicemente manipola la memoria. Gli elenchi e gli array collegati si adattano al conto. Le strutture di dati Abstract impongono regolamenti o semantica sopra una struttura di dati di base. Code, stack, heap e così via.

    
risposta data 30.03.2015 - 17:23
fonte

Leggi altre domande sui tag