PILA
Una pila es un TDA que se caracteriza por el hecho de que
el último elemento en entrar es el primero en salir
La definición de pila nos indica que todas las operaciones
trabajan sobre el mismo extremo de la secuencia. En otras palabras, los
elementos se sacan de la estructura en el orden inverso al orden en que se han
insertado, ya que el único elemento de la secuencia que se puede obtener es el
último (figura 1).
EJEMPLOS DE PILAS
En nuestra vida diaria podemos ver este comportamiento muy
a menudo. Por ejemplo, si apilamos los platos de una vajilla, únicamente
podremos coger el último plato añadido a la pila, porque cualquier intento de
coger un plato del medio de la pila (como el plato oscuro de la figura 2)
acabará en un destrozo. Otro ejemplo lo tenemos en los juegos de cartas, en los
que generalmente robamos las cartas (de una en una) de la parte superior del
mazo (figura 2).
En el mundo informático también encontramos pilas, como por
ejemplo, en los navegadores web. Cada vez que accedemos a una nueva página, el
navegador la añade a una pila de páginas visitadas de manera que cuando
seleccionamos la opción “Anterior” el navegador coge la página que se encuentra
en la cima de la pila, porque es justamente la última página visitada.
Otro ejemplo lo
tenemos en los procesadores de texto, en los que los cambios introducidos en el
texto tambbien se almacenan en una pila. Cada vez que apretamos la combinacion
de teclas Ctrl+Z deshacemos el ultimo cambio introducido, mientras que cada vez
que apretamos la combinacion Ctrl+Y volvemos a añadir a la pila el cambio
deshecho.
EJEMPLO
MAS ESTRUCTURADO.
Se pide definir una nueva operación, denominada
intersección, que amplíe el TAD cola. Esta operación recibirá como entrada dos
colas con los elementos ordenados de manera creciente y devolverá una cola
ordenada de forma estrictamente creciente solo con los elementos que aparezcan
en las dos colas de entrada (fig.13).
Fig. 13. Ejemplo de la operación intersección
El hecho que la cola esté ordenada nos evita tener
que recorrer toda la cola cada vez que queramos comprobar si contiene un
elemento dado. En otras palabras, si el primer elemento de la cola a es más
pequeño que el primer elemento de la cola b, ya es seguro que no encontraremos
un elemento igual en toda la cola b, porque todos los elementos de la cola b
serán mayores que el primero de la cola a.
Por tanto con la información establecemos que
la estrategia de la operación intersección será la siguiente:
1.- Crear la cola en la que se encolarán los
elementos comunes a ambas colas de entrada.
2.- Mientras las dos colas no estén vacías,
leer el primer elemento de ambas.
3.- si los 2 elementos son iguales, encolar el
elemento en la cola resultado y desencolarlo de las 2 colas de entrada. En caso
contrario si los 2 elementos no son iguales, desencolar solo el elemento más
pequeño.
4.- Volver al punto 2 mientras no se haya
vaciado ninguna de las dos colas.
OPERACIONES
BÁSICAS PARA TRABAJAR CON PILAS.
Nombre
|
Descripción
|
Crear
|
Crea una pila vacía
|
Apilar
|
Inserta un elemento en la pila
|
Desapilar
|
Extrae el elemento situado en la cima de la
pila
|
Cima
|
Devuelve el elemento situado en la cima de la
pila
|
Vacía
|
Devuelve cierto
si la pila está vacía y falso
en caso contrario
|
Las operaciones del TAD pila se clasifican en:
• Operaciones constructoras: crear, apilar y desapilar.
• Operaciones consultoras: cima y vacía.
Igualmente, las operaciones constructoras se
clasifican en:
·
Operaciones
generadoras: Crear y Apilar, porque
son imprescindibles para conseguir cualquier estado de la pila.
·
Operaciones
modificadoras: Desapilar, porque
modifica el estado de la pila extrayendo el elemento de la cima, pero no es una
operación imprescindible para construir
una pila.
LISTAS
Una lista es un TAD caracterizado por el hecho
de que permite añadir, borrar o consultar cualquier elemento de la secuencia.
Es la estructura lineal más flexible, hasta el punto de considerar los TAD pila
y cola casos particulares del TAD lista.
OPERACIONES
BÁSICAS CON LISTAS
Nombre
|
Descripción
|
Crear
|
Crea una lista vacía
|
Insertar
|
Inserta un elemento en la lista delante del
punto de interés
|
Borrar
|
Extrae el elemento distinguido y desplaza el
punto de interés al elemento siguiente
|
Actual
|
Devuelve el elemento distinguido
|
Vacía
|
Devuelve cierto
si la lista está vacía y falso en
caso contrario
|
Principio
|
Sitúa el punto de interés sobre el primer
elemento de la lista
|
Avanzar
|
Desplaza el punto de interés al elemento
siguiente
|
Fin
|
Devuelve cierto
si el punto de interés está en el extremo derecho (final) de la lista y falso en caso contrario
|
TIPOS DE LISTAS
LISTAS ENLAZADAS LINEALES: LISTAS SIMPLES ENLAZADAS
La lista enlazada básica es la lista enlazada simple la
cual tiene un enlace por nodo. Este enlace apunta al siguiente nodo (o indica
que tiene la dirección en memoria del siguiente nodo) en la lista, o al
valor NULL o a la lista vacía, si es el último nodo.
LISTAS DOBLEMENTE ENLAZADAS
Un tipo de lista enlazada más sofisticado es la lista
doblemente enlazada o lista enlazadas de dos vías. Cada nodo tiene
dos enlaces: uno apunta al nodo anterior, o apunta al valor NULL si
es el primer nodo; y otro que apunta al nodo siguiente, o apunta al
valor NULL si es el último nodo.
LISTAS ENLAZADAS CIRCULARES
En una lista enlazada circular, el primer y el último nodo
están unidos 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 nodo y seguir la lista en cualquier dirección
hasta que se regrese hasta el nodo original. Desde otro punto de vista, las
listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin.
Este tipo de listas es el más usado para dirigir buffers para “ingerir” datos,
y para visitar todos los nodos de una lista a partir de uno dado.
Una lista enlazada circular que contiene tres valores enteros.
LISTAS ENLAZADAS SIMPLES CIRCULARES
Cada nodo tiene un enlace, similar al de las listas
enlazadas simples, excepto que el siguiente nodo del último apunta al primero.
Como en una lista enlazada simple, los nuevos nodos pueden ser solo
eficientemente insertados después de uno que ya tengamos referenciado.
LISTAS ENLAZADAS DOBLEMENTE CIRCULARES
En una lista enlazada doblemente circular, cada nodo tiene
dos enlaces, similares a los de la lista doblemente enlazada, excepto que el
enlace anterior del primer nodo apunta al último y el enlace siguiente del
último nodo, apunta al primero. Como en una lista doblemente enlazada, las
inserciones y eliminaciones pueden ser hechas desde cualquier punto con acceso
a algún nodo cercano. Aunque estructuralmente una lista circular doblemente
enlazada no tiene ni principio ni fin, un puntero de acceso externo puede
establecer el nodo apuntado que está en la cabeza o al nodo cola, y así
mantener el orden tan bien como en una lista doblemente enlazada.
NODOS CENTINELAS
A veces las listas enlazadas tienen un nodo
centinela (también llamado falso nodo o nodo ficticio) al
principio o al final de la lista, el cual no es usado para guardar datos. Su
propósito es simplificar o agilizar algunas operaciones, asegurando que
cualquier nodo tiene otro anterior o posterior, y que toda la lista (incluso
alguna que no contenga datos) siempre tenga un “primer y último” nodo.
COLA
Una cola es un TDA caracterizado por el hecho que el primer
elemento en entrar es el primero en salir.
La
definición de cola nos indica que las operaciones trabajan sobre ambos extremos
de la secuencia: un extremo para añadir los elementos y el otro para
consultarlos o extraerlos. En otras palabras, los elementos se extraen en el
mismo orden en que se han insertado previamente, ya que se insertan por el
final de la secuencia y se extraen por la cabecera (figura 6).
La mayoría de nuestra vida nos la pasamos haciendo colas:
para comprar la entrada en un cine, para pagar en la caja de un supermercado,
para visitarnos por el médico, etc. La idea siempre es la misma: se atiende la
primera persona de la cola, que es la que hace más rato que espera, y una vez
atendida sale de la cola y la persona siguiente pasa a ser la primera de la
cola (figura 7).
Si en el mundo real es habitual ver colas, en el mundo
informático todavía lo es más, cuando el sistema operativo ha de gestionar el
acceso a un recurso compartido (procesos que quieren ejecutarse en la CPU,
trabajos que se envían a una impresora, descarga de ficheros etc.) una de las
estrategias más utilizadas es organizar las peticiones por medio de colas. Por
ejemplo, la figura 8 nos muestra una captura de una cola de impresión en un
instante dado, en este caso la tarea 321 se está imprimiendo porque es la
primera en la cola, mientras que la tarea 326 será la última en imprimirse porque
ha sido la última en llegar
Nombre
|
Descripción
|
Crear
|
Crea una cola vacía
|
Encolar
|
Inserta un elemento en la cola
|
Desencolar
|
Extrae el elemento situado al principio de la
cola
|
Cabeza
|
Devuelve el elemento situado al principio de
la cola
|
Vacía
|
Devuelve cierto
si la cola está vacía y falso en
caso contrario
|
OPERACIONES BASICAS CON COLAS
APLICACIONES DE LAS COLAS
Esta estructura de datos se usa en muchos sistemas
operativos, por ejemplo Unix, para llevar el control de la ejecución de procesos, cada proceso en
el sistema es almacenado en una lista y esta se va recorriendo, dándole un
pequeño tiempo del microprocesador a cada proceso, durante la fracción de
segundo de cada proceso este asume que tiene el control total del procesador. Las
Colas también se utilizan en muchas maneras en
los sistemas operativos para planificar el uso de los
distintos recursos de la computadora. Uno de estos recursos es
la propia CPU (Unidad Central de Procesamiento).Si está trabajando en
un sistema multiusuario, cuando le dice a la
computadora que ejecute un programa concreto, el sistema
operativo añade su petición a su "cola de trabajo".
Cuando su petición llega al frente de la cola, el programa
solicitado pasa a ejecutarse. Igualmente, las colas se utilizan para
asignar tiempo a los distintos usuarios de los dispositivos de
entrada/salida (E/S), impresoras, discos, cintas y demás. El sistema
operativo mantiene colas para peticiones de imprimir, leer o escribir en cada
uno de estos dispositivos.







No hay comentarios:
Publicar un comentario