PILAS Y COLAS

21
FACULTAD DE INGENIERIA Y SISTEMAS ESTRUCTURA DE DATOS CATEDRATICO: Ing. Carlos Roberto mejia GRUPO – V01 PROYECTO: PILAS Y COLAS NOMBRE ORDEN ALFABETICO CARNÉ Abrego Valladares, Melvin Jose AV100311 Cruz Marroquín, Dimas Alexander CM102911 Cruz Pacheco, David Salvador CP Herrera Cisneros, Ariel Amilcar HC100410 San Salvador, 7 de NOVIEMBRE de 2015

description

ES UNA INVESTIGACION DE PILAS Y COLAS EN INFORMATICA

Transcript of PILAS Y COLAS

FACULTAD DE INGENIERIA Y SISTEMASESTRUCTURA DE DATOS

CATEDRATICO: Ing. Carlos Roberto mejia

GRUPO – V01

PROYECTO:

PILAS Y COLAS

NOMBRE ORDEN ALFABETICO CARNÉ

Abrego Valladares, Melvin Jose AV100311

Cruz Marroquín, Dimas Alexander CM102911

Cruz Pacheco, David Salvador CP

Herrera Cisneros, Ariel Amilcar HC100410

San Salvador, 7 de NOVIEMBRE de 2015

ÍNDICE

INTRODUCCIÓN.....................................................................................................3

OBJETIVOS.............................................................................................................4

Objetivo general................................................................................................4

Objetivos específicos.....................................................................................4

PILAS INFORMATICAS...........................................................................................5

¿Qué es una pila?................................................................................................5

Técnicas de Pilas..................................................................................................6

Aplicación de Pilas................................................................................................9

COLAS EN INFORMATICA...................................................................................11

¿Qué es una COLA?..........................................................................................11

Técnica de Colas................................................................................................12

Aplicación de Colas............................................................................................14

PILAS Y COLAS.....................................................................................................15

ANEXOS................................................................................................................16

INTRODUCCIÓN

En mundo de la informática es una de las áreas más extensas y completas, debido a la necesidad del ser humano en aplicarlas en la vida cotidiana, en la actualidad las computadoras, el software es decir la tecnología es tan importante para desarrollar tantas actividades de la vida desde un sencillo juego a complejos sistemas capaces de darle vida a empresas mundiales.

En el presente trabajo nos enfatizamos en dos términos muy importantes en el mundo informático tales como las pilas y las colas.

Se pueden dividir a los programas en dos partes fundamentales que son:

Algoritmos Estructuras de datos

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.

Que son: Las colas, Las pilas, Las listas y Los árboles

Cada uno de los métodos mencionados con anterioridad 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 La recuperación de datos

A continuación se detallan los siguientes términos pilas y colas.

3

OBJETIVOS

Objetivo general Investigar, conocer y comparar las herramientas de estructura de datos en

PILAS y COLAS.

Objetivos específicos

Investigar sobre las técnicas de pilas y colas, cómo se aplica, ventajas y desventajas.

Crear una aplicación en C++, aplicando los temas de pilas y colas.

4

PILAS INFORMATICAS¿Qué es una pila?Una pila es una estructura de datos a la cual se puede acceder solo por un extremo de la misma. Es decir 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. A una pila, se le conoce como una estructura de datos: Última en entrar, primera en salir (UEPS)

Así mismo, en cada momento que el usuario se encuentre en la parte interna del equipo pues solo se tiene al último objeto apilado de lo cual es denominado “TOS” que viene a significar “Top of Strack” de tal manera que el termino retirar tiene como objetivo retirar la obtención de este elemento ya que es retirado de la pila informática en lo cual permitirá el acceso al siguiente que pasa a ser el nuevo TOS.

