2012-06-27 10 views
8

¿Qué es un contenedor? Como lo entiendo:¿Cuál es la diferencia entre un "contenedor" y una "estructura de datos"?

  • Un tipo abstracto de datos no es más que una descripción lógica de la forma en que se almacenarán los datos y las operaciones que se permitirá en esos datos. Por ejemplo, una pila se define como un tipo de datos con las operaciones push, pop, etc. y acceso LIFO.

  • Una estructura de datos es la implementación real de esta definición abstracta, en algunos lenguajes de programación de computadoras, por ejemplo, una pila en C++ se implementa en la biblioteca estándar, como std :: stack.

En primer lugar, corrija/mejore mi comprensión actual de la distinción antes mencionada.

En segundo lugar, ¿qué es exactamente un contenedor? Escucho esta palabra bastante a menudo. ¿Es lo mismo que mi definición de una estructura de datos?

Además, wikipedia tiene tres entradas separadas para estos términos.

+1

se trata de contexto. No creo que tenga sentido discutirlos por separado como dos palabras al descubierto. – xvatar

+0

De acuerdo. Si estás en el contexto de un lenguaje de programación o implementación dado, estas palabras pueden tener significados muy explícitos, pero fuera de ese contexto son bastante ambiguas. Excepto ADT, que siempre significa lo que se menciona arriba. – Johansensen

Respuesta

1

Tiene razón en sus impresiones de ADT frente a la estructura de datos, aunque son intercambiables en gran medida. Un ADT es explícitamente resumen, una estructura de datos es un término más general que puede ser totalmente abstracto, o también puede referirse a detalles de implementación.

Un contenedor es una idea muy abstracta, pero generalmente implica (para mí de todos modos) alguna forma de encapsulación, en el sentido de que podría enmascarar las complejidades de un objeto subyacente, o posiblemente presentar una interfaz uniforme a un rango de diferentes posibles objetos subyacentes. Es una palabra tan firmemente enraizada en el vocabulario del programador que las personas la usan todo el tiempo, y como tal su significado es muy borroso. ;)

+0

Sin embargo, parece que (al menos en el mundo de C++ con el que no estoy muy familiarizado) el término 'contenedor 'a veces se usa como sinónimo de' colección'. – Johansensen

+0

Una 'colección' es un tipo de ADT que contiene una cantidad variable de elementos, generalmente de un tipo uniforme. Los diferentes tipos de colecciones pueden ser asociativos (por ejemplo, hashmaps), ordenados (por ejemplo, listas), etc. – Johansensen

1

Nada, en serio. Son solo dos palabras para el mismo término, como a los humanos nos encanta hacer. Sin embargo, afaik, el término oficial de CS es una estructura de datos, y el Estándar de C++ tiene requisitos específicos de C++ para el Contenedor. Sin embargo, en general, son equivalentes.

1

Un contenedor es un subconjunto de estructuras de datos. C++ impone requisitos especiales en los contenedores, que son implementaciones de diferentes estructuras de datos.

Una estructura de datos es, por wikipedia: "una forma particular de almacenar y organizar datos". Un contenedor es una construcción C++ que es una colección de registros, que a su vez es una estructura de datos.

0

Como dijo otro, esos términos son tan ampliamente utilizados que se usan con varios significados, pero aquí están los usos que he encontrado con más frecuencia.

La estructura de datos es un término de la ciencia de la computación, se puede utilizar en una discusión teórica sin referencia a ningún idioma específico. Hay muchas estructuras de datos discutidas en libros sobre algoritmos, como colas, árboles, tablas hash ... Una estructura de datos se puede implementar en prácticamente cualquier idioma.

Container es un término bastante usado en el contexto de un idioma específico, cuando hay una biblioteca disponible de contenedores ya implementados que el programador puede usar de inmediato. Varias bibliotecas de disctinct pueden implementar la misma estructura de datos (abstracta) (por ejemplo, una lista simplemente vinculada), pero con contenedores distintos, es decir, código fuente distinto y nombres distintos (uno podría llamarse "cola", otro "fifo", y una tercera "pila").

Además, un contenedor debe ser una forma de almacenar otros tipos, p. tiendas de vectores ints. Como ejemplo, hay varias maneras de representar un gráfico en la memoria: matriz de adyacencia, listas de adyacencia, estrella de avance ... Todas estas son estructuras de datos, pero no son contenedores, ya que no contienen otros tipos, solo represente los nodos y enlaces del gráfico. Los datos almacenados por estas estructuras de datos son los nodos y enlaces.

Cuestiones relacionadas