Está en la página 1de 5

Estructuras de datos Clase terica 7

Contenido Pilas y colas

Qu es eso de pilas y colas?

Material elaborado por: Julin Moreno Facultad de Minas, Departamento de Ciencias de la Computacin y la Decisin

Pilas y colas
Las pilas y las colas son casos particulares (simplificaciones) de listas que cuentan con dos mtodos principales:

Pilas
En la pila al extraer se obtiene el ltimo elemento que acaba de insertarse. Por esta razn tambin se conocen como estructuras de datos LIFO (Last In First Out: ltimo en entrar, primero en salir). Las pilas se utilizan en muchas aplicaciones que utilizamos con frecuencia. Un ejemplo es la gestin de ventanas en Windows: cuando se cierra una ventana siempre se recupera la que se tena detrs.

push: Inserta un nuevo elemento pop: Extrae un elemento


En ambos casos el mtodo push inserta el nuevo elemento despus del ltimo. Pila Cola

Pilas mediante arreglos dinmicos


class pilaX { private: claseX *primero; // Para el manejo del array que representa la pila int n; public: pilaX(); int longitud(); void push(claseX X); claseX pop(); };

Pilas mediante arreglos dinmicos


//Constructor pilaX::pilaX(){ primero = NULL; n = 0; } //Consulta int pilaX::longitud(){ return n; }

//Constructor //Consulta //Insercin //Extraccin

Ejemplo:
Tamao previo Nuevo tamao

//Insercin void pilaX::push(claseX X) { primero = (claseX*)realloc((primero),(n+1)*sizeof(claseX)); primero[n] = X; // que es lo mismo que *(primero + n) = X; n++; }

Pilas mediante arreglos dinmicos


//Extraccin claseX pilaX::pop() { claseX X; if (n == 0){ cout << \nError: pila vaca; } else{ X = primero[n-1]; // que es lo mismo que X = *(primero +n-1); primero = (claseX*)realloc((primero), (n-1)*sizeof(claseX)); n--; } return X; }
Ejemplo:
Tamao previo Nuevo tamao

Pilas mediante listas doblemente enlazadas


class nodoX {
public: nodoX *siguiente, *anterior; claseX X; public: nodoX(nodoX *sig, nodoX *ant, claseX X1); //Constructor }; nodoX::nodoX(nodoX *sig, nodoX *ant, claseX X1){ siguiente = sig; anterior = ant; X = X1; }

Pilas mediante listas doblemente enlazadas


class pilaX {
private: nodoX *cursor; int n; public: pilaX(); int longitud(); void push(claseX X); claseX pop(); };

Pilas mediante listas doblemente enlazadas


void pilaX::push(claseX X1){ nodoX *nuevoNodo; nuevoNodo = new nodoX(NULL, NULL, X1);

//Constructor //Consulta //Insercin //Extraccin

if (n != 0){ cursor->siguiente = nuevoNodo; nuevoNodo->anterior = cursor; } cursor = nuevoNodo; n++; }

pilaX::pilaX() { cursor = null; n = 0; };


int pilaX::longitud() { return n; };

Pilas mediante listas doblemente enlazadas


Ejemplo de push:
0021 NULL 0054 0054 0021 NULL 0078 NULL X1 NULL

Pilas mediante listas doblemente enlazadas


claseX pilaX::pop(){ claseX X1; if (n == 0){ cout << "\nError: pila vacia"; } else if(cursor->anterior == NULL){ X1 = cursor->X; cursor = NULL; n--; } else{ X1 = cursor->X; (cursor->anterior)->siguiente = NULL; cursor = cursor->anterior; n--; } return X1; }

0021 NULL 0054

0054 0021 0078

0078 0054 X1 NULL

Pilas mediante listas doblemente enlazadas


Ejemplo de pop:
0021 NULL 0054 0054 0021 0078 0078 0054 NULL

Colas
En la cola simple al extraer se obtiene el elemento que se haya insertado hace ms tiempo. Por esta razn tambin se conocen como estructuras de datos FIFO (First In First Out: primero en entrar, primero en salir).

0021
NULL 0054

0054 0021 NULL

0078 NULL

Se retorna NULL

Colas mediante arreglos dinmicos


class colaX { private: nodoX *primero; // Para el manejo del array que representa la pila int n; public: colaX(); int longitud(); void push(claseX X); claseX pop(); };

Colas mediante arreglos dinmicos


//Constructor colaX::colaX(){ primero = NULL; n = 0; }
//Consulta int colaX::longitud(){ return n; }

//Constructor //Consulta //Insercin //Extraccin

Ejemplo:
Tamao previo Nuevo tamao

//Insercin void colaX::push(claseX X) { primero = (claseX*)realloc((primero), (n+1)*sizeof(claseX)); primero[n] = X; // que es lo mismo que *(primero + n) = X; n++; }

Colas mediante arreglos dinmicos


//Extraccin claseX colaX::pop() { claseX X; if (n == 0){ cout << \nError: cola vaca; } else{ X = primero[0]; for (int i = 0; i < n-1; i++){ primero[i] = primero[i+1]; } primero = (claseX*)realloc((primero), (n-1)*sizeof(claseX)); n--; } return X; Ejemplo: }
Tamao previo Nuevo tamao

Colas mediante listas doblemente enlazadas


class colaX { private: nodoX *cursor; int n; public: colaX(); int longitud(); void push(claseX X); claseX pop(); }; colaX:: colaX() { cursor = null; n = 0; }; int colaX ::longitud() { return n; };

//Constructor //Consulta //Insercin //Extraccin

Colas mediante listas doblemente enlazadas


void colaX::push(claseX X1){ nodoX *nuevoNodo, *aux; nuevoNodo = new nodoX(NULL, NULL, X1); if (n == 0){ cursor = nuevoNodo; } else{ aux = cursor; while (aux->siguiente != NULL){ aux = aux->siguiente; } aux->siguiente = nuevoNodo; nuevoNodo->anterior = aux; } n++; }

Colas mediante listas doblemente enlazadas


Ejemplo de push:
0021 NULL 0054 0054 0021 NULL 0078 NULL X1 NULL

0021 NULL 0054

0054 0021 0078

0078 0054 X1 NULL

Colas mediante listas doblemente enlazadas


claseX colaX::pop(){ claseX X1; if (n == 0){ cout << "\nError: pila vacia"; } else if(cursor->siguiente == NULL){ X1 = cursor->X; cursor = NULL; n--; } else{ X1 = cursor->X; (cursor->siguiente)->anterior= NULL; cursor = cursor->siguiente; n--; } return X1; }

Colas mediante listas doblemente enlazadas


Ejemplo de pop:
0021 NULL 0054 Se retorna 0021 NULL 0054 0054 0021 NULL 0078 NULL X1 NULL 0054 0021 0078 0078 0054 NULL

Colas con prioridad


Adems de la cola simple, existen otros tipos de colas, como por ejemplo la cola con prioridad donde el elemento que se extrae es aquel que tenga mayor prioridad. Puede darse el caso que existan varios elementos con la misma prioridad, en este caso se extrae aquel que primero llego (FIFO).

Tareas
1. Agregar a las clases para el manejo de pilas y colas, tanto las implementadas mediante arreglos dinmicos como mediante listas doblemente enlazadas, un mtodo mostrarElementos. Agregue atributos y/o modifique los mtodos ya definidos si es necesario. 2. Disear e implementar una cola con prioridad tanto mediante arreglos dinmicos como mediante listas doblemente enlazadas. Se deben incluir los mtodos de construccin, consulta, insercin, extraccin y presentacin.

10 20 30

Estructuras de datos Clase terica 7

FIN DE LA CLASE
Gracias por la atencin

Material elaborado por: Julin Moreno Facultad de Minas, Departamento de Ciencias de la Computacin y la Decisin

También podría gustarte