5

Una definición aproximada de una estructura de datos es que le permite almacenar datos y aplicar un conjunto de operaciones sobre esos datos mientras se preserva la coherencia de los datos antes y después de la operación. Sin embargo, algunas personas insisten en que una variable primitiva como 'int' también se puede considerar como una estructura de datos. Obtengo esa parte donde te permite almacenar datos, pero supongo que falta la parte de la operación. Las variables primitivas no tienen operaciones asociadas. Por lo tanto, creo que a menos que tenga un conjunto de operaciones definidas y asociadas a él, no puede llamarlo estructura de datos. 'int' no tiene ninguna operación asociada, se puede operar con un conjunto de operadores genéricos.¿Se puede considerar una variable como 'int' como una estructura de datos primitiva/fundamental?

Por favor, avísenme si tengo algo mal aquí.

Respuesta

4

Decir que algo está estructurado implica que hay una forma o formato que define CÓMO se estructuran los datos. Tenga en cuenta que esto no tiene nada que ver con la forma en que los datos se almacenan realmente. Por ejemplo, podría crear una estructura de datos que existe completamente dentro de un Entero único, pero que representa una cantidad de valores diferentes.

Una estructura de datos es una construcción arbitraria utilizada para describir cómo almacenar datos en un sistema. Puede ser tan simple como una sola primitiva, o tan compleja como una clase. Entonces la respuesta es en gran medida subjetiva. Es "sí" si decide usar una primitiva como tal, que una primitiva simple puede considerarse una estructura de datos primitiva, porque describe CÓMO desea almacenar un elemento de datos. La respuesta también es "no" porque describe un elemento de una estructura y no necesariamente la estructura completa en sí misma.

En cuanto a cómo esto se relaciona con las operaciones, en sentido estricto una estructura de datos no tiene nada que ver con el comportamiento, es simplemente un mecanismo de almacenamiento. Preservar la coherencia de los datos es realmente una cuestión de comportamiento. Sí, tu compilador probablemente arroje errores si intentas conectar un valor de 32 bits a un byte, pero eso es sintomático del comportamiento del sistema (es decir, de la compilación) que actúa sobre la estructura de datos de tu aplicación, de la cual tu los primitivos son un elemento.

+0

+1 Y bienvenido a SO –

2

No creo que su definición de estructura de datos sea correcta.

Me parece que un struct (sin métodos) es una estructura de datos válida, pero no tiene 'operaciones' reales. Y eso no es importante. Tiene datos.

Para ese fin, e int contiene datos, un objeto contiene datos. Son estructuras de datos (técnicamente).

Dicho esto, nunca me encuentro diciendo "¿Qué estructura de datos debo usar? Sé! An int!".

Yo diría que necesita volver a evaluar el significado de "estructura de datos".

0

Argumentaría que "int" es una estructura de datos, tiene una representación y un significado definidos. Es decir, según su sistema, tiene una longitud específica, un conjunto específico de operadores disponibles para él y una representación específica (ya sea un cumplido a dos). Está diseñado para contener "números enteros".

Prácticamente, la distinción no es particularmente relevante.

+0

Un buen comentario, pero estoy en desacuerdo con que los operadores tengan algo que ver con la definición de una estructura de datos. Por supuesto, puede simplemente almacenar datos y recuperarlos más tarde como referencia sin modificarlos ni compararlos. Por supuesto, sin las operaciones apropiadas (como establecer/obtener, etc.), sus datos pueden carecer del significado o propósito adicional que requiere para respaldar su propósito. Estoy de acuerdo, sin embargo, que para fines prácticos, la distinción no es relevante. :-) –

1

Las primitivas hacen tienen operaciones unidas a ellas; sin embargo, es posible que no estén en el formato de métodos como se esperaría en un paradigma orientado a objetos.

Asignación =, suma +, resta -, comparación ==, etc. son todas operaciones. Especialmente si considera que puede definir explícitamente, anular o sobrecargar estas operaciones para clases arbitrarias (es decir, estructuras de datos) en algunos idiomas (por ejemplo, C++), entonces las primitivas int, char, o lo que sea, no son muy diferentes.

0

