miércoles, 6 de julio de 2011

Ventajas de punteros * y mas


¿Que es un puntero?

Un puntero o apuntador es una variable que relaciona una región de memoria; en pocas palabras es una variable cuyo valor es una dirección de memoria, por ejemplo si se tiene una variable ' a ' de tipo puntero que contiene una dirección de memoria en la que se encuentra almacenado un valor ' b ' se dice que ' a ' apunta a ' b

Reservación dinámica de arreglos

Cuando utilizamos punteros tenemos la posibilidad de realizar una asiganación dinámica de memoria. ¿Esto que significa? significa que la reserva de memoria se realiza dinámicamente en tiempo de ejecución, sin la necesidad de tener que especificar en la declaración de variables la cantidad de memoria que vamos a utilizar. La reserva de memoria dinámica le da una gran flexibilidad a los programas porque le permite al programador la posibilidad de reservar la cantidad de memoria exacta en el preciso instante en el que se vaya a necesitar, sin tener que realizar una reserva por exceso para prevenir lo que pueda se llegar a necesitar.

Dado que los punteros se pueden aplicar a cualquier tipo de variable se puede realizar una asignación de memoria dinámica para cualquier variable.

Esto consiste en que declaramos y utilizamos un arreglo con un definido tamaño, empezamos a llenar desde la primea celda, cuando se a llenado mas del 80% de las celdas se tendrá que duplicar el tamaño del arreglo, pero si solo se llena el 40% o menos, se elimina la mitad de las celdas, esto hace que se genere otro arreglo (se dupliquen las celdas o se eliminen) y se copie el contenido del arreglo anterior.

Imagen que demuestra la forma de eliminar espacio que no se necesita.

Imagen que demuestra la forma de duplicar espacio que se pueda necesitar.


Listas enlazadas

Una lista enlazada es una de las estructuras de datos fundamentales, puede ser usada para poner en funcionamiento otras estructuras de datos. Consiste en una secuencia de datos, en los que se guardan campos de datos arbitrarios y una o dos punteros al dato anterior o posterior.

Permiten ingresar y eliminar datos en cualquier punto de la lista en tiempo constante , pero no permiten un acceso aleatorio. Existen diferentes tipos de listas enlazadas:

Listas simples enlazadas

La lista enlazada básica es la lista enlazada simple la cual tiene un enlace por dato. Este enlace apunta al siguiente dato en la lista, o al valor NULL o a la lista vacía, si es el último dato. Una lista enlazada simple contiene dos valores: el valor actual del dato y un enlace al siguiente dato.

Imagen que demuestra la representación de una lista simple enlazada.

Listas doblemente enlazadas

Un tipo de lista enlazada más elegante es la lista doblemente enlazada o lista enlazadas de dos vías. Cada dato tiene dos enlaces: uno apunta al dato anterior, o apunta al valor NULL si es el primer dato; y otro que apunta al dato siguiente, o apunta al valor NULL si es el último dato.

Imagen que demuestra la representación de una lista doblemente enlazada.

Listas enlazadas circulares

En una lista enlazada circular, el primer y el último datos están unidos los 2 juntos. Esto se puede hacer tanto para listas enlazadas simples como para las doblemente enlazadas. Para recorrer una lista enlazada circular podemos empezar por cualquier dato y seguir la lista en cualquier dirección hasta que se regrese hasta el dato original. Viéndolo de otra forma, las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. 

Imagen que demuestra la representación de una lista enlazada circular.


Colas

Una cola es una estructura de datos, que se caracteriza por ser una secuencia de elementos en la que la operación de ingresar se realiza por un extremo y la operación de extracción por el otro. 

Un ejemplo muy claro para esta definición es la comparación con una fila o hilera de personas en un banco, esto consiste en que la primera persona (en caso de las colas un elemento) que entre, es la primera que saldrá. Esto también es conocido como estructura FIFO (First In First Out), que significa "Primero entrar, primero en salir", que es lo que vimos anteriormente.

Una característica de las colas es que solo le podemos acceder al primer y ultimo dato, al igual que solo podemos ingresar datos por el final y eliminar por el inicio.

Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación, dónde los objetos, personas o eventos se pueden tomar como datos que almacenan y guardan mediante colas para su posterior procesamiento.

Imagen que representa gráficamente una cola.

Pilas

Una pila típica es un área de la memoria de la computadora con un origen fijo y un tamaño variable.

Una pila es una lista ordinal o estructura de datos en la que la manera de acceso a sus elementos es que si agrega un elemento al principio y cuando se elimina un elemento se quita también del principio, esto permite almacenar y recuperar datos.

Un ejemplo simple de este concepto lo vemos en una pila de platos o libros, donde vamos colocando cada uno de estos encima del otro, y cuando queremos tomar un plato o un libro tomaremos el primero para después volverlo a colocar en el mismo lugar, cuando terminamos de leer el libro o cuando lavamos el plato. Esto también es conocido como estructura LIFO (Last In, First Out) que significa "Ultimo en entrar, primero en salir", que es lo que explicaba en el ejemplo.

Son importantes en simulación de sistemas, optimización, electrónica, etc.

Imagen que representa gráficamente una pila.


En los casos de las imágenes de las listas enlazadas fueron  hechas por mi, excepto la primera de eliminación de memoria.

1 comentario: