Pilas y Colas

29
NOMBRE DEL ALUMNO: DE LA PAZ REYES SOFIA KARINA #CONTROL: E13020011 CRUZ RAMOS JESUS ALEJANDRO #CONTROL: E13020010 OSORNIO RAMIRES DIEGO ALBERTO #CONTROL: E13020064 MATERIA: ESTRUCTURA DE DATOS 10 -11 hrs. CATEDRATICO: BARRADAS BALLESTEROS BERNARDO LUIS NOMBRE DEL TRABAJO: UNIDAD II: PILAS Y COLAS (SIMPLES Y CIRCULARES) OBSERVACIONES: ___________________________________________________________ ___________________________________________________________ ______________________ ____________________ 1 INSTITUTO TECNOLOGICO DE VERACRUZ

description

sdfg

Transcript of Pilas y Colas

NOMBRE DEL ALUMNO:INSTITUTO TECNOLOGICO DE VERACRUZ

DE LA PAZ REYES SOFIA KARINA #CONTROL: E13020011CRUZ RAMOS JESUS ALEJANDRO #CONTROL: E13020010OSORNIO RAMIRES DIEGO ALBERTO #CONTROL: E13020064

MATERIA:ESTRUCTURA DE DATOS 10 -11 hrs.

CATEDRATICO:BARRADAS BALLESTEROS BERNARDO LUIS

NOMBRE DEL TRABAJO:UNIDAD II: PILAS Y COLAS (SIMPLES Y CIRCULARES)OBSERVACIONES:____________________________________________________________________________________________________________________________________________

____________________FIRMAINDICE

INTRODUCCION3

2.- PILAS2.2 Que es una pila?4

2.3 Operaciones bsicas de una pila5

2.4 Implementacin

2.4.1 Mediante array2.4.2 Mediante lista enlazada7

78

2.5 Ejemplo 1: Pila de productos y cdigos10

2.5.1 Ejemplo 2: Pila que almacene artculos deportivos14

2.5.2 Ejemplo 3: Programa Para Control De Reserva de Aviones17

CONCLUSION25

REFERENCIAS26

INTRODUCCION

La presente investigacin se refiere al tema de pilas sobre estructura de datos en las cuales podemos definirlas de una manera simple como un tipo especial de lista lineal en la que la insercin y borrado de nuevos elementos se realiza slo por un extremo que se denomina cima o tope (top). Dado que las operaciones de insertar y eliminar se realizan por un solo extremo (el superior), los elementos solo pueden eliminarse en orden inverso al que se inserta en la pila. El ltimo elemento que se pone en la pila es el primero que se puede sacar; por ello, a estas estructuras se le conoce por el nombre de LIFO (last-in, first-out, ltimo en entrar, primero en salir).La mayora de algoritmos que desarrollaremos se centrarn en la repeticin de un conjunto de acciones sobre una secuencia de datos. Ah radica la importancia de saber trabajar con las pilas. Sin ir ms lejos, en asignaturas anteriores ya habis estudiado los esquemas de recorrido y bsqueda en una secuencia. Pero adems, aparte de la importancia del tratamiento de las pilas, en este mdulo averiguaremos cmo se almacenan de manera que posteriormente podamos acceder a ellas secuencialmente.

PILAS

QUE ES UNA PILA?

Una pila representa una estructura lineal de datos en que se puede agregar o quitar elementos nicamente por uno de los dos extremos. En consecuencia, los elementos de una pila se eliminan en el orden inverso al que se insertaron. Debido a est caracterstica, se le conoce como estructura LIFO (last input, first output).

Existen muchos casos prcticos en los que se utiliza la idea de pila: Ejemplo; pila de platos, en el supermercado latas. Las pilas con estructuras lineales como los arreglos, ya que sus componentes ocupan lugares sucesivos en la ED y c/u tienen un nico sucesor/predecesor, con excepcin del primero/ltimo.

Las pilas no son estructuras fundamentales de datos; es decir no estn definidas como tales en los lenguajes de programacin. Para su representacin requieren de otras EDs, como: Arreglos, Listas

Es importante definir el tamao de la mximo 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.

Al utilizar arreglos para implementar pilas se tiene la limitacin de que se debe reservar el espacio en memoria con anticipacin. Una vez dado un mximo de capacidad a la pila no es posible insertar un nmero de elementos mayor que el mximo establecido. Si esto ocurre, en otras palabras si la pila esta llena y se intenta insertar un nuevo elemento, se producir un error conocido como desbordamiento overflow.

OPERACIONES BASICAS DE UNA PILA

1. PUSH (INSERTAR) En primer lugar hay que decir que esta operacin es muy comnmente denominadapush.La insercin en una pila se realiza en su cima, considerando la cima como el ltimo elemento insertado. Esta es una de las particularidades de las pilas, mientras el resto de estructuras de datos lineales se representan grficamente en horizontal, las pilas se representan verticalmente. Por esta razn es por lo que se habla de cima de la pila y no de cola de la cima. Aunque en el fondo sea lo mismo, el ltimo elemento de la estructura de datos.

