Pilas y Colas Proyecto

21
PILAS Y COLAS 2014 PROGRAMACION EN LENGUAJE C Autor: DIEGO ALEJANDRO PULIDO MORENO

Transcript of Pilas y Colas Proyecto

Page 1: Pilas y Colas Proyecto

PILAS Y COLAS

2014

PROGRAMACION EN LENGUAJE C

Autor: DIEGO ALEJANDRO PULIDO MORENO

Page 2: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

2

PILAS Y COLASEN LENGUAJE C

DIEGO ALEJANDRO PULIDO MORENO

TRABJADO DE PROGRAMACION

OSCAR MORERA

UNIVERSIDAD DE CUNDINAMARCA

INGENIERIA DE SISTEMAS

ESTRUCTURAS DE INFORMACION

FACATATIVA

2014

Page 3: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

3

PILAS Y COLASPag.

INTRODUCCIÓN………………………………..…..…………………..4

OBJETIVOS……………………………………………………………...5

PILAS.…………………………………………………………………….6Definición…………………………………….…………………………...........6Funciones de las pilas……………....…….…………………………………..6Operaciones básicas de pilas…………….………………………..………...7Push, insertar elemento…………..……….…...……………………………..7Push, en una pila vacía………………….…………………………………....7pop, leer y eliminar un elemento………..…………………………………...8Explicación de pilas desde el código………………………………………..8Algoritmo de la función ”Push”……………………………………………….9Algoritmo de la función ”Pop”………………………………………………...9Ejemplo de pilas……………………………………………………………...10

COLAS………………………………………………………………….12Definición…………………….………………………………………………………12Funciones de las colas……………………………………………………………..12Manejo de colas…………….……………………………………………………….12Operaciones básicas con colas……………….………………………….............13Añadir un elemento………………………….…………….………………...13Añadir elemento en una cola vacía………………………………………..13Añadir elemento en una cola no vacía…………………………………….14Añadir elemento en una cola, caso general……………………………....14Leer un elemento de una cola, implica eliminarlo………………………..14Leer un elemento en una cola con más de un elemento………………..14Leer un elemento en una cola con un solo elemento……………………15Leer un elemento en una cola caso general…………………………...…15Explicación de colas desde el código:……………………………………..16Algoritmo de la función "añadir"…………………………………………….16Algoritmo de la función "leer":………………………………………………16Ejemplo de colas……………………………………………………………..18

CONCLUSION………………………………………………………….20

BIBLIOGRAFIA……………………..………………………………….21

Page 4: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

4

Estudiaremos en detalle las estructuras de datos pilas y colas que sonprobablemente las utilizadas y más frecuentemente en los programas másusuales. Son estructuras de datos que almacenan y recuperan sus elementosatendiendo a un estricto orden. Las pilas se conocen también como estructurasLIFO (Last-in, first-out, último en entrar-primero en salir) y las colas comoestructuras FIFO (nirSt-in, First-out, primero en entrar-primero en salir).

Page 5: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

5

1. Comprende y entiende la definición de pilas y colas en el lenguaje C

2. Entiende y maneja la creación de pilas y colas, en lenguaje C

3. Conoce la estructura de pilas y colas, ingreso de datos y eliminación deellos mismos, en lenguaje C

Page 6: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

6

DEFINICION:Una pila es un tipo especial de lista abierta en la que sólo se pueden insertar yeliminar nodos en uno de los extremos de la lista. Estas operaciones seconocen como "push" y "pop", respectivamente "empujar" y "tirar". Además,las escrituras de datos siempre son inserciones de nodos, y las lecturassiempre eliminan el nodo leído.

Estas características implican un comportamiento de lista LIFO (Last In FirstOut), el último en entrar es el primero en salir.

El símil del que deriva el nombre de la estructura es una pila de platos. Sólo esposible añadir platos en la parte superior de la pila, y sólo pueden tomarse delmismo extremo.

“El primero que entra,el ultimo que sale”

