Académique Documents
Professionnel Documents
Culture Documents
DE VERACRUZ
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
OBSERVACIONES:
________________________________________________________________________________
____________________________________________________________
____________________
FIRMA
INDICE
INTRODUCCION
3
1
2.- PILAS
CONCLUSION
REFERENCIAS
INTRODUCCION
4
5
7
7
8
10
14
17
25
26
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
2
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
3
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.
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:
2. POP (REMOVER)
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. LLENA
Regresa 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 ARRAY
Esta 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:
- PROCEDIMIENTO DE APILADO:
- PROCEDIMIENTO DE DESAPILADO:
}
- 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);
#include <ctype.h>
struct productos
{
int codigo;
char nombre[50];
int existencia;
float precio;
};
struct nodo
{
struct productos dato;
struct nodo *proximo;
};/* Declaracion de funciones */
void archivo(FILE *fp);
struct nodo *nuevonodo();
struct nodo *creapila(struct nodo *pri, struct productos x);
void muestra(struct nodo *pri, FILE *fp);
void main()
{ struct productos x;
struct nodo *pri=NULL;
FILE *fp;
char opcion; float auxiliar=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);
}
struct nodo *creapila(struct nodo *pri, struct productos x)
{
struct nodo *p;
p=nuevonodo();
(*p).dato=x;
(*p).proximo=pri;
return p;
}
10
11
{
struct productos x;
clrscr();
printf("Datos del Archivo:\n\n");
fread(&x,sizeof(struct productos),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(struct productos),1,fp);
}
printf("Fin de Archivo");
}
12
menu = menu
menu = menu
menu = menu
menu = menu
menu = menu
menu = menu
menu = menu
do{
13
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 <= 14));
}
14
codigos
asiento vacio = 0
asiento reservado = 1
asiento confirmado = 2
system("cls");
cout<<"\n\n\t Seleccione Una Opcion Del Menu\n";
cout<<"\n\n\t 1. Reservar\n";
cout<<"\n\n\t 2. Confirmar Reserva\n";
cout<<"\n\n\t 3. Cancelar Reserva\n";
cout<<"\n\n\t 4. Estado del Avion\n";
cout<<"\n\n\t 5. Salir\n";
cout<<"\nIntroduzca el Numero de la Opcion:";
cin>>opcion;
switch(opcion)
15
{
case '1':
cout<<"\nDesea Vijar En:""\n""Avion 1""\n""Avion 2""\n""Avion 3""\n""Eliga el
Numero Correspondiente al Avion Deseado: ";
cin>>av;
cout<<"\nEn que Clase Desea Viajar: ""\n""1-Primera Clase""\n""2-Segunda
Clase\n";
cin>>c;
if (c==1)
{
do {
cout<<"\nIntodusca Un Numero De Asiento Entre 0 y 14: ";
cin>>asiento;
if ((asiento<0)||(asiento>14))
cout<<"\n Dato De Asiento No Valido....";
} while ((asiento<0)||(asiento>14));
}
else
{cout<<"Elija Un Asiento Entre 15 y 49:";
do {
cout<<"\nIntroduzca El Numero De Asiento: ";
cin>>asiento;
if ((asiento<15)||(asiento>49))
cout<<"\nDato De Asiento No Valido....";
} while ((asiento<15)||(asiento>49));
}
if (av==1)
{ if (av1[asiento]==0)
{av1[asiento]=1;
cout<<"su operacion se realizo con exito...";
}
else
cout<<"El Asiento No Esta Disponible....";
}
16
if(av==2)
{ if (av2[av==2]==0)
{av2[asiento]=1;
cout<<"su operacion se realizo con exito...";
}
else
cout<<"El Asiento No Esta Disponible....";
}
if(av==3)
{ if (av3[av==3]==0)
{av3[asiento]=1;
cout<<"su operacion se realizo con exito...";
}
else
cout<<"El Asiento No Esta Disponible....";
}
break;
case '2':
Reservo:";
17
{av2[asiento]=2;
cout<<"su confirmacion se realizo con exito...";
}
else
cout<<"El Asiento No Ha Sido Reservado Aun por Favor Reservelo Antes....";
}
if(av==3)
{ if (av3[av==3]==1)
{av3[asiento]=2;
cout<<"su confirmacion se realizo con exito...";
}
else
cout<<"El Asiento No Ha Sido Reservado Aun por Favor Reservelo Antes....";
}
break;
case '3':
cout<<"\nPara Cancelar Su Reserva:""\n""Ingrese El Numero De Avion En Que
Reservo:";
cin>>av;
cout<<"\nIngrese El Numero De Asiento:";
cin>>asiento;
if (av==1)
{if (av1[asiento]==0)
cout<<"\nEl Asiento No Ha Sido Reservado Aun Por Favor Reservelo Antes....";
{if (av1[asiento]==2)
cout<<"El Asiento Ya No Se Puede Cancelar Gracias....";
else
{if (av1[asiento]==1)
av1[asiento]=0;
cout<<"\nSu Reserva Ha Sido Cancelada.";
}
}
}
18
if(av==2)
{ if (av2[av==2]==2)
av2[asiento]=0;
else
cout<<"El Asiento Ya No Se Puede Cancelar Gracias....";
}
if(av==3)
{ if (av3[av==3]==2)
av3[asiento]=0;
else
cout<<"El Asiento Ya No Se Puede Cancelar Gracias....";
}
break;
case '4':
cout<<"\nQue avion Desea Verificar Avion 1, Avion 2 o Avion 3:";
cin>>av;
cout<< "\nQue Desea Veriaficar:""\n""1-Reservas""\n""2-Reservas
Confirmadas""\n""3-Asientos Vacios""\n""Eliga La Opcion a Verificaar: ";
cin>>m;
if ((av==1)&&(m==1))
{ cout<<"Los Asientos Reservados Son: \n";
for (i=0;i<=49;i++)
{ if(av1[i]==1)
cout<<i<<"-"; }
}
else
if ((av==1)&&(m==2))
{ cout<<"Los Asientos Confirmados Son: \n";
for (i=0;i<=49;i++)
{ if(av1[i]==2)
cout<<i<<"-"; }
}
else
19
if ((av==1)&&(m==3))
{ cout<<"Los Asientos Vacios Son: \n";
for (i=0;i<=49;i++)
{ if(av1[i]==0)
cout<<i<<"-"; }
}
if ((av==2)&&(m==1))
{ cout<<"Los Asientos Reservados Son: \n";
for (i=0;i<=49;i++)
{ if(av2[i]==1)
cout<<i<<"-"; }
}
else
if ((av==2)&&(m==2))
{ cout<<"Los Asientos Confirmados Son: \n";
for (i=0;i<=49;i++)
{ if(av2[i]==2)
cout<<i<<"-"; }
}
else
if ((av==2)&&(m==3))
{ cout<<"Los Asientos Vacios Son: \n";
for (i=0;i<=49;i++)
{ if(av2[i]==0)
cout<<i<<"-"; }
}
if ((av==3)&&(m==1))
{ cout<<"Los Asientos Reservados Son: \n";
for (i=0;i<=49;i++)
{ if(av3[i]==1)
cout<<i<<"-"; }
20
}
else
if ((av==3)&&(m==2))
{ cout<<"Los Asientos Confirmados Son: \n";
for (i=0;i<=49;i++)
{ if(av3[i]==2)
cout<<i<<"-"; }
}
else
if ((av==3)&&(m==3))
{ cout<<"Los Asientos Vacios Son: \n";
for (i=0;i<=49;i++)
{ if(av3[i]==0)
cout<<i<<"-"; }
}
break;
case '5':
break;
default:
cout<<"\n
";
}
getch();
} while (opcion != '5');
cout<<"\nHa Decidido Salir Del Menu...";
getch();
return 0;
}
//</code>
21
CONCLUSION
Hemos aprendido a construir nuevos TAD para poder modelizar situaciones del mundo real. Primero,
especificando la signatura del tipo con las operaciones que se podrn aplicar y luego abordando su
implementacin. La implementacin consistir en escoger una representacin de los datos y codificar
las operaciones evaluando su coste espacial y temporal.
Por ello es importante mencionar es una lista ordenada o estructura de datos en la que el modo de
acceso a sus elementos es de tipo LIFO (del ingls Last In First Out, ltimo en entrar, primero en
salir) que permite almacenar y recuperar datos. Esta estructura se aplica en multitud de ocasiones
en el rea de informtica debido a su simplicidad y ordenacin implcita de la propia estructura. Para
el manejo de los datos se cuenta con dos operaciones bsicas: apilar (push), que coloca un objeto en
la pila, y su operacin inversa, retirar (o desapilar, pop), que retira el ltimo elemento apilado.
22
REFERENCIAS
http://cursoslibres.academica.mx/206/practicas-de
datos-basicas
programacion/estructuras-de-
http://www.uaeh.edu.mx/docencia/P_Presentaciones/icbi/asignatura/Cap3PilasColas.p
df
http://www.grycap.upv.es/gmolto/docs/eda/EDA_Tema_8_gmolto.pdf
http://decsai.ugr.es/~jfv/ed1/tedi/cdrom/docs/pilas.html
http://www.madsgroup.org/docencia/alg/pilas_colas_listas.pdf
http://www.iuma.ulpgc.es/users/jmiranda/docencia/programacion/Tema5_ne.pdf
http://www.algoritmia.net/articles.php?id=14
http://www.infor.uva.es/~belar/Ampliacion/TDAS/Utilidades_TDA_PILA.pdf
http://es.slideshare.net/nieves1988/estructura-datos-pilas-y-colas
http://www.c.conclase.net/edd/?cap=002d#2_7
http://www.programacionfacil.com/estructura_de_datos/pilas
http://computacion.cs.cinvestav.mx/~acaceres/courses/estDatosCPP /node20.html
23