Lissette pimentel 11 1149 --- listas, pilas y colas

12

Click here to load reader

Transcript of Lissette pimentel 11 1149 --- listas, pilas y colas

Page 1: Lissette pimentel 11 1149 --- listas, pilas y colas

Lissette Pimentel 11-1149Estructura de DatosFacilitadora: Rina Familia

Page 2: Lissette pimentel 11 1149 --- listas, pilas y colas

La lista enlazada es un TDA que nos permite almacenar

datos de una forma organizada, al igual que losvectores pero, a diferencia de estos, esta estructura esdinámica, por lo que no tenemos que saber "a priori"los elementos que puede contener.

En una lista enlazada, cada elemento apunta alsiguiente excepto el último que no tiene sucesor y elvalor del enlace es null. Por ello los elementos sonregistros que contienen el dato a almacenar y un enlaceal siguiente elemento. Los elementos de una lista,suelen recibir también el nombre de nodos de la lista.

Listas enlazadas.

Page 3: Lissette pimentel 11 1149 --- listas, pilas y colas

struct lista {

gint dato;

lista *siguiente;

};

Representa el dato a almacenar. Puede ser de cualquier tipo; en este ejemplo se trata de una lista de enteros.

Es un puntero al siguiente elemento de la lista; con este puntero enlazamos con el sucesor, de forma que podamos construir la lista.

Page 4: Lissette pimentel 11 1149 --- listas, pilas y colas

Para que esta estructura sea un TDA lista enlazada, debe

tener unos operadores asociados que permitan lamanipulación de los datos que contiene. Los operadoresbásicos de una lista enlazada son:

Insertar: inserta un nodo con dato x en la lista, pudiendorealizarse esta inserción al principio o final de la lista o bienen orden.

Eliminar: elimina un nodo de la lista, puede ser según laposición o por el dato.

Buscar: busca un elemento en la lista. Localizar: obtiene la posición del nodo en la lista. Vaciar: borra todos los elementos de la lista

Page 5: Lissette pimentel 11 1149 --- listas, pilas y colas

Las pilas son estructuras de datos que tienes dos

operaciones básicas:

push (para insertar un elemento) y pop (paraextraer un elemento). Su característicafundamental es que al extraer se obtiene siempre elúltimo elemento que acaba de insertarse. Por estarazón también se conocen como estructuras dedatos LIFO (del inglés Last In First Out).

Pilas:

Page 6: Lissette pimentel 11 1149 --- listas, pilas y colas

Una posible implementación mediante listas

enlazadas sería insertando y extrayendo siemprepor el principio de la lista. Gracias a las pilas esposible el uso de la recursividad.

Las pilas se utilizan en muchas aplicaciones queutilizamos con frecuencia. Por ejemplo, la gestiónde ventanas en Windows (cuando cerramos unaventana siempre recuperamos la que teníamosdetrás).

Page 7: Lissette pimentel 11 1149 --- listas, pilas y colas

Otro ejemplo es la evaluación general de cualquier

expresión matemática para evitar tener quecalcular el número de variables temporales quehacen falta. Por ejemplo:

Page 8: Lissette pimentel 11 1149 --- listas, pilas y colas

Las colas también son llamadas FIFO (First In First Out), quequiere decir “el primero que entra es el primero que sale”.

Colas simples:

Se inserta por un sitio y se saca por otro, en el caso de lacola simple se inserta por el final y se saca por el principio.Para gestionar este tipo de cola hay que recordar siemprecual es el siguiente elemento que se va a leer y cual es elúltimo elemento que se ha introducido.

Colas

Page 9: Lissette pimentel 11 1149 --- listas, pilas y colas

Colas circulares:

En las colas circulares se considera que después delúltimo elemento se accede de nuevo al primero. Deesta forma se reutilizan las posiciones extraídas, elfinal de la cola es a su vez el principio, creándose uncircuito cerrado.

Page 10: Lissette pimentel 11 1149 --- listas, pilas y colas

Lo que se ha hecho es insertar (5), sacar (1), e insertar (8).

Se sabrá que una tabla está llena cuando “rear” y “front”estén en una posición de diferencia.

El teclado de ordenador se comporta exactamente comouna cola circular.

Para implementar las colas circulares mediante listasenlazadas se pone en el tipo T_Lista los punteros front yrear.

Page 11: Lissette pimentel 11 1149 --- listas, pilas y colas

Colas con prioridad:

Las colas con prioridad se implementan mediante listas o arraysordenados. No nos interesa en este caso que salgan en el orden deentrada sino con una prioridad que le asignemos. Puede darse el casoque existan varios elementos con la misma prioridad, en este casosaldrá primero aquel que primero llego (FIFO).

Paquete Pila:

Finalmente implementamos el paquete pila tanto para un array comopara listas. Esta implementación será realmente útil para el temasiguiente, recursividad.

Page 12: Lissette pimentel 11 1149 --- listas, pilas y colas

Gracias!!!