Una metáfora que se utiliza con frecuencia es la idea de una pila de platos en una cafetería con muelle de pila. En esa serie, sólo la primera placa es visible y accesible para el usuario, todas las demás placas permanecen ocultas. Como se añaden las nuevas placas, cada nueva placa se convierte en la parte superior de la pila, escondidos debajo de cada plato, empujando a la pila de placas. A medida que la placa superior se elimina de la pila, la segunda placa se convierte en la parte superior de la pila. Dos principios importantes son ilustrados por esta metáfora: En primer lugar la última salida es un principio, la segunda es que el contenido de la pila está oculto. Sólo la placa de la parte superior es visible, por lo que para ver lo que hay en la tercera placa, el primer y segundo platos tendrán que ser retirados.

Las pilas son frecuentemente utilizadas en el desarrollo de sistemas informáticos y software en general. Por ejemplo, el sistema de soporte en tiempo de compilación y ejecución del Pascal utiliza una pila para llevar la cuenta de los parámetros de procedimientos y funciones, variables locales, globales y dinámicas. Este tipo de estructuras también son utilizadas para traducir expresiones aritméticas o cuando se quiere recordar una secuencia de acciones u objetos en el orden inverso del ocurrido.

5

Técnicas de PilasLas pilas no son estructuras fundamentales de datos; es decir no están definidas como tales en los lenguajes de programación. Para su representación requieren de otras EDs, como:

Arreglos: Un arreglo es un conjunto de datos o una estructura de datos homogéneos que se encuentran ubicados en forma consecutiva en la memoria RAM (sirve para almacenar datos en forma temporal).

Listas: es una de las estructuras de datos fundamentales, y puede ser usada para implementar otras estructuras de datos.

Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las que en las implementaciones modernas de las pilas se suelen añadir más de uso habitual.

Crear: se crea la pila vacía. (constructor)

Tamaño: regresa el número de elementos de la pila. (size)

Apilar: se añade un elemento a la pila.(push)

Desapilar: se elimina el elemento frontal de la pila.(pop)

Cima: devuelve el elemento que está en la cima de la pila. (top o peek)

Vacía: devuelve cierto si la pila está sin elementos o falso en caso de que contenga uno.

Utilizan arreglos. Es importante definir el tamaño del máximo de la pila, así como una variable auxiliar que se denomina TOPE. Está variable se utiliza para indicar el último elemento que se insertó en la pila.

6

Por ejemplo, una pila puede comenzar en una posición de la memoria de mil, y ampliar por debajo de las direcciones, en cuyo caso, los nuevos datos se almacenan en lugares que van por debajo de 1000, y el puntero de pila se decremento cada vez que un nuevo elemento se agrega. Cuando un tema es eliminado de la pila, el puntero de pila se incrementa.

Los punteros de pila pueden apuntar al origen de una pila o de un número limitado de direcciones, ya sea por encima o por debajo del origen (dependiendo de la dirección en que crece la pila), sin embargo el puntero de pila no puede cruzar el origen de la pila. En otras palabras, si el origen de la pila está en la dirección 1000 y la pila crece hacia abajo (hacia las direcciones 999, 998, y así sucesivamente), el puntero de pila nunca debe ser incrementado más allá de 1000 (para 1001, 1002, etc.) Si un desapilar operación en la pila hace que el puntero de pila se deje atrás el origen de la pila, una pila se produce desbordamiento. Si una operación de apilar hace que el puntero de pila incremente o decremento más allá del máximo de la pila, en una pila se produce desbordamiento.

La pila es visualizada ya sea creciente de abajo hacia arriba (como pilas del mundo real), o, con el máximo elemento de la pila en una posición fija, o creciente, de izquierda a derecha, por lo que el máximo elemento se convierte en el máximo a "la derecha". Esta visualización puede ser independiente de la estructura real de la pila en la memoria. Esto significa que rotar a la derecha es mover el primer elemento a la tercera posición, la segunda a la primera y la tercera a la segunda. Aquí hay dos equivalentes visualizaciones de este proceso:

7

Se hace referencia a una pila por medio de un apuntador hacia el elemento en la cima de la pila. El miembro liga del último nodo de la pila, se establece en NULL para indicar el fondo de la pila. Una pila es una versión restringida de una lista ligada. Los nuevos nodos pueden añadirse y eliminarse de una pila sólo en la cima. 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.

Algoritmo de una pila Var PILA: array [1..LONGMAX] de enteros Función VACÍA { subprograma función VACÍA} Inicio Si p = 0 Entonces VACIA = cierto Sino : VACIA = falso Finsi V = VACIA Fin {procedimiento METER (PUSH)} procedimiento METER Inicio Si P = LONGMAX entonces escribir "error en METER" escribir "desbordamiento de la pila" Sino P = P + 1 S(P) = X Finsi Fin Procedimiento SACAR Inicio Si VACIA {invocación a la función VACIA} Entonces Escribir "error en SACAR" Escribir "pila vacía" Sino X = S(P) P = P – 1 Finsi Fin

8

Aplicación de PilasUna pila es normalmente representada en los ordenadores por un bloque de celdas de memoria, con los "de abajo" en una ubicación fija, y el puntero de pila de la dirección actual de la "cima" de células de la pila.

Apilando un elemento en la pila, se ajusta el puntero de pila por el tamaño de elementos (ya sea decremento o incrementar, en función de la dirección en que crece la pila en la memoria), que apunta a la próxima celda, y copia el nuevo elemento de la cima en área de la pila.

Dependiendo de nuevo sobre la aplicación exacta, al final de una operación de apilar, el puntero de pila puede señalar a la siguiente ubicación no utilizada en la pila, o tal vez apunte al máximo elemento de la pila.

Si la pila apunta al máximo elemento de la pila, el puntero de pila se actualizará antes de que un nuevo elemento se apile, si el puntero que apunta a la próxima ubicación disponible en la pila, que se actualizará después de que el máximo elemento se apile en la pila.

Al utilizar arreglos para implementar pilas se tiene la limitación de que se debe reservar el espacio en memoria con anticipación. Una vez dado un máximo de capacidad a la pila no es posible insertar un número de elementos mayor que el máximo establecido.

Si esto ocurre, en otras palabras si la pila está llena y se intenta insertar un nuevo elemento, se producirá un error conocido como desbordamiento –overflow. Una posible solución a este tipo de inconvenientes consiste en definir pilas de gran tamaño, pero esto resultará ineficiente y costoso si solo se utilizarán algunos elementos. No siempre es viable saber con exactitud el número de elementos a tratar, y siempre existe la posibilidad de que ocurra un error de desbordamiento.

Las pilas son estructuras muy usadas en la solución de diversos tipos de problemas, en el área de computación. Algunos de los casos más representativos de aplicación de las mismas son:

9

Llamadas a subprogramas

Cuando se tiene un programa que llama a un subprograma, también conocido como módulo o función, internamente se usan pilas para guardar el estado de las variables del programa, así como instrucciones pendientes de ejecución en el momento que se hace la llamada. Cuando termina la ejecución del subprograma, los valores almacenados en la pila se recuperan para continuar con la ejecución del programa en el punto en el cual fue interrumpido. Además de las variables se recupera la dirección del programa en la que se hizo la llamada, por que a esa posición se regresa el control del proceso.

Recursividad

Un problema que pueda ser definido en función de su tamaño, sea este N, pueda ser dividido en instancias más pequeñas (< N) del mismo problema y se conozca la solución explícita a las instancias más simples, lo que se conoce como casos base, se puede aplicar inducción sobre las llamadas más pequeñas y suponer que estas quedan resueltas.

Tratamiento de expresiones aritméticas

1.       AB    =   Infija

2.       AB    =   posfija3.       AB    =   PrefijaAB    =   Infija:  Esta notación es Infija porque el operador se encuentra entre los operadores.AB    =   posfija:  Esta notación es Posfija porque el operador se encuentra después de los  operadores.AB    =   Prefija: Esta es una notación Prefija porque el operador se encuentra antes de los  operadores.

Ordenación