Las operaciones a realizar para realizar la insercin en la pila son muy simples, hacer que el nuevo nodo apunte a la cima anterior, y definir el nuevo nodo como cima de la pila.Vamos a ver un ejemplo de una insercin:

Al insertar sobre esta pila el elemento 0, la pila resultante sera:

2. POP (REMOVER)Esta operacin es normalmente conocida comopop.Cuando se elimina un elemento de la pila, el elemento que se borra es el elemento situado en la cima de la pila, el que menos tiempo lleva en la estructura.Las operaciones a realizar son muy simples, avanzar el puntero que apunta a la cima y extraer la cima anterior.Si aplicamos la operacinpopa la pila de 4 elementos representada arriba el resultado sera:

3. VACIA Regresa un valor booleano indicando si la cola tiene o no elementos (true si la cola esta vaca, false si la cola tiene al menos un elemento).

4. LLENARegresa un valor booleano indicando si la cola tiene espacio disponible para insertar nuevos elementos ( true si esta llena y false si existen espacios disponibles).

IMPLEMENTACIN

MEDIANTE ARRAYEsta implementacin es esttica, es decir, da un tamao mximo fijo a la pila, y si se sobrepasa dicho lmite se produce un error. La comprobacin de apilado en una pila llena o desapilado en una pila vaca no se han hecho, pero s las funciones de comprobacin, que el lector puede modificar segn las necesidades de su programa.- DECLARACIN:struct tpila{ int cima; int elementos[MAX_PILA];};Nota: MAX_PILA debe ser mayor o igual que 1.

- PROCEDIMIENTO DE CREACIN:void crear(struct tpila *pila){ pila->cima = -1;}

- FUNCIN QUE DEVUELVE VERDADERO SI LA PILA EST VACA:int vacia(struct tpila *pila){ return (pila->cima == -1);}

- FUNCIN QUE DEVUELVE VERDADERO SI LA PILA EST 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;}

- PROCEDIMIENTO DE DESAPILADO:void desapilar(struct tpila *pila, int *elem){ *elem = pila->elementos[pila->cima--];}

IMPLEMENTACIN MEDIANTE LISTA ENLAZADAPara hacer la implementacin se utiliza una lista con cabecera ficticia (ver apartado de listas). Dado el carcter dinmico de esta implementacin no existe una funcin que determine si la pila est llena. Si el usuario lo desea puede implementar un anlisis del cdigo devuelto por la funcin de asignacin de memoria.- Declaracin:struct tpila{ int clave; struct tpila *sig;};- Procedimiento de creacin:void crear(struct tpila **pila){ *pila = (struct tpila *) malloc(sizeof(struct tpila)); (*pila)->sig = NULL;}- Funcin que devuelve verdadero si la pila est vaca:int vacia(struct tpila *pila){ return (pila->sig == NULL);}

- PROCEDIMIENTO DE APILADO (APILA AL COMIENZO DE LA LISTA):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;}- PROCEDIMIENTO DE DESAPILADO (DESAPILA DEL COMIENZO DE LA LISTA):void desapilar(struct tpila *pila, int *elem){ struct tpila *aux;

aux = pila->sig; *elem = aux->clave; pila->sig = aux->sig; free(aux);}