Las variables primitivas no tienen operaciones asociadas. Por lo tanto, creo que a menos que tenga un conjunto de operaciones definidas y asociadas a él, no puede llamarlo estructura de datos.

'int' no tiene ninguna operación asociada, se puede operar con un conjunto de operadores genéricos.

¿Eres genérico? Entonces, ¿cómo es que 2+2 funciona, pero "ninja" + List<float> no? Si el operador fuera genérico, funcionaría en cualquier cosa. No es así Solo funciona en algunos tipos predefinidos, como los enteros.

Ints ciertamente tienen un conjunto de operaciones definidas en ellos. Operaciones aritméticas tales como suma, resta, multiplicación o división, por ejemplo.La mayoría de los lenguajes también tienen algún tipo de funcionalidad similar a ToString() definida en enteros. Pero no puede hacer solo nada con un int. Por ejemplo, no puede pasar un int a una función que espera una cadena. int s tienen un conjunto muy específico de operaciones definidas en ellos. Esas operaciones simplemente no son métodos miembros. Vienen en forma de operadores y funciones que no son miembros o métodos miembros de otras clases. Pero todavía son operaciones que funcionan en enteros.

+0

"no se puede pasar un int a una función esperando una cadena" <- se puede si el lenguaje es sin tipo, como JavaScript o PHP, por ejemplo. –

+0

Cuando veo stack tengo operaciones como push y pop. Estos se adjuntan a la pila, no se puede hacer push o pop en la lista de enlaces. Mi duda es que es realmente necesario tener operadores definidos para que una variable se llame como una estructura de datos. –

+0

@Ravi Todos los tipos tienen operadores, primitivos o no. Un tipo sin operadores sería inútil. Incluso los DTO (e incluso si no cuenta el constructor), que normalmente no tienen otros métodos, todavía tienen operadores de acceso de miembros. No estoy seguro de a dónde vas con este argumento más. –

0

No creo, (ref: Wikipedia entry) que la estructura de datos incluya la definición de operaciones permisibles (en los operadores). Por supuesto, podríamos citar la clase C++ como un contraejemplo en el que podemos definir operadores sobrecargados. Al mismo tiempo, definimos una estructura simplemente como un tipo de datos compuesto/definido por el usuario y no declaramos ninguna operación permisible sobre ellos. Permitimos que el compilador lo descubra.

1

Su definición de estructura de datos no es del todo correcta. Una estructura de datos no necesariamente tiene comportamientos u operaciones adjuntos. Un ADT o tipo de datos abstracto es lo que está describiendo como una estructura de datos. Un ADT incluye los datos y los comportamientos u operaciones que funcionan con esos datos. Un int en sí mismo no es un ADT, pero supongo que podría llamarlo una estructura de datos. Si encapsula un int y sus operaciones, entonces tiene un ADT que es lo que creo que está tratando de describir como una estructura de datos. Las clases proporcionan un mecanismo para la implementación de ADT en idiomas modernos.

wikipedia tiene una buena descripción de los tipos de datos abstractos.

0

'int' no tiene ninguna operación asociada, se puede operar con un conjunto de operadores genéricos.

Las operaciones están íntimamente ligadas a las cosas que operan en; no hay tal cosa como operaciones genéricas.

Esto es cierto en el sentido matemático (< obras en el conjunto de los enteros, pero no tiene sentido para los números complejos), y también en el sentido científico ordenador (evaluación a + b requiere que a y b son o pueden convertirse en tipos compatibles en los que se define la operación +).

0

Por supuesto, depende de lo que quiere decir con "estructura de datos". Otros se han centrado en si su definición es correcta y plantean buenas preguntas. Pero, ¿y si dijéramos: "vamos a ignorar el término por ahora, y enfócate en lo que describes"? En otras palabras, ¿y si miramos a

  • Una porción de datos que tiene una interpretación designada de su valor
  • Un conjunto de operaciones en esos datos

entonces, ciertamente, int califica. (Si no hubiera operaciones en int, ¡todos estaríamos atascados!)

Para un enfoque más matemático de la programación que comienza con estas preguntas y las lleva a lo que algunos han llamado "álgebra de cálculo", consulte Elements of Programming por Alex Stepanov y Paul McJones.

Cuestiones relacionadas