You are on page 1of 11

Repblica Bolivariana de Venezuela Ministerio del Poder Popular Para La defensa Universidad Nacional Politcnica de la Fuerza Armada BOLIVARIANA

U.N.E.FA.B Ciudad Bolvar Estado Bolvar

Gabriel Alvarado ADS 0

Junio del 2013

Pila Una pila (stack en ingls) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del ingls 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 informtica debido a su simplicidad y ordenacin implcita de la propia estructura. Operaciones: Para el manejo de los datos se cuenta con dos operaciones bsicas: apilar (push), que coloca un objeto en la pila, y su operacin inversa, retirar (o desapilar, pop), que retira el ltimo elemento apilado. PUSH (insertar).- Agrega un elementos a la pila en el extremo llamado tope. -POP (remover).- Remueve el elemento de la pila que se encuentra en el extremo llamado tope. -VACIA.- Indica si la pila contiene o no contiene elementos.-LLENA.- Indica si es posible o no agregar nuevos elementos a la pila. REPRESENTACIN DE PILAS: Usando arreglos: Define un arreglo de una dimensin (vector) donde se almacenan los elementos. 0 1 2 3 4 5 TOPE: Apunta hacia el elemento que se encuentra en el extremo de la pila. (inicialmente es -1). Ejemplo Insertar Insertar Insertar Eliminar Inicio: A: B: C: elemento C B B B A A A ATope -1 Tope Tope Tope Tope Interface para una pila de datos enteros: interface IPila { public boolean llena(); public boolean vacia(); public void push (int elem); public int pop(); } Implementacin usando un arreglo: class Pila implements IPila { int tope = -1; public boolean vacia(){ private int [] pila = new int [10]; return (tope == -1); final int MAX = 9; } public boolean llena(){ return ( tope == MAX ); public int pop(){ } if (this.vacia()) then public void push (int elem){ // ERROR if (this.llena()) then else{ // ERROR int x = pila[tope]; else{ tope --; tope ++; return x; pila [ tope ] = elem; } } } } } Las pilas suelen emplearse en los siguientes contextos: - Evaluacin de expresiones en notacin postfija (notacin polaca inversa). -Reconocedores sintcticos de lenguajes independientes del contexto -Implementacin de recursividad. Aplicaciones

Algunas aplicaciones de las pilas son: 1. Para modelar 'pilas reales' en el mundo de las computadoras: Recursin, Llamadas a procedimientos, etc. Push al entrar al procedimiento, pop al salir del procedimiento. 2. Verificar palindromos (hacer esto es estpido). 3. Verificar si los parntesis de una expresin estn balanceados. Push al encontrar un "(" y pop al encontrar un ")". 4. Conversin de expresiones matemticas (infija, prefija, posfija). 5. Evaluacin de expresiones en notacin posfija. 6. Recorrido de grafos, bsqueda en profundidad. Push al descubrir un vrtice, pop al terminar de visitar todas sus posibilidades.

COLAS Es una lista lineal de elementos en la que las operaciones de insertar y eliminar se realizan en diferentes extremos de la cola. Trabajan con filosofa FIFO ( First In - First out), el primer elemento en entrar es el primer elemento en salir. Ejemplos: Cola de automviles esperando servicio en una gasolinera Cola de clientes en una ventanilla del banco para pagar un servicio Cola de programas en espera de ser ejecutados por una computadora. TIPOS DE COLAS: Cola simple: Estructura lineal donde los elementos salen en el mismo orden en que llegan. Cola circular: Representacin lgica de una cola simple en un arreglo. Cola de Prioridades: Estructura lineal en la cual los elementos se insertan en cualquier posicin de la cola y se remueven solamente por el frente. Cola Doble (Bicola): Estructura lineal en la que los elementos se pueden aadir o quitar por cualquier extremo de la cola (cola bidireccional). Operaciones bsicas en Colas Simples Insertar.- Almacena al final de la cola el elemento que se recibe como parmetro. Eliminar.

- Saca de la cola el elemento que se encuentra al frente. Vaca. - Regresa un valor booleano indicando si la cola tiene o no elementos (true si la cola esta vacia, false si la cola tiene al menos un elemento).Llena. - Regresa un valor booleano indicando si la cola tiene espacio disponible para insertar nuevos elementos ( true si esta llena y false si existen espacios disponibles). Operaciones: Estado de la cola: Inicio: Cola Vaca1.- Insertar A A2.- Insertar B A B3.- Insertar C A B C4. - Remover Elemento B C5.- Insertar D B C D6.- Remover Elemento C D Implementacin de Colas Arreglo con frente fijo. con frente movible. circular. Listas ligadas Representacin usando arreglos Las colas pueden ser representadas en arreglos de una dimensin (vector) manteniendo dos variables que indiquen el FRENTE y FINAL de los elementos de la cola. 0 1 2 3 4 5 A F S D Z Frente Final Cuando la cola est vaca las variables frente y final son nulos y no es posible remover elementos. Cuando la cola est llena (frente = 0 y final = n-1) no es posible insertar elementos nuevos a la cola. Cuando se remueven elementos el frente puede incrementarse para apuntar al siguiente elemento de la cola (implementacin con frente mvil) o los elementos en la cola pueden desplazarse una posicin adelante (implementacin con frente fijo) Recuperacin de espacio: Cuando no hay espacios libres al final del arreglo los elementos pueden ser desplazados para desocupar posiciones en un extremo del arreglo o se puede manejar una estructura circular. 30. Ejemplo: Suponer que usamos un arreglo de 5posiciones. Usando la representacin de frente fijo y frente movible. Frente A B C Final Al remover un elemento: Frente Final Frente Final B C B C Frente fijo Frente movible

DOBLE COLA (BICOLA). Es una generalizacin de una estructura de cola simple. En una doble cola, los elementos pueden ser insertados o eliminados por cualquiera de los extremos. Es

decir, se pueden insertar y eliminar valores tanto por el FRENTE como por el FINAL de la cola. Una doble cola se representa: FRENTE DOBLE COLA FINAL

Las dos flechas en cada extremo indican que pueden ejecutarse las operaciones de insercin y eliminacin.

Variantes de las Bicolas o dobles colas. Doble cola con Entrada restringida: Permite que las eliminaciones puedan hacerse por cualquiera de los dos extremos. FRENTE DOBLE COLA FINAL

Doble cola con Salida restringida: Permite que las inserciones puedan hacerse por cualquiera de los dos extremos. FRENTE DOBLE COLA FINAL

APLICACIONES. Colas de impresin (spooler) Cuando hay una sola impresora para atender a varios usuarios, puede suceder que algunos de ellos soliciten los servicios de impresin al mismo tiempo o mientras el dispositivo est ocupado. En estos casos se forma una cola con los trabajos que esperan para ser impresos los mismos se irn imprimiendo en el orden en el cual fueron introducidos en la cola. Sistemas de Tiempo Compartido. Varios usuarios comparten ciertos recursos, como CPU y MEMORIA de la COMPUTADORA. Los recursos se asignan a los procesos que estn en la cola de espera, suponiendo que todos tienen una misma prioridad, en el orden en el cual fueron introducidos en la cola. LISTAS: Una lista es una coleccin lineal de elementos. Hay 2 formas de almacenarla. Con arrays (usando memoria esttica), en donde la relacin de los elementos de la lista viene dada porque ocupa posiciones contiguas de memoria. De forma enlazada con memoria dinmica. Se conoce como listas enlazadas, y la relacin entre los elementos de la lista se mantiene mediante campos de enlace o punteros. LISTAS ENLAZADAS: Es una coleccin lineal de elementos llamados NODOS, donde el orden entre los nodos se establece mediante punteros, y por ser simple, adems desde un nodo solo puedo acceder al siguiente directamente. Una lista enlazada tiene 2 partes:

Los nodos que forman la lista. Cada nodo va a tener dos campos. Uno de informacin que ser del tipo de los elementos que contiene la lista y un campo de enlace que es de tipo puntero, y que contendr la direccin de memoria en la que est almacenado el siguiente nodo.

Al primer campo de informacin lo llamamos INFO, y el nodo lo llamamos SIG.

La segunda parte de la lista ser una variable de tipo puntero a los nodos de la lista que contiene la direccin del primer nodo de la lista. Por esa razn a esa variable la podemos llamar Comienzo.

Tipo nodo: registro Info: <tipo> Sig: puntero a nodo Fin registro Var Com: puntero a nodo El ltimo nodo de la lista tendr en su campo de enlace el valor nodo (Null,Nil), que quiere decir que no apunta a ninguna direccin y grficamente se simboliza con: Tipo nodo: registro Info: carcter Sig: puntero a nodo Fin registro Los nodos de la lista pueden estar en cualquier zona de memoria, no tienen que estar en posiciones consecutivas. PROCESAMIENTO DE LISTAS ENLAZADAS SIMPLES: Para poder procesar una lista, se necesita la estructura de sus nodos y la variable de comienzo. Operaciones:

Insertar un elemento. Borrar un elemento. Recorrer la lista. Buscar un elemento.

La forma ms normal de representar listas enlazadas es usar memoria dinmica. Una lista enlazada tambin se puede simular usando arrays (memoria esttica), pero es poco eficiente. Para ello utilizara 2 arrays del mismo tamao y con la misma numeracin de ndices, tal que en un array guardara los campos de informacin de la lista, y para cada campo de informacin en la posicin correspondiente en el otro array guardara el ndice del siguiente elemento a ese nodo. Es decir en ese segundo array guardara los campos enlace mediante valores de ndice.

a h . i z Adems de los 2 arrays, tengo que tener una variable que contenga el ndice del primer elemento de la lista. El ltimo elemento, tiene en el campo de enlace el valor 0. Info Sig 1 2 3H5 4 5. 6 A 7 I 3 8 10 9 10 Z 0 LISTAS CIRCULARES CON CABECERA Una lista con cabecera, en general es una lista enlazada simple normal, pero en la que el primer nodo es un nodo especial que no sirve para guardar informacin vlida, sino solamente para marcar que es el primer nodo. Cabecera Hay dos tipos de listas enlazadas con cabecera:

Listas enlazadas con cabecera y tierra: El primer nodo va a ser la cabecera, y el ltimo apunta a nil. No se utiliza porque perdemos un nodo y no tienen ventajas. Listas circulares con cabecera: Se caracterizan porque tienen un nodo cabecera, y adems el ltimo nodo apunta al nodo cabecera.

En cualquier lista enlazada con cabecera el primer nodo con informacin til es el siguiente a comienzo (Comsig). En una lista circular con cabecera, la ventaja que presenta respecto a una normal, es que en las inserciones y borrados no hay que suponer ningn caso especial, pues todos los nodos, incluido el primero til, tienen un predecesor.

Al recorrer la lista completa, empezaremos buscando la informacin por el siguiente a comienzo, y sabemos que hemos llegado al final de la lista cuando el siguiente al puntero que recorre la lista sea comienzo. LISTAS DOBLEMENTE ENLAZADAS: Las listas enlazadas simples se caracterizan porque desde un nodo solo puedo acceder al siguiente a ese nodo, por lo que solo puedo acceder al siguiente a ese nodo, por lo que solo puedo recorrer la lista en un sentido, de principio a fin. Las listas dobles se caracterizan porque desde un nodo podemos acceder directamente tanto al siguiente como al anterior a ese. Es decir, por cada nodo tendremos 2 campos enlace, uno para enlazar un nodo con el siguiente, y otro para enlazar a un nodo con el nodo anterior a l. De esta manera, la lista la podemos recorrer en los 2 sentidos, de principio a fin, movindonos con el enlace al nodo siguiente o de fin a principio movindonos con el enlace al nodo anterior. Para que se pueda hacer este segundo recorrido, adems de una variable comienzo para cada lista, que contiene la direccin del primer nodo de la lista, necesitaremos tambin otra variable especial que denominaremos fin o final, que apunta al ltimo nodo de la lista. Segn esto, la estructura de una lista doblemente enlazada, ser la siguiente:

Cada lista tendr 2 variables, comienzo y final, del tipo puntero a nodo doble, que contendrn respectivamente la direccin al primer y ltimo nodo de la lista. La estructura de cada nodo ser:

Tipo nodo_doble: registro Info: <tipo> Sig: puntero a nodo_doble Ant: puntero a nodo_doble Fin registro INFO ant sig El campo siguiente del ltimo nodo tendr valor NIL, y el campo anterior del primer nodo tambin tendr valor NIL, para indicar que no hay nada antes del primer nodo. La caracterstica de una lista doblemente enlazada vaca es que el comienzo y el final son iguales y apuntan a NIL.

Declaraciones de tipos para manejar listas circulares en C Los tipos que definiremos normalmente para manejar listas cerradas son los mismos que para para manejar listas abiertas: typedef struct _nodo { int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista; Nodo es el tipo para declarar nodos, evidentemente. Nodo es el tipo para declarar punteros a un nodo. Lista es el tipo para declarar listas, tanto abiertas como circulares. En el caso de las circulares, apuntar a un nodo cualquiera de la lista.

Bibliografa

http://html.rincondelvago.com/algoritmos-y-programas.html http://www.adobe.com/es/products/digitaleditions/?source=acromenu http://www.it.uc3m.es/java/prog/units/pilas-colas/guides/index_es.html http://www.monografias.com/trabajos25/colas/colas.shtml http://www.conclase.net/c/edd/?cap=004

You might also like