EJEMPLO 1: Pilas de productos con cdigo #include #include #include #include structproductos{ intcodigo; charnombre[50]; intexistencia; floatprecio;};structnodo{ structproductos dato; structnodo *proximo;};/* Declaracion de funciones */voidarchivo(FILE *fp);structnodo *nuevonodo();structnodo *creapila(structnodo *pri,structproductos x);voidmuestra(structnodo *pri, FILE *fp);voidmain(){ structproductos x; structnodo *pri=NULL; FILE *fp; charopcion;floatauxiliar=0; if((fp=fopen("C:\\Datos.txt","wb"))==NULL) { getch(); } fseek(fp,0,2); do {fflush(stdin); printf("Ingrese el Codigo de Producto "); scanf("%d",&x.codigo); fflush(stdin); printf("Ingrese Nombre de Producto "); gets(x.nombre); fflush(stdin); printf("Ingrese la Existencia "); scanf("%d",&x.existencia); fflush(stdin); printf("Ingrese el Precio "); scanf("%f",&auxiliar); x.precio=auxiliar; pri=creapila(pri,x); fflush(stdin); printf("Desea Ingresar otro Registro? (S/N) "); scanf("%c",&opcion); opcion=toupper(opcion); }while(opcion=='S'); muestra(pri,fp); fflush(stdin); printf("El contenido de la Pila se ha Guardado. Desea Visualizarlo? (S/N)"); scanf("%c",&opcion); opcion=toupper(opcion); if(opcion=='S')archivo(fp); getch(); fclose(fp);}structnodo *creapila(structnodo *pri,structproductos x){ structnodo *p; p=nuevonodo(); (*p).dato=x; (*p).proximo=pri; returnp;}structnodo *nuevonodo(){ structnodo *p; p=(structnodo *)malloc(sizeof(structnodo)); if(p==NULL) { printf("Memoria RAM Llena"); getch(); exit(0); } returnp;}voidmuestra(structnodo *pri, FILE *fp){ clrscr(); structnodo *aux; while(pri!=NULL) { printf("Codigo: %d\n",(*pri).dato.codigo); printf("Nombre: %s\n",(*pri).dato.nombre); printf("Existencia: %d\n",(*pri).dato.existencia); printf("Precio: %0.2f\n\n",(*pri).dato.precio); fwrite(&pri->dato,sizeof(structproductos),1,fp); aux=pri; pri=(*pri).proximo; free(aux); }}voidarchivo(FILE *fp){ structproductos x; clrscr(); printf("Datos del Archivo:\n\n"); fread(&x,sizeof(structproductos),1,fp); while(!feof(fp)) { printf("Codigo: %d\n",x.codigo); printf("Nombre: %s\n",x.nombre); printf("Existencia: %d\n",x.existencia); printf("Precio: %0.2f\n\n",x.precio); fread(&x,sizeof(structproductos),1,fp); } printf("Fin de Archivo");}EJEMPLO 2: Pila que almacene artculos deportivos public class ProgramaPilaArticulosDeportivos {public static void main(String[] args) {IntefazArticulosDeportivos interfazArticulosDeportivos;DatosArticulosDeportivos datosArticulosDeportivos;Pila pila;int numero;String menu;String nombre;int opcion;interfazArticulosDeportivos = new IntefazArticulosDeportivos();datosArticulosDeportivos = new DatosArticulosDeportivos();numero = Integer.parseInt(JOptionPane.showInputDialog("Nmero mximo de Articulos Deportivos en la Pila : "));pila = new Pila(numero);opcion = 0;nombre = "";menu = "";menu = menu + "1. Incluir articulo deportivo en la pila\n";menu = menu + "2. Quitar el ltimo articulo deportivo agregado\n";menu = menu + "3. Mostrar arreglo de articulos deportivos\n";menu = menu + "4. Contar articulos deportivos en la pila\n";menu = menu + "5. Recuperar articulo por numero de orden\n";menu = menu + "6. Recuperar el ultimo articulo borrado\n";menu = menu + "7. Ordenar por el Mayor precio\n";menu = menu + "8. Ordenar por la Mayor unidad\n";menu = menu + "9. Ordenar por nombre del producto\n";menu = menu + "10. Sacar un articulo\n";menu = menu + "11. Contar ArticulosBorrados\n";menu = menu + "12. Encontrar el Precio ms Bajo\n";menu = menu + "13. Encontrar La Unidad ms Baja\n";menu = menu + "14. Encontrar un Articulo por Nombre\n";menu = menu + "15. Salir\n";do{opcion = Integer.parseInt(JOptionPane.showInputDialog (menu)); switch (opcion){case 1 : {numero = Integer.parseInt(JOptionPane.showInputDialog("Numero de Articulo Deportivo a Incluir en la Pila : "));pila.incluirArticulo(datosArticulosDeportivos.cargarArticuloDeportivo(numero));break;}case 2 : {if (pila.tope < 0){JOptionPane.showMessageDialog(null, "La pila esta vacia");}else{interfazArticulosDeportivos.presentarArticulosDeportivos(pila.quitarArticulo());JOptionPane.showMessageDialog(null, "Se borro el ultimo elemento, pero se \n" + "guardo en otra Pila");break;}}case 3 : {interfazArticulosDeportivos.ImprimePila(pila);break;}case 4 : {JOptionPane.showMessageDialog(null, "La Pila tiene " + (pila.tope + 1) + "/" + pila.vectorpila.length+ " articulos deportivos");break;}case 5 : {numero = Integer.parseInt(JOptionPane.showInputDialog("Nmero del Articulo a recuperar : "));interfazArticulosDeportivos.presentarArticulosDeportivos(pila.recuperarArticuloPrueba(numero));break;}case 6 : {pila.incluirArticulo(pila.recuperarArticuloBorrado());JOptionPane.showMessageDialog(null, "Recuperando");break;}case 7 : {pila.OrdenarMayorPrecio();break;}case 8 : {pila.OrdenarMayorUnidad();break;}case 9 : {pila.OrdenarNombreProducto();break;}case 10 : {pila.quitarArticulosPorNombre(Integer.parseInt(JOptionPane.showInputDialog("Nmero a quitar")));break;}case 11 : {JOptionPane.showMessageDialog(null, "La lista tiene "+ pila.verCantidadborrada()+" Articulos deportivos");break;}case 12 : { interfazArticulosDeportivos.presentarArticulosDeportivos(pila.MenorPrecio());break;}case 13 : { interfazArticulosDeportivos.presentarArticulosDeportivos(pila.MenorUnidad());break;}case 14 : { nombre = JOptionPane.showInputDialog("Nombre del Articulo a recuperar : ");interfazArticulosDeportivos.presentarArticulosDeportivos(pila.NombreProducto());break;}}} while ((opcion >= 1) && (opcion