Ordenar significa reagrupar o reorganizar un conjunto de datos u objetos en una secuencia específica La ordenación es una actividad fundamental.

10

COLAS EN INFORMATICA¿Qué es una COLA?

Una cola es una estructura en donde los elementos son insertados en el inicio (front) de la misma, y retirados al final de la misma, debido a ello el comportamiento

de una cola se conoce como FIFO ( primero en entrar, 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.

Una cola es una colección de elementos homogéneos (almacenados en dicha estructura),

en la misma se pueden insertar elementos por uno de los extremos, llamado frente, y

retirar los mismos por el otro extremo, denominado final.

Es importante aclarar que, tanto el frente como el final de la cola, son los únicos indicados

para retirar e insertar elementos, respectivamente. Esto nos indica que no podemos

acceder directamente a cualquier elemento de la cola, sino solo al primero, o sea el que

está o se encuentra en el frente, y no se pueden insertar elementos en cualquier posición

sino solo por el final, así el elemento insertado queda como último.

Por esta razón la cola es denominada una estructura F.I.F.O., o simplemente una

lista F.I.F.O., esto representa el acrónimo de las palabras inglesas “first in, first out”

(primero en entrar, primero en salir). 

11

Técnica de Colas

El uso de las colas es variado entre algunos tipos tenemos:

Colas circulares (anillos): en las que el último elemento y el primero están unidos.

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. Hay 2 formas de

implementación: Añadir un campo a cada nodo con

su prioridad. Resulta conveniente mantener la cola

ordenada por orden de prioridad.

Crear tantas colas como prioridades haya, y

almacenar cada elemento en su cola.

Bicolas: son colas en donde los nodos se pueden añadir y quitar por ambos extremos; se

les llama DEQUE (Double Ended QUEue). Para representar las bicolas lo podemos hacer

con un array circular con Inicio y Fin que apunten a cada uno de los extremos. Hay

variantes:

Bicolas de entrada restringida: Son aquellas donde la inserción sólo se hace por

el final, aunque podemos eliminar al inicio o al final.

Bicolas de salida restringida: Son aquellas donde sólo se elimina por el final,

aunque se puede insertar al inicio y al final.

12

Las operaciones que se pueden realizar con una cola son:

1. Acceder al primer elemento de la Cola2. Añadir un elemento al final de la Cola3. Eliminar el primer elemento de la Cola4. Vaciar una Cola5. Verificar el estado de la Cola: vacía, Llena.

13

Aplicación de Colas

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 una 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.

Aplicaciones directas:

Histórico de páginas visitadas en un browser de web Secuencia de “undo” en un editor de textos. Cadena de llamadas a métodos en JVM o medioambiente runtime en C++. Parsers en compiladores (reconocedores sintacticos). SSOO Convertir notación infija a posfija o prefija. Implementación de recursividad.

Aplicaciones indirectas:

Estructuras de datos auxiliares para algoritmos. Componentes de otras estructuras de datos.

Hay 2 formas de implementación:

1. Añadir un campo a cada nodo con su prioridad. Resulta conveniente mantener la cola ordenada por orden de prioridad.

2.

3. Crear tantas colas como prioridades haya, y almacenar cada elemento en su cola.

14

PILAS Y COLAS.

La diferencia radica en cuales son los elementos que salen primero.

Pilas (primeras en entrar, últimas en salir): son como una pila de libros, los primeros que entran a la pila son los últimas que salen porque quedan debajo de los últimos.

Colas (Primeras entrar, primeras en salir): Son como la cola para comprar un boleto del cine, los primeros en entrar ala cola son los primeros que salen de ella.

Otra diferencia es que en las pilas los ítems se añaden y se eliminan en el mismo extremo.

Se entiende por cola una estructura de datos en la que se añaden nuevos ítems en un extremo y se suprimen intems viejos en el opuesto.

A diferencia de las colas, en las pilas los ítems se añaden y se eliminan en el mismo .

Las pilas y las colas son estructuras de datos homogéneas.

15

ANEXOS.

16