FUNCIONES DE LAS PILAS:Las pilas se utilizan en muchas aplicaciones que utilizamos confrecuencia. Por ejemplo, la gestión de ventanas en Windows (cuando cerramosuna ventana siempre recuperamos la que teníamos detrás). Otro ejemplo es laevaluación general de cualquier expresión matemática para evitar tenerque calcular el número de variables temporales que hacen falta.Por ejemplo:

37-72

-437-72

-72

7-72 2

Page 7: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

7

OPERACIONES BASICAS DE PILAS:Las pilas tienen un conjunto de operaciones muy limitado, sólo permiten las operacionesde "push" y "pop":

Push: Añadir un elemento al final de la pila.Pop: Leer y eliminar un elemento del final de la pila.

PUSH, INSERTAR ELEMENTO:Las operaciones con pilas son muy simples, no hay casos especiales, salvoque la pila esté vacía.

PUSH EN UNA PILA VACÍA:Partiremos de que ya tenemos el nodo a insertar y, por supuesto un punteroque apunte a él, además el puntero a la pila valdrá NULL:

Pila NULL

El proceso es muy simple, bastará con que:

1. nodo->siguiente apunte a NULL2. Pila a apunte a nodo.

PUSH EN UNA PILA NO VACÍA:Podemos considerar el caso anterior como un caso particular de éste, la únicadiferencia es que podemos y debemos trabajar con una pila vacía comocon una pila normal.

De nuevo partiremos de un nodo a insertar, con un puntero que apunte a él, yde una pila, en este caso no vacía:

Page 8: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

8

El proceso sigue siendo muy sencillo:

1. Hacemos que nodo->siguiente apunte a Pila2. Hacemos que Pila apunte a nodo.

POP, LEER Y ELIMINAR UN ELEMENTO:Ahora sólo existe un caso posible, ya que sólo podemos leer desde un extremodela pila. Partiremos de una pila con uno o más nodos, y usaremos un punteroauxiliar, nodo:

nodo

1. Hacemos que nodo apunte al primer elemento de la pila, es decir aPila.

2. Asignamos a Pila la dirección del segundo nodo de la pila: Pila->siguiente.

3. Guardamos el contenido del nodo para devolverlo como retorno,recuerda que la operación pop equivale a leer y borrar.

4. Liberamos la memoria asignada al primer nodo, el quequeremos eliminar.

Si la pila sólo tiene un nodo, el proceso sigue siendo válido, ya que el valor dePila->siguiente es NULL, y después de eliminar el último nodo la pila quedarávacía, y el valor de Pila será NULL.

EXPLICACIÓN DE PILAS DESDE EL CÓDIGOSupongamos que queremos construir una pila para almacenar númerosenteros. Haremos pruebas intercalando varios "push" y "pop", y comprobandoel resultado.

Page 9: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

9

ALGORITMO DE LA FUNCIÓN "PUSH":1. Creamos un nodo para el valor que colocaremos en la pila .2. Hacemos que nodo->siguiente apunte a Pila.3. Hacemos que Pila apunte a nodo.

void Push(Pila *pila, int v){pNodo nuevo;/* Crearun nodo nuevo */nuevo = (pNodo)malloc(sizeof(tipoNodo));nuevo->valor = v;/* Añadimos la pila a continuación del nuevo nodo */nuevo->siguiente = *pila;/* Ahora, el comienzo de nuestra pila es en nuevo nodo */*pila = nuevo;

}

ALGORITMO DE LA FUNCIÓN "POP":1. Hacemos que nodo apunte al primer elemento de la pila, es decir aPila.2. Asignamos a Pila la dirección del segundo nodo de la pila:Pila->siguiente.3. Guardamos el contenido del nodo para devolverlo como retorno,recuerda que la operación pop equivale a leer y borrar.4. Liberamos la memoria asignada al primer nodo, el quequeremos eliminar.

int Pop(Pila *pila){pNodo nodo; /* variable auxiliar para manipular nodo */int v; /* variable auxiliar para retorno */

/* Nodo apunta al primer elemento de la pila */nodo = *pila;if(!nodo) return 0; /* Si no hay nodos en pila retornamos 0 *//* Asignamos a pila toda la pila menos el primer elemento */*pila = nodo->siguiente;/* Guardamos el valor de retorno */v = nodo->valor;/* Borrar el nodo */free(nodo);return v;

}

