Estructuras de Datos Pilas y Colas
Estructuras de Datos Pilas y Colas
Estructuras de Datos Pilas y Colas
ESTRUCTURAS DE DATOS
PILAS Y COLAS
INTRODUCCIÓ……………………………………………………..………..3
REPRESENTACIÓN DE COLAS………………………………….……..21
CONCLUSIÓN Y BIBLIOGRAFÍA……………………………………….32
INTRODUCCIÓN
3) Registros.
4) Archivos (Conocidos también como ficheros).
5) Conjuntos.
1) Listas.
2) Listas enlazadas.
3) Pilas.
4) Colas.
5) Arboles.
6) Grafos.
*) Listas: Una estructura de datos del tipo lista es una colección de datos que se
almacenan de forma consecutiva en la memoria principal de una computadora y
que cuyo número de elementos puede variar a través de la ejecución de un
programa (su asignación de memoria no está limitada apropósito, pero si se
encuentra limitada por la capacidad de la memoria principal de la maquina). Los
elementos que pertenecen a una lista son denominados “nodos de la lista” y
estos se acceden de forma secuencial. Podemos pensar en las listas como una
especie de “vectores” cuyo número de elementos puede variar. Es posible
eliminar, insertar, buscar, copiar, determinar el tamaño, clasificar y dividir una
lista.
Los nodos de una lista se encuentran constituidos por dos campos (Podemos
tratar a los nodos como simples registros), un campo que almacena el valor de
dicho nodo y un campo que almacena la dirección del siguiente nodo(Es decir
un puntero). Al último elemento de una lista en su campo puntero simplemente
apuntara al valor NULL.
Es importante entender cómo se constituyen los nodos o los elementos
de una lista ya que de la misma forma lo harán los nodos de las pilas y las
colas debido a que estas dos estructuras de datos son tipos de listas
especiales cuya única diferencia con las pilas normales son la forma en
que se realizan las operaciones con ellas, lo cual se tratará en su momento.
*) Pilas: Las pilas son un tipo de estructura de datos dinámica que son muy
similares a las listas y solo se diferencia de las mismas por la forma de introducir
y extraer o borrar datos de las mismas. En las pilas la inserción y borrado de
elementos de la misma solo se realiza en un solo extremo de la misma el cual
se le denomina cima o tope. Debido a que los elementos solo se pueden
introducir y borrar por un solo extremo (el superior), los elementos solo pueden
eliminarse en orden inverso al que se insertan en la pila. El último elemento que
se coloca en la pila es el primero que se puede sacar; Gracias a esto a las pilas
también se les conoce por estructuras LIFO (Last-in, first-out: Último en entrar,
primero en salir).
Existen muchas analogías que permiten entender el concepto de pila, ya que
estas se presentan en la vida real, un magnífico ejemplo es una pila de platos.
Si quisiéramos obtener el plato que se encuentra más debajo de la pila,
debemos ir retirando uno a uno los platos que se encuentren en la cima o arriba
de la pila, ya que si sacamos el plato de abajo directamente los demás
simplemente se romperán.
*) Colas: Las colas son otras estructuras de datos que se parecen a las listas al
igual de como lo hacen las pilas. La diferencia de las colas con respecto a las
listas y las pilas también es la forma o manera en que se insertan y borran datos
de la misma. En las colas la eliminación de elementos se realiza al principio de
la misma y las inserciones se realizan al final de la misma. El elemento que entro
primero sale también de primero, es por esto que a las colas las conocen también
como estructuras FIFO (First-in, first-out: Primero en entrar, primero en salir).
También existen muchas analogías en la vida real sobre las colas, las cuales
nos puede aclarar mucho mejor cómo funcionan las mismas. Un gran ejemplo
para esto serían las colas de espera para comprar un boleto para ver una película
directamente en el cine, las personas que lleguen primero serán las que podrán
comprar el boleto primero y en consecuencia saldrán primero que los demás, en
cambio, las que lleguen más tarde tardarán mucho más en comprar el boleto ya
que primero deberán comprarlo primero las personas que tenga delante y
posteriormente podrá comprar su boleto y luego salir de la cola.
¿QUE SON LAS OPERACIONES BÁSICAS CON PILAS?
Las operaciones básicas con las pilas son todas aquellas acciones principales
que se pueden realizar con estas, las más usuales son las operaciones de
insertar(push) y eliminar(pop) datos o elementos (formalmente llamados nodos).
Las operaciones que se pueden realizar con las colas son exactamente las
mismas que con las pilas o las listas, simplemente lo único que cambia es el
efecto que estas tienen sobre las colas, ya que las colas son estructuras de tipo
FIFO(first-in,first-out: primero en entrar, primero en salir), las operaciones de
insertar elementos se aplican al extremo superior de la cola(operación push) y
la operación de eliminar datos de la cola se aplica al elemento que se encuentra
en el extremo inferior de la cola(operación shift).
Ya aclaramos de forma breve las dos operaciones más relevantes de las colas,
ahora pasaremos a enlistar las operaciones que se pueden realizar con las colas.
4) Vaciar la cola.
Las colas circulares son una mejora de las colas simples, son estructuras de datos
dinámicas en la cual el siguiente elemento del último de la cola es en realidad el primer
elemento de la cola
Las colas circulares manejan las mismas operaciones que las colas simples.
DOBLE COLA Y APLICACIONES
Las dobles colas son otra variante de las colas. La doble cola es una cola cuyas
operaciones de inserción y eliminación se pueden realizar en cualquier de los
dos extremos de la misma
Aplicación: Las doble colas son muy utilizadas en los sistemas operativos de
las computadoras como por ejemplo “WINDOW”, los procesos internos que se
llevan a cabo en el sistema están constantemente peleando por los recursos de
la computadora pero esta batlla se controla mediante un orden o “cola de
prioridades”, el proceso que sea más urgente a ejecutar será el que se ejecute
primero y el de menos urgencia lo hará al final de todos los demás, sin embargo,
los procesos pueden cambiar su prioridad de un momento a otro cuando el
usuario empieza a realizar acciones especificas esto provoca que hayan
procesos que tenian una prioridad baja y se ejecutaban a lo último deban
ejecutarse de forma inmediata, es decir, deben pasar al principio de la cola y si
hablamos en términos de la teoría brevemente explicada, se debe realizar la
operación de eliminación(es decir, ejecución en tiempo real) de proceso más
urgente y para conseguir que este proceso quede al principio de una cola solo
es posible utilizando una estructura de doble cola.
#include <iostream>
using namespace std;
struct nodo{
int nro; struct nodo *sgte;
};
typedef nodo typedef nodo *ptrPila; *ptrPila; // creando // creando nodo tipo
puntero( tipo puntero( tipo de tipo de dato )
/* Apilar elemento elemento
---------------------------------------------------------------------*/
void push( ptrPila &p, int valor )
{
ptrPila aux;
aux = new(struct nodo); (struct nodo); // apuntamos // apuntamos al nuevo al
nuevo nodo creado nodo creado
aux->nro = valor;
aux->sgte = p ;
p = aux ;
}
/* Desapilar Desapilar elemento(devuelve elemento(devuelve elemento)
elemento)
---------------------------------------------------------------------*/
int pop( ptrPila &p )
{
int num ;
ptrPila aux;
aux = p ;
num = aux->nro; aux->nro; // asignamos // asignamos el primer el primer vamor
de vamor de la pila la pila
p = aux->sgte ;
delete(aux);
return num;
}
/* Muestra Muestra elementos elementos de la pila
---------------------------------------------------------------------*/
void mostrar_pila( ptrPila p )
{
ptrPila aux;
aux = p; // apunta al inicio de la lista
while( aux !=NULL )
{
cout<<"\t"<< cout<<"\t"<< aux->nro aux->nro <<endl; <<endl;
aux = aux->sgte;
}}
/* Eliminar Eliminar todos los elementos elementos de la pila
---------------------------------------------------------------------*/
void destruir_pila( ptrPila &p)
{
ptrPila aux;
while( p != NULL)
{
aux = p;
p = aux->sgte;
delete(aux);
}}
/* Menu de opciones opciones
----------------------------------------------------------------------*/
void menu()
{
cout<<"\n\t IMPLEMENTACION DE PILAS EN C++\n\n";
cout<<" cout<<" 1. APILAR "<<endl; "<<endl;
cout<<" cout<<" 2. DESAPILAR DESAPILAR "<<endl; "<<endl;
cout<<" cout<<" 3. MOSTRAR MOSTRAR PILA "<<endl; "<<endl;
cout<<" cout<<" 4. DESTRUIR DESTRUIR PILA "<<endl; "<<endl;
cout<<" cout<<" 5. SALIR "<<endl; "<<endl;
cout<<"\n INGRESE OPCION: ";
}
/* Funcion Funcion Principal Principal
----------------------------------------------------------------------*/
int main() {
ptrPila p ptrPila p = NULL; = NULL; // creando // creando pila
int dato;
int op;
int x ; // numero que devuelve la funcon pop
system("color 0b");
do
{
menu(); menu(); cin>> op;
switch(op)
{
case 1:
cout<< "\n NUMERO A APILAR: "; cin>> dato;
push( p, dato );
cout<<"\n\n\t\tNumero " << dato << " apilado...\n\n";
break;
case 2:
x = pop( p );
cout<<"\n\n\t\tNumero "<< x <<" desapilado...\n\n";
break;
case 3:
cout << "\n\n MOSTRANDO PILA\n\n";
if (p!=NULL)
mostrar_pila( p );
else
cout<<"\n\n\tPila vacia..!"<<endl;
break;
case 4:
destruir_pila( p );
cout<<"\n\n\t\tPila eliminada...\n\n";
break; }
cout<<endl<<endl;
system("pause"); system("cls");
}
while
(op!=5);
return 0;
}
#include <iostream>
#include <stdlib.h>
using namespace std;
/* Estructura Estructura de los nodos de la cola
-----------------------------------------------------------------*/
struct nodo
{
int nro;
struct nodo *sgte;
};
/* Estructura Estructura de la cola
-----------------------------------------------------------------*/
struct cola
{
nodo *delante;
nodo *atras ;
};
/* Encolar Encolar elemento elemento
------------------------------------------------------------------*/
void encolar( struct cola &q, int valor )
{
struct nodo *aux = new(struct nodo);
aux->nro = valor;
aux->sgte = NULL;
if ( q.delante == NULL)
q.delante q.delante = aux; // encola el primero elemento primero elemento
else
(q.atras)->sgte = aux;
q.atras q.atras = aux; // puntero puntero que siempre siempre apunta al ultimo
elemento elemento
}
/* Desencolar Desencolar elemento elemento
------------------------------------------------------------------*/
int desencolar( struct cola &q )
{
int num ;
struct nodo *aux ;
aux = q.delante; q.delante; // aux apunta al inicio de la cola
num = aux->nro;
q.delante = (q.delante)->sgte;
delete(aux); delete(aux); // libera memoria memoria a donde apuntaba apuntaba
aux
return num; }
/* Mostrar Mostrar Cola
-------------------------------------------------------------------*/
void muestraCola( struct cola q )
{
struct nodo *aux;
aux = q.delante;
while( aux != NULL )
{
cout<<" cout<<" "<< aux->nro aux->nro ;
aux = aux->sgte;
}}
/* Eliminar Eliminar todos los elementos elementos de la Cola
-------------------------------------------------------------------*/
void vaciaCola( struct cola &q)
{
struct nodo *aux;
while( q.delante != NULL)
{
aux = q.delante;
q.delante = aux->sgte;
delete(aux);
}
q.delante = NULL;
q.atras q.atras = NULL;
}
/* Menu de opciones opciones
--------------------------------------------------------------------*/
void menu()
{
cout<<"\n\t IMPLEMENTACION DE COLAS EN C++\n\n"; cout<<" cout<<" 1.
ENCOLAR ENCOLAR "<<endl; "<<endl;
cout<<" cout<<" 2. DESENCOLAR DESENCOLAR "<<endl; "<<endl;
cout<<" cout<<" 3. MOSTRAR MOSTRAR COLA "<<endl; "<<endl;
cout<<" cout<<" 4. VACIAR COLA "<<endl; "<<endl;
cout<<" cout<<" 5. SALIR "<<endl; "<<endl;
cout<<"\n INGRESE OPCION: ";
}
/* Funcion Funcion Principal Principal
--------------------------------------------------------------------*/
int main()
{
struct cola q;
q.delante = NULL;
q.atras q.atras = NULL;
int dato; int dato; // numero // numero a encolar encolar
int op; // opcion del menu
int x ; // numero que devuelve devuelve la funcon pop
system("color 0b");
do
{
menu(); menu(); cin>> op;
switch(op)
{
case 1:
cout<< "\n NUMERO A ENCOLAR: "; cin>> dato;
encolar( q, dato );
cout<<"\n\n\t\tNumero " << dato << " encolado...\n\n";
break
;
case 2:
x = desencolar( q );
cout<<"\n\n\t\tNumero "<< x <<" desencolado...\n\n";
break;
case 3:
cout << "\n\n MOSTRANDO COLA\n\n";
if (q.delante!=NULL) muestraCola( q );
else cout<<"\n\n\tC cout<<"\n\n\tCola vacia...!"<< vacia...!"<<endl;
break;
case 4:
vaciaCola( q );
cout<<"\n\n\t\tHecho...\n\n";
break; }
cout<<endl<<endl;
system("pause"); system("cls");
}while(op!=5);
return 0; }
CONCLUSIÓN
Bibliografía: