jueves, 17 de octubre de 2013

Pilas, Colas, Listas.

Una pila, es una lista ordenada o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Outúltimo en entrar, primero en salir) que permite almacenar y recuperar datos. Esta estructura se aplica en multitud de ocasiones en el área de informática debido a su simplicidad y ordenación implícita de la propia estructura.
Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa,retirar (o desapilar, pop), que retira el último elemento apilado.



En cada momento sólo se tiene acceso a la parte superior de la pila, es decir, al último objeto apilado (denominado TOSTop of Stack en inglés). La operación retirar permite la obtención de este elemento, que es retirado de la pila permitiendo el acceso al siguiente (apilado con anterioridad), que pasa a ser el nuevo TOS.
Por analogía con objetos cotidianos, una operación apilar equivaldría a colocar un plato sobre una pila de platos, y una operación retirar a retirarlo.

Las pilas suelen emplearse en los siguientes contextos:

  • Evaluación de expresiones en notación postfija (notación polaca inversa).
  • Reconocedores sintácticos de lenguajes independientes del contexto
  • Implementación de recursividad.


Colas

Una cola (también llamada fila) es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir.
Las colas se utilizan en sistemas informáticos, transportes y operaciones de investigación (entre otros), dónde los objetos, personas o eventos son tomados como datos que se almacenan y se guardan mediante colas para su posterior procesamiento. Este tipo de estructura de datos abstracta se implementa en lenguajes orientados a objetos mediante clases, en forma de listas enlazadas.

Operaciones básicas de colas.-

  • Crear: se crea la cola vacía.
  • Encolar (añadir, entrar, insertar): se añade un elemento a la cola. Se añade al final de esta.
  • Desencolar (sacar, salir, eliminar): se elimina el elemento frontal de la cola, es decir, el primer elemento que entró.
  • Frente (consultar, front): se devuelve el elemento frontal de la cola, es decir, el primer elemento que entró.



Listas

Al contrario que las pilas y las colas las listas enlazadas pueden acceder a una zona de memoria de forma aleatoria, ya que cada trozo de información lleva un enlace al siguiente elemento de la cadena. Una lista enlazada requiere una estructura de datos compleja, al contrario que las colas o las pilas, que pueden operar con elementos simples o complejos, además una operación de recuperación en una lista enlazada no elimina ni destruye el elemento de la lista. Para poder eliminar un elemento de una lista es necesario utilizar una operación especifica de eliminación.

Las listas enlazadas se utilizan principalmente para dos propósitos, crear arrays de un tamaño desconocido en memoria, y los archivos de almacenamiento en disco para bases de datos, las listas enlazadas permiten insertar y eliminar nuevos elementos.

Las listas pueden ser simplemente enlazadas o doblemente enlazadas, las simplemente enlazadas contienen un enlace al elemento siguiente, las doblemente enlazadas tanto al siguiente elemento como al elemento anterior del la lista.

Listas simplemente enlazadas.-

Una lista  simplemente enlazada necesita que cada elemento contenga un enlace con el siguiente elemento, cada elemento consiste en una estructura de campos de información  a punteros de enlace.

Existen dos formas de construir una lista simplemente enlazada , la primera es añadir un nuevo elemento al principio o al final de la lista, la otra añade los elementos en un punto especifico de la lista.

Si la lista ya esta ordenada, es conveniente mantenerla así, insertando los nuevos elementos en su lugar apropiado para lo cual se explora la lista de forma secuencial hasta encontrar el lugar apropiado, la nueva dirección se inserta en ese punto y los enlaces se vuelven a colocar como sea necesario.

Se pueden dar tres posibles situaciones al insertar un elemento en una lista enlazada.

Primero: El elemento se puede convertir en el primer elemento.

Segundo: Puede ser insertado entre otros dos elementos.

Tercero: Se puede convertir en el ultimo elemento de la lista.

Tener en cuenta que al cambiar el primer elemento hay que actualizar el punto de entrada en alguna parte del programa, también se puede utilizar un centinela, que no es
más que el primer elemento no cambia nunca con un valor especial, con lo que siempre será el primer elemento  de la lista pero se necesita una posición más de memoria. Para recuperar un elemento de la lista es como seguir una cadena, una rutina basada en el campo nombre. Para borrar un elemento al igual que para insertar un elemento se pueden dar los mismos tres casos, si se borra el primer elemento de la lista el puntero previo ha de hacerse nulo, y la función tiene que devolver un puntero al comienzo de la lista para que cuando se borre el primer elemento de la lista, el programa conozca la dirección del nuevo primer elemento de la lista. Las listas simplemente enlazadas solo se pueden recorrer en sentido ascendente y no en sentido descendente, para lo cual se pueden utilizar las listas doblemente enlazadas.



 Listas doblemente enlazadas.-

Las listas doblemente enlazadas consisten en datos y enlaces tanto al elemento siguiente como al elemento anterior. Con lo que se consiguen dos grandes ventajas, primero la lista se puede leer en cualquier dirección, la segunda es que se pueden leer los enlaces hacia delante como hacia atrás, con lo que si un enlace resulta no valido se puede reconstruir utilizando el otro enlace.



Como en las listas simplemente enlazadas, las doblemente enlazadas pueden contener una función que almacene cada elemento en una posición especifica de la lista a medida que esta se construye, en lugar de colocar cada elemento al final de la lista.






No hay comentarios.:

Publicar un comentario