Blog de pabloo

PROGRAMACIÓN ALGORÍTMICA

Estructuras de datos y tipos de abstractos de datos.

Una estructura de datos es un modo de organizar una colección de datos de tipos básicos con el fin de facilitar su gestión.

Es posible encontrar literatura que hace referencia a esta estructura como vectores, matrices, tablas. En este caso, emplearemos indistintamente el término array o arreglo.

Un arreglo es una estructura de datos básica que guarda en posiciones de memoria contiguas un conjunto de datos pertenecientes todos ellos a un mismo tipo. El tamaño de arreglos se fija en el momento de definirlo. Para referirnos al arreglo utilizaremos un nombre de variable. Àra acceder a los distintos elementos del arreglo se utiliza un índice numérico que empieza por 0, no por 1. Es posible crear arreglos de una sola dimensión pero también de dos o más dimensiones.

Una dificultad con la que se encuentran los que se acercan por primera vez a las estructuras de datos, es separar el concepto teórico que define el tipo de abstracto de datos de la propia implementación.

Algunas de las estructuras que estudiaremos son pilas, colas y listas enlazadas. Estas estructuras se pueden construir empleando arreglos, cambiando solamente el modo de gestionarlos. Así, sobre una misma estructura de datos básica (arreglo) podemos construir distintos tipos de abstractos de datos (TAD), pilas, coladas y otros.

Un tipo de abstracto de datos es un modelo matemático que reúne en su definición la colección de datos que modela y las operaciones aplicables sobre esta.

En C y Java los arreglos empiezan a numerar sus posiciones en cero. Es decir, un arreglo de 10 elementos tendría por primer elemento el cero y por último el nueve.

Punteros:

C es un lenguaje muy flexible, tanto que nos permite manejar directamente el contenido de la memoria del ordenador. Se puede concebir la memoria como una larga sucesión de celdas que contienen las instrucciones y los datos de nuestros programas. Concretamente en este caso, las variables se sitúan unas a continuación de otras ocupando posiciones de memoria adyacentes. Cada tipo de variable primitiva mantiene un cierto número de posiciones, por ejemplo:

Tipo de datos

Espacio de memoria ocupada

Char

1 byte

Int

2 bytes

Float

4 bytes

Double

8 bytes

void

0 bytes

Hasta el momento no se había accedido directamente a la memoria del ordenador. Para almacenar información se declaraban variables y se les proporcionaba un nombre para utilizarlas como almacén de datos. En lenguaje C se dispone de un tipo de variables estáticas especiales llamadas punteros. Lo que diferencia a un puntero de una variable convencional es que contiene una dirección de memoria en lugar de un dato.

*Puntero: variable estática que contiene la dirección de memoria en la que se encuentra almacenada otra variable.*

La forma de declarar un puntero dentro de un programa en C sigue una sintaxis muy concreta. En primer lugar se indica el tipo de variable a la que se apunta, a continuación el símbolo asterisco (que indica el compilador que está declarando una variable puntero en lugar de una convencional) y para finalizar, el nombre del puntero. La sintaxis es la siguiente:

*tipo* nombre_de_variable_puntero;*

Ejemplo:

int*p1;//Puntero p1 apunta una variable de tipo entero.

char*p2;//Puntero p2 apunta una variable de tipo carácter.

Hay dos operadores que se emplean como punteros:

&: proporciona la dirección de memoria que ocupa una variable.

*:también denominado operador de dirección. Devuelve el contenido de una posición de memoria.

Además a la hora de imprimir en la consola, el contenido de un puntero se utilizará %p para que aparezca su contenido, una dirección de memoria hexadecimal.

Punteros como argumentos de las funciones C

Existen dos modos de pasar argumentos a una función en C: por valor o por referencia. Cuando se pasan argumentos por valor la función recibe una copia del argumento. De este modo, los posibles cambios que se hagan sobre los argumentos no afectarán a los originales, sino que lo harán sólo a la copia recibida en la función.

Este es el modo por defecto de pasar argumentos a una función y, aunque evita modificaciones accidentales de valores, es más seguro, duplica la memoria asignada a un determinado objeto: el original y la copia.

Cuando se pasan los argumentos por referencia 

Punteros y arreglos:

Cuando se declara un arreglo en C, se está creando una estructura estática cuyas dimensiones no pueden modificarse a lo largo de la ejecución del programa. Lo que quizá resulte sorprendente es que el nombre que otorgamos al arreglo es. en sí mismo un puntero a la primera posición que ocupa en memoria.

Especificaciones de formato

Estos códigos se emplean con funciones como printf() y scanf()


Comentarios

No hay ningún comentario

Añadir un Comentario: