Page 1

| A帽o 1 | Edici贸n 01 | Noviembre 2010

V-17380456-0

|PILAS

Implementaci贸n mediante array y mediante lista enlazada

|colas Colas Lineales, circulares, dobles y de prioridad.

Publicaci贸n Online

1


Casa de Estudio: Universidad Fermín Toro Facultad: Ingeniería Rectora: Dra. Mayra Guijarro

Carrera: Ingeniería Computación Directora de Escuela: Ing. Yaneth Margarita Castillo Cátedra: Análisis de Algoritmo Prof.: Ing. Elvia Sánchez

Los datos físicos se encuentran asociados a un mecanismo de datos, que controla la forma en la que la información puede ser accedida por los programas, existen principalmente cuatro tipos de estos mecanismos: Las colas, pilas, listas y árboles, cada uno de los métodos mencionados proporciona una solución a cada tipo de problema. Cada uno un dispositivo que realiza una operación de almacenamiento y de recuperación de los datos dados. Todos ellos tienen dos elementos en común, como es el almacenamiento de datos y la recuperación de datos. En esta primera edición de COPITAS profundizaremos en las Colas y las Pilas.

Alumna: Mariana Mavare 2

Mariana Mavare

03 || |PILAS Es una lista ordinal 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.

13| |colas

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


Es una estructura de datos de acceso restrictivo a sus elementos. Se puede entender como una pila de libros que se amontonan de abajo hacia arriba. En principio no hay libros; después ponemos uno, y otro encima de éste, y así sucesivamente. Posteriormente los solemos retirar empezando desde la cima de la pila de libros, es decir, desde el último que pusimos, y terminaríamos por retirar el primero que pusimos, posiblemente ya cubierto de polvo.

3


Las pilas ofrecen dos operaciones fundamentales, que son apilar y desapilar sobre la cima. El uso que se les de a las pilas es independiente de su implementaci贸n interna. Es decir, se hace un encapsulamiento. Por eso se considera a la pila como un tipo abstracto de datos. Es una estructra de tipo LIFO (Last In First Out), es decir, 煤ltimo en entrar, primero en salir.

4


Implementación mediante array

Esta implementación es estática, es decir, da un tamaño máximo fijo a la pila, y si se sobrepasa dicho límite se produce un error. La comprobación de apilado en una pila llena o desapilado en una pila vacía no se han hecho, pero sí las funciones de comprobación, que el lector puede modificar según las necesidades de su programa.

5


Implementaci贸n mediante array

Declaraci贸n: struct tpila { int cima; Int elementos[MAX_PILA]; }; Nota: MAX_PILA debe ser mayor o igual que 1.

Procedimiento de Creaci贸n: void crear struct tpila *pila) { pila->cima = -1; } Procedimiento de Pila Vac铆a: int vacia(struct tpila *pila) { return (pila->cima == -1); }

6


Implementaci贸n mediante array

Procedimiento de Pila Llena : int llena(struct tpila *pila) { return (pila->cima == MAX_PILA); } Procedimiento de Apilado: void apilar(struct tpila *pila, int elem) { pila->elementos[++pila->cima] = elem; } 7


Implementaci贸n mediante array

Procedimiento de Desapilado: void desapilar(struct tpila *pila, int *elem) { *elem = pila->elementos[pila>cima--]; }

8


Implementación mediante Lista Enlazada

Para hacer la implementación se utiliza una lista con cabecera ficticia (ver apartado de listas). Dado el carácter dinámico de esta implementación no existe una función que determine si la pila está llena. Si el usuario lo desea puede implementar un análisis del código devuelto por la función de asignación de memoria.

9


Implementaci贸n mediante Lista Enlazada

Procedimiento de Creaci贸n: Declaraci贸n: struct tpila { int clave; struct tpila *sig; }

void crear(struct tpila **pila) { *pila = (struct tpila *) malloc(sizeof(struct tpila)); (*pila)->sig = NULL; } Procedimiento de Pila Vac铆a: int vacia(struct tpila *pila) { return (pila->sig == NULL); }

10


Implementaci贸n mediante Lista Enlazada

Procedimiento de Apilado: void apilar(struct tpila *pila, int elem) { struct tpila *nuevo; nuevo = (struct tpila *) malloc(sizeof(struct tpila)); nuevo->clave = elem; nuevo->sig = pila->sig; pila->sig = nuevo; }

11


Implementaci贸n mediante Lista Enlazada

Procedimiento de Desapilado: void desapilar(struct tpila *pila, int *elem) { struct tpila *aux; aux = pila->sig; *elem = aux->clave; pila->sig = aux->sig; free(aux); }

12


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.

13


El tipo cola representa la idea que tenemos de cola en la vida real. La cola para subir al autobús está compuesta de elementos (personas), que dispone de dos extremos comienzo y fin. Por el comienzo se extraerá un elemento cuando haya comprado el billete para su viaje, y si llega una nueva persona con intención de usar el autobús, tendrá que colocarse al final y esperar que todos los elementos situados antes que él abandonen la cola.

14


Colas de prioridad

En ellas, los elementos se atienden en el orden indicado por una prioridad asociada a cada uno. Si varios elementos tienen la misma prioridad, se atenderĂĄn de modo convencional segĂşn la posiciĂłn que ocupen.

15


Colas de prioridad

Hay 2 formas de implementaciĂłn: ademĂĄs los datos no son datos sino son resultados que se representan a travĂŠs del tiempo. puede ser alguien o algo. 1. AĂąadir un campo a cada nodo con su prioridad. Resulta conveniente mantener la cola ordenada por orden de prioridad. 2. Crear tantas colas como prioridades haya, y almacenar cada elemento en su cola. 16


Colas Lineales

La cola lineal es un tipo de almacenamiento creado por el usuario que trabaja bajo la técnica FIFO (primero en entrar primero en salir). Las colas lineales se representan gráficamente de la siguiente manera: COLA [][][][][][] Las operaciones que podemos realizar en una cola son las de inicialización, inserción y extracción. Los algoritmos para llevar a cabo dichas operaciones se especifican más adelante. 17


Colas Lineales

Las condiciones a considerar en el tratamiento de colas lineales son las siguientes: Overflow (cola llena), cuando se realice una inserci贸n. Underflow(cola vac铆a), cuando se requiera de una extracci贸n en la cola. Vac铆o.

18


Colas Lineales

Algoritmo de Inicializaci贸n: F < -- 1 A <-- 0 Algoritmo para Insertar: Si A=m谩ximo entonces mensaje (overflow) en caso contrario A<-- A+1 cola[A]<-- valor 19


Colas Lineales

Algoritmo para Extraer:

Si A<F entonces mensaje (underflow) en caso contrario F <-- F+1 x <-- cola[F]

20


Colas Circulares

Es una estructura de datos en la que los elementos están de forma circular y cada elemento tiene un sucesor y un predecesor. Los elementos pueden consultarse, añadirse y eliminarse únicamente desde la cabeza del anillo que es una posición distinguida. Existen dos operaciones de rotaciones, una en cada sentido, de manera que la cabeza del anillo pasa a ser el elemento sucesor, o el predecesor, respectivamente, de la cabeza actual.

21


Colas Circulares

Algoritmo para Insertar:

Algoritmo de Inicializaci贸n: F <-- 0 A <-- 0 22

Si (F+1=A) 贸 (F=1 y A=m谩ximo) entonces mensaje (overflow) en caso contrario inicio si A=m谩ximo entonces A<--1 cola[A]<-- valor en caso contrario A <--A+1 cola[A]<-- valor si F=0 entonces F <-- 1 fin


Colas Circulares

Algoritmo para Extraer:

Si F=0 entonces mensaje (underflow) en caso contrario x <-- cola[F] si F=A entonces F <-- 0 A<-- 0 en caso contrario si F=mรกximo entonces F <--1 en caso contrario F <-- F+1

23


Colas Dobles

Es una estructura de datos en la cual las operaciones de agregar y retirar se practican por ambos lados y por la forma en que se realizan las operaciones, puede comportarse como pila o como cola. La forma de operar de una cola doble es así: se tiene un nuevo elemento que desea agregarse a la cola, éste podría hacerlo de tal forma que ocupe la primera posición o la última, los elementos que se encuentran al principio y al final de la cola pueden retirarse. 24


Colas Dobles

Para indicar uno de los extremos de la cola doble por donde se agregarán o retirarán elementos, se utiliza un apuntador (U) y para el otro extremo se utiliza un apuntador (P). Para delimitar el área de implementación se tienen los apuntadores MAX y MIN, de idéntica forma como la pila y la cola para detectar la cola doble llena. La cola doble estará vacía cuando P = Vacío.

25

Revista  

Analisis de Algoritmo