Page 10: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

10

1. Veremos el funcionamiento de la pila: ingreso ubicación y eliminación dedatos

#include<iostream>using namespace std;

class Pila{ /*creamos la clase pila*/private:

int *p /*creamos el puntero*/int tope, tam; /*declaramos datos*/

public:Pila (int);void push(int);int pop( );void Mostrar( );~Pila( );

};

Pila::Pila (int cant=1) /*creación de la pila */{tam=cant;tope=0;p=new int [tam];if (p==NULL) exit(1);}

void Pila::push(int aux) /*cargamos pila*/{if(tope==tam)

cout<<"Pila llena";else

{p[tope]=aux;tope++;}

}

int Pila::pop( ) /*eliminamos elemento de la pila*/{if(tope== 0)

{cout<<"Pila vacía";return 0;

Page 11: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

11

}else

{tope--;return p[tope];

}}

void Pila::Mostrar( ) /*mostramos la pila */{for(int i=tope-1;i>=0;i--)

cout<<p[i];}

Pila::~Pila( ) {delete p;}; /*al mostrar la pila eliminamos un elemento*/

int main( ) /*inico */{Pila a(5);int i, info;cout<<"Ingrese 5 numeros enteros:\n";for(i=0;i<5;i++) /*ciclo for para controlar la entrada de datos*/

{cin>>info;a.push(info);}

for(i=0;i<5;i++) /*ciclo for para controlar la salida de datos*/{cout<<a.Sacar( ) ;a.Mostrar( ) ;system(" pause " );}

return 0 ;

Page 12: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

12

DEFINICION:Una cola es un tipo especial de lista abierta en la que sólo se puede insertarnodos en uno de los extremos de la lista y sólo se pueden eliminar nodos en elotro. Además, como sucede con las pilas, las escrituras de datos siempre son insercionesde nodos, y las lecturas siempre eliminan el nodo leído.

Este tipo de lista es conocido como lista FIFO (First In First Out), el primero enentrar es el primero en salir.

FUINCIONES DE LAS COLAS:El símil cotidiano es una cola para comprar, por ejemplo, las entradas del cine.Los nuevos compradores sólo pueden colocarse al final de la cola, y sólo elprimero dela cola puede comprar la entrada.

“El primero en entrar es elprimero en salir”

Manejo de colas:Los tipos que definiremos normalmente para manejar colas serán casilos mismos que para manejar listas y pilas.

Es evidente, a la vista del gráfico, que una cola es una lista abierta. Así quesigue siendo muy importante que nuestro programa nunca pierda el valor delpuntero al primer elemento, igual que pasa con las listas abiertas. Además,

Page 13: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

13

debido al funcionamiento de las colas, también deberemos mantener unpuntero para el último elemento de la cola, que será el punto donde insertemosnuevos nodos.

Teniendo en cuenta que las lecturas y escrituras en una cola se hacen siempreen extremos distintos, lo más fácil será insertar nodos por el final,a continuación del nodo que no tiene nodo siguiente, y leerlos desde elprincipio, hay que recordar que leer un nodo implica eliminarlo de la cola

OPERACIONES BÁSICAS CON COLAS:De nuevo nos encontramos ante una estructura con muy pocas operacionesdisponibles. Las colas sólo permiten añadir y leer elementos:

Añadir: Inserta un elemento al final de la cola.Leer: Lee y elimina un elemento del principio de la cola.

AÑADIR UN ELEMENTO:Las operaciones con colas son muy sencillas, prácticamente no hay casosespeciales, salvoque la cola esté vacía.

AÑADIR ELEMENTO EN UNA COLA VACÍA:Partiremos de que ya tenemos el nodo a insertar y, por supuesto un punteroque apunte a él, además los punteros que definen la cola, primero y último quevaldrán NULL:

PrimeroNULL UltimoNULL

El proceso es muy simple, bastará con que:1. nodo->siguiente apunte a NULL.2. Y que los punteros primero y último apunten a nodo.

Page 14: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

14

AÑADIR ELEMENTO EN UNA COLA NO VACÍA:De nuevo partiremos de un nodo a insertar, con un puntero que apunte a él, yde una cola, en este caso, al no estar vacía, los punteros primero y último noserán nulos:

El proceso sigue siendo muy sencillo:1. Hacemos que nodo->siguiente apunte a NULL.2. Después que ultimo->siguiente apunte a nodo.3. Y actualizamos ultimo, haciendo que apunte a nodo.

AÑADIR ELEMENTO EN UNA COLA, CASO GENERAL:Para generalizar el caso anterior, sólo necesitamos añadir una operación:

1. Hacemos que nodo->siguiente apunte a NULL.2. Si ultimo no es NULL, hacemos que ultimo->siguiente apunte a nodo.3. Y actualizamos ultimo, haciendo que apunte a nodo.4. Si primero es NULL, significa que la cola estaba vacía, así queharemos que primero apunte también a nodo.

LEER UN ELEMENTO DE UNA COLA, IMPLICA ELIMINARLO:Ahora también existen dos casos, que la cola tenga un solo elemento o que tenga más deuno.

LEER UN ELEMENTO EN UNA COLA CON MÁS DE UN ELEMENTO:Usaremos un puntero a un nodo auxiliar:

1. Hacemos que nodo apunte al primer elemento de la cola, es decir aprimero.2. Asignamos a primero la dirección del segundo nodo de lapila: primero->siguiente.3. Guardamos el contenido del nodo para devolverlo como retorno,recuerda que la operación de lectura en colas implican también borrar.4. Liberamos la memoria asignada al primer nodo, el quequeremos eliminar.

Page 15: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

15

LEER UN ELEMENTO EN UNA COLA CON UN SOLO ELEMENTO:También necesitamos un puntero a un nodo auxiliar:

1. Hacemos que nodo apunte al primer elemento de la pila, es decir aprimero

2. Asignamos NULL a primero, que es la dirección del segundonodo teórico de la cola: primero->siguiente.3. Guardamos el contenido del nodo para devolverlo como retorno,recuerda que la operación de lectura en colas implican también borrar.4. Liberamos la memoria asignada al primer nodo, el quequeremos eliminar.5. Hacemos que último apunte a NULL, ya que la lectura ha dejadola cola vacía.

LEER UN ELEMENTO EN UNA COLA CASO GENERAL:1. Hacemos que nodo apunte al primer elemento de la pila, es decir aprimero.2. Asignamos a primero la dirección del segundo nodo de lapila: primero->siguiente.3. Guardamos el contenido del nodo para devolverlo como retorno,recuerda que la operación de lectura en colas implican también borrar.4. Liberamos la memoria asignada al primer nodo, el quequeremos eliminar.

Si primero es NULL, hacemos que ultimo también apunte a NULL, ya que la lectura hadejado la cola vacía.

Page 16: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

16

EXPLICACIÓN DE COLAS DESDE EL CÓDIGO:Construiremos una cola para almacenar números enteros. Haremos pruebasinsertando varios valores y leyéndolos alternativamente para comprobar elresultado.

ALGORITMO DE LA FUNCIÓN "ANADIR":1. Creamos un nodo para el valor que colocaremos en la cola.2. Hacemos que nodo->siguiente apunte a NULL.3. Si "ultimo" no es NULL, hacemos que ultimo->>siguiente apunte anodo.4. Actualizamos "ultimo" haciendo que apunte a nodo.5. Si "primero" esNULL, hacemos que apunte a nodo.

void Anadir(pNodo *primero, pNodo *ultimo, int v){pNodo nuevo;

/* Crearun nodo nuevo */nuevo = (pNodo)malloc(sizeof(tipoNodo));nuevo->valor = v;/* Este será el último nodo, no debe tener siguiente */nuevo->siguiente = NULL;/* Si la cola no estaba vacía, añadimos el nuevo a continuación de ultimo */if(*ultimo) (*ultimo)->siguiente = nuevo;/* Ahora, el último elemento de la cola es el nuevo nodo */*ultimo = nuevo;/* Si primero es NULL, la cola estaba vacía, ahora primero apuntará también alnuevo nodo */If (!*primero) *primero = nuevo;

}

ALGORITMO DE LA FUNCIÓN "LEER":1. Hacemos que nodo apunte al primer elemento de la cola, es decir aprimero.2. Asignamos a primero la dirección del segundo nodo de lacola: primero->siguiente.3. Guardamos el contenido del nodo para devolverlo como retorno,recuerda que la operación de lectura equivale a leer y borrar.4. Liberamos la memoria asignada al primer nodo, el quequeremos eliminar.5. Si primero es NULL, haremos que último también apunte a NULL, ya que la colahabrá quedado vacía.

Page 17: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

17

int Leer(pNodo *primero, pNodo *ultimo){pNodo nodo; /* variable auxiliar para manipula nodo*/int v; /* variable auxiliar para retorno */

/* Nodo apunta al primer elemento de la pila */nodo = *primero;if(!nodo) return 0; /* Si no hay nodos en la pila retornamos 0*/

/* Asignamos a primero la dirección del segundo nodo */*primero = nodo->siguiente;/* Guardamos el valor de retorno */v = nodo->valor;/* Borrar el nodo */free(nodo);/* Si la cola quedó vacía, ultimo debe ser NULL también*/

If(!*primero) *ultimo = NULL;return v;

}

Page 18: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

18

1. Veremos el funcionamiento de una cola: ingreso ubicación y eliminaciónde datos.

#include<iostream>using namespace std;

class Cola /*creamos clase cola*/{private:

int *p; /*creamos puntero*/int pcio, fin, tam; /*declaramos datos*/

public:Cola (int);void Agregar(int);int Sacar( );void Mostrar( );~Cola( );

};

Cola::Cola (int cant=1) /*creamos de la cola*/{tam=cant;pcio=fin=0;p=new int [tam];if (p==NULL) exit(1);}

void Cola::Agregar(int info) /*función cargar*/{if(fin==tam)

cout<<"Cola llena";else

{p[fin]=info;fin++;}

}

int Cola::Sacar( ) /*función eliminar*/

Page 19: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

19

{if(pcio== fin)

{cout<<"Cola vacía";return 0;}

elsereturn p[pcio++];

}

void Cola::Mostrar( ) /*función mostrar*/{for(int i=pcio;i<fin;i++)

cout<<p[i];}

Cola::~Cola( ) {delete p;}; /*al mostrar la cola eliminamos un elemento*/

int main( ) /*inicio*/{Cola a(5);int i, info;cout<<"Ingrese 5 numeros enteros:\n";for(i=0;i<5;i++) /*ciclo for para controlar la entrada de datos*/

{cin>>info;a.Agregar(info);}

for(i=0;i<5;i++) /*ciclo for para controlar la salida de datos*/{cout<<a.Sacar( ) ;a.Mostrar( ) ;system(" pause " );}

return 0 ;}

Page 20: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

20

En cierto modo y en la búsqueda de la verdad, de la lógica y de la razón hemosanalizado profundamente los aspectos técnicos acerca de las diferentesestructuras dinámicas y no dinámicas que se encuentran en el lenguaje,centrándonos especialmente y con particular énfasis en las funciones todasellas muy importantes para la programación estructurada, las colas ,las pilasherramientas indispensables para el ahorro del tiempo a nosotros losprogramadores solo la tecnología futura y los nuevos avances tecnológicos nosdarán la luz y nos enseñaran el camino por el cual debe pasar la humanidadllevada de la mano por la informática.

Page 21: Pilas y Colas Proyecto

PILAS Y COLAS

Autor: DIEGO ALEJANDROPULIDO MORENO

21

1. Con Clase: http://www.conclase.netPor: Salvador Pozo Coronado

2. Scribd: http://es.scribd.com/doc/52705482/Estructura-de-Datos-c-Pilas-Colas-Listas-Arboles-3

3. Blog: http://colas-prog-relva-sevila.blogspot.com/

4. Diseño: valorcreativo.blogspot.com/2011/11/portadas-word.html