2012-06-27 13 views
8

Che cos'è un contenitore? Se ho capito bene:Qual è la differenza tra un "contenitore" e una "struttura dati"?

  • Un tipo di dato astratto è semplicemente una descrizione logica del modo in cui saranno memorizzati i dati e le operazioni che verranno consentite su tali dati. Ad esempio, uno stack è definito come un tipo di dati con le operazioni push, pop, ecc. E accesso LIFO.

  • Una struttura dati è l'effettiva implementazione di questa definizione astratta, in alcuni linguaggi di programmazione per computer, ad esempio, uno stack in C++ è implementato nella libreria standard, come std :: stack.

In primo luogo, si prega di correggere/migliorare la mia attuale comprensione della suddetta distinzione.

In secondo luogo, che cos'è esattamente un contenitore? Ho sentito questa parola lanciata in giro abbastanza spesso. È uguale alla mia definizione di una struttura dati?

Inoltre, wikipedia ha tre voci separate per questi termini.

+1

è tutto basato sul contesto. Non penso abbia senso discuterli separatamente come due parole nude. – xvatar

+0

concordato. Se sei nel contesto di un determinato linguaggio di programmazione o implementazione, allora queste parole possono avere significati molto espliciti, ma al di fuori di quel contesto sono piuttosto ambigui. Eccetto ADT, che significa sempre quanto sopra indicato. – Johansensen

risposta

1

Hai ragione nelle tue impressioni di ADT rispetto alla struttura dei dati, anche se sono in larga misura intercambiabili. Un ADT è esplicitamente astratto, una struttura dati è un termine più generale che può essere totalmente astratto o fare riferimento anche ai dettagli di implementazione.

Un contenitore è un'idea molto astratta, ma generalmente implica (per me comunque) una qualche forma di incapsulamento - nel senso che potrebbe mascherare le complessità di un oggetto sottostante, o eventualmente presentare un'interfaccia uniforme a una gamma di differenti possibili oggetti sottostanti. È una parola così saldamente radicata nel vocabolario del programmatore che le persone lo usano sempre, e in quanto tale il suo significato è molto sfocato. ;)

+0

Tuttavia, sembra che (almeno nel mondo C++ con cui non mi è molto familiare) il termine 'contenitore' venga talvolta usato come sinonimo di' collection'. – Johansensen

+0

Una 'collezione' è un tipo di ADT- che contiene un numero variabile di elementi, generalmente di tipo uniforme. Diversi tipi di raccolta possono essere associativi (ad esempio hashmap), ordinati (ad es. Elenchi), ecc. – Johansensen

1

Niente, davvero. Sono solo due parole per lo stesso termine, come noi umani amiamo fare. Tuttavia, afaik, il termine CS ufficiale è la struttura dei dati e lo standard C++ ha requisiti C++ specifici per Container. Tuttavia, in generale, sono equivalenti.

1

Un contenitore è un sottoinsieme di strutture di dati. Il C++ impone requisiti speciali sui contenitori, che sono implementazioni di diverse strutture di dati.

Una struttura dati è, per wikipedia: "un modo particolare di archiviare e organizzare i dati". Un contenitore è un costrutto C++ che è una raccolta di record, che è a sua volta una struttura di dati.

0

Come detto da altri, questi termini sono così ampiamente utilizzati che vengono utilizzati con vari significati, ma qui ci sono gli usi che ho incontrato più spesso.

La struttura dei dati è un termine di informatica, può essere utilizzato in una discussione teorica senza riferimento a un linguaggio specifico. Ci sono molte strutture di dati discusse nei libri sugli algoritmi, come code, alberi, hashtables ... Una struttura di dati può essere implementata praticamente in qualsiasi lingua.

Container è un termine utilizzato piuttosto nel contect di una lingua specifica, quando è disponibile una libreria di contenitori già implementati che il programmatore può utilizzare immediatamente. Diverse librerie distinte possono implementare la stessa struttura (astratta) dei dati (ad esempio, una lista semplicemente collegata), ma con contenitori distinti, cioè un codice sorgente distinto e nomi distinti (uno potrebbe essere chiamato "coda", un altro "fifo", e un terzo "stack").

Inoltre, un contenitore deve essere un modo per memorizzare altri tipi, ad es. vettore memorizza int. Ad esempio, ci sono diversi modi per rappresentare un grafico in memoria: matrice di adiacenza, elenchi di adiacenza, stella di avanzamento ... Tutte queste sono strutture di dati, ma non sono contenitori, in quanto non contengono altri tipi, solo rappresentare i nodi e i collegamenti del grafico. I dati memorizzati da queste strutture di dati sono i nodi e i collegamenti.

Problemi correlati