La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

PILAS Y COLAS INTEGRANTES: JAVIER GONZALEZ JORGE LUIS SOLIS ISAC FERNANDEZ.

Presentaciones similares


Presentación del tema: "PILAS Y COLAS INTEGRANTES: JAVIER GONZALEZ JORGE LUIS SOLIS ISAC FERNANDEZ."— Transcripción de la presentación:

1 PILAS Y COLAS INTEGRANTES: JAVIER GONZALEZ JORGE LUIS SOLIS ISAC FERNANDEZ

2 LA PILA Uno de los conceptos mas utiles en computacion es la pila o stack Es un conjunto de elementos, en la que: Los elementos se añaden y se remueven por un solo extremo Este extremo es llamado “tope” de la pila La ultima en llegar, sera la primera en salir: LAST IN, FIRST OUT LIFO Ejemplo: Cuando un empleado se va de vacaciones, le llega correo a su escritorio. Las cartas se van “apilando”. Al regresar de vacaciones, la ultima carga en llegar, sera la primera que revisara Al terminar de revisarla, la nueva carta del tope de la pila habra cambiado Del “pilo” de cartas, la mas nueva que queda, sera la siguiente en ser revisada

3 TDA PILA: DEFINICION Dada una Pila llamada S ¿Qué datos serian importantes conocer sobre la Pila? ¿Y que operaciones podríamos efectuar a la misma? Push(s,elemento1) Elemento 1 Tope o Cima Push(s,elemento2) Elemento 2 Push(S,elemento3) Elemento 3 Pop(S) EstaVacia? No Si Al revisar c/carta, se la “sacaba” de la pila elemento = pop(s) La operación pop remueve el elemento Tope de la pila y lo retorna. La pila disminuye su tamaño Usemos el ejemplo del correo: Al acumularse, Cada carta(elemento), era “metida” a la pila: push(s,elemento) La operación push aumenta un elemento a la pila, y esta aumenta en su tamaño

4 EJEMPLO

5 COLAS Abunda este concepto, en la vida cotidiana Cuando vamos al cine, para comprar las entradas Cuando estamos en el supermercado, en el banco, etc. Como funciona Se puede decir que la cola tiene 2 extremos FRENTE, Y FINAL La computadora las utiliza: Para manejar la impresión de documentos, tiempo compartido, etc. Queue -> Cola Cada documento que se manda a imprimir es “encolado”, uno a uno es enviado a la impresora Frente Final Frente Todo el que llega se ubica al final de la cola Todo el que sale, lo hace por el frente de la cola La cola es por turno El primero en llegar, tiene la seguridad de que será el primero en salir: FIRST IN FIRST OUT -> FIFO

6 AJUSTANDOSE MEJOR A LA COLA Dijimos, una cola tiene dos extremos Frente y Final Siempre debemos llevar “control” de esas dos posiciones La estructura que definiría el nuevo TDA typedef struct{ ArrayU Datos; int Frente; int Final; } LsCont; Ya no se pueden insertar mas elementos, aunque hay espacio atrás! Cuando la cola recién comienza, El Frente es el índice inicial del arreglo: 0 El Final, como no hay, es –1 La cola esta vacía Si Frente > Final La cola esta llena Si Final == MAX –1 A medida que se ingresan elementos El Final aumenta Cuando se eliminan El Frente, se mueve hacia delante A 0 B 1 C 2 3 4 5 6 MAX = 7 FrenteFinal 0 B 1 C 2 D 3 E 4 5 601 C 2 D 3 E 4 F 5 G 6 FrenteFinalFrenteFinal QDesEncolar(Q); QEnColar(Q,’D’); QEnColar(Q,’E’); QDesEncolar(Q); QEnColar(Q,’F’); QEnColar(Q,’G’);

7 COMO RESOLVER EL PROBLEMA Como vimos esta estrategia no es optima, se desperdicia espacio libre El problema es al DesEnColar elementos Usando arreglos lineales, hay dos posibles soluciones: Retroceder con cada DesEncolamiento Al remover un elemento, no mover el Frente hacia delante Mas bien, hacer que todos los elementos retrocedan una posición Así no se desperdicia un “puesto” vacio En esta estrategia el Frente nunca se mueve, S iempre es 0 El Final disminuye en una posición Cuando la Cola este Llena, Retroceder Cuando Final llegue a su limite, Retroceder todos los elementos hasta el inicio del arreglo El Frente, que aumento durante el EnColamiento vuelve a ser 0 El Final disminuye el numero de “espacios vacios” que habian A 0 B 1 C 2 D 3 4 A 0 B 1 C 2 3 4 FinalFrenteFinal B 0 C 1 D 2 3 4 Frente Final A 0 B 1 C 2 D 3 4 0 B 1 C 2 D 3 4 Frente 01 C 2 D 34 01 C 2 D 3 E 4 Final El Final llego a su limite C 0 D 1 E 2 3 4 FrenteFinal C 0 D 1 2 3 4 DesEnCola(q); EnCola(q,’D’); DesEnColar(q); DesEnCola(q); EnColar(q,’E’);

8 //insertar elementos en una cola #include using namespace std; struct nodo{ int dato; nodo *siguiente }; //prototipos de la funcion void insertarcola(nodo *&,nodo *&,int); bool cola_vacia(nodo *); int main(){ nodo *frente = Null; nodo *fin = Null; int dato; cout<<"digite un numero:"; cin>>dato; insertarcola(frente,fin,dato);

9 //funcion para insertar elementos en una cola void insertarcola(nodo *&frente,nodo *&fin,int n){ nodo *nuevo_nodo=new nodo(); nuevo_nodo->dato=n; nuevo_nodo->siguiente=Null; if(cola_vacia(frente)){ frente= nuevo_nodo; } else{ fin->siguiente = nuevo_nodo; } fin = nuevo_nodo; cout<<"elemento"<<n<<"insertado a cola correctamente\n"; } //funcion para saber si la cola esta vacia bool cola_vacia(nodo *frente){ return (frente==Null)? true : false; }

10 Supongamos que queremos construir una pila para almacenar números enteros. Haremos pruebas intercalando varios "push" y "pop", y comprobando el resultado. Creamos un nodo para el valor que colocaremos en la pila. Hacemos que nodo->siguiente apunte a Pila. Hacemos que Pila apunte a nodo.

11 1.Hacemos que nodo apunte al primer elemento de la pila, es decir a Pila. 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 que queremos eliminar.

12


Descargar ppt "PILAS Y COLAS INTEGRANTES: JAVIER GONZALEZ JORGE LUIS SOLIS ISAC FERNANDEZ."

Presentaciones similares


Anuncios Google