#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
//Definicion de la Estructura
struct nodoPila
{
int dato;
nodoPila *sig;};
//Menu principal
int menu()
{
int opc;
clrscr();
cout<<" MENU PRINCIPAL";
cout<<"\n1. Inicializar Pila";
cout<<"\n2. Apilar (push)";
cout<<"\n3. Recorrer Pila";
cout<<"\n4. Desapilar (pop)";
cout<<"\n5. Maximo";
cout<<"\n6. Promedio";
cout<<"\n7. Primer elemento";
cout<<"\n8. Ordenar";
cout<<"\n9. Salir";
cout<<"\nOpcion: ";
cin>>opc;
return opc;
}
//Definicion de funciones
void inicializar(struct nodoPila **);
void desapilar(struct nodoPila **);
void recorrer(struct nodoPila **);
void apilar(struct nodoPila **, int x);
void maximo(struct nodoPila **);
void promedio(struct nodoPila **);
void elemento(struct nodoPila **);
void ordenar(struct nodopila **);
//Funcion recorrer
void recorrer(struct nodoPila **tope)
{clrscr();
struct nodoPila *aux;
if(*tope==NULL)
cout<<"\nPila Vacia. ";
else
{
aux=*tope;
while(aux!=NULL)
{
cout<<"Elemento: "<<aux->dato<<"\n";
aux=aux->sig;
}
}
getch();
}
//Funcion inicializar
void inicializar(struct nodoPila **tope)
{ clrscr();
*tope=NULL;
cout<<"\nPila Inicializada.";
getch();
}
//Funcion apilar
void apilar(struct nodoPila **tope, int dat)
{ clrscr();
struct nodoPila *aux;
aux=new nodoPila;
if(aux==NULL)
{
cout<<"\nMemoria Insuficiente. ";
getch();
}
aux->dato=dat;
aux->sig=*tope;
*tope=aux;
}
//Funcion desapilar
void desapilar(struct nodoPila **tope)
{ clrscr();
struct nodoPila *aux;
if(*tope==NULL)
cout<<"Pila Vacia";
else
{
aux=*tope;
cout<<"Elemento eliminado: "<<(*tope)->dato;
*tope=(*tope)->sig;
delete aux;
}
getch();
}
//Funcion maximo
void maximo(struct nodoPila **tope)
{ clrscr();
struct nodoPila *aux;
int max=0;
if(*tope==NULL)
cout<<"Pila Vacia";
else
{
aux=*tope;
while(aux!=NULL)
{
if (aux->dato>max)
max=aux->dato;
aux=aux->sig;
}
}
cout<<"El maximo es: "<<max<<"\n";
getch();
}
//Funcion Promedio
void promedio(struct nodoPila **tope)
{ clrscr();
int suma=0,promedio,a=0;
struct nodoPila *aux;
if(*tope==NULL)
cout<<"\nPila Vacia. ";
else
{
aux=*tope;
while(aux!=NULL)
{a=a+1;
suma=suma+aux->dato;
aux=aux->sig;
}
cout<<"La suma es: "<<suma<<"\n";
}
promedio=suma/a;
cout<<"La promedio es: "<<promedio<<"\n";
getch();
}
/*Funcion elemento
Nombre: Obtener el primer elementos de la pila
Descripción: imprimer el primer elemento de la pila
Pre: p {}
p= {a1, a2, a3,...an}
Post: Escribir: "Pila vacia"
Escribir: El primer elemento es a1
*/
void elemento(struct nodoPila **tope)
{ clrscr();
struct nodoPila *aux;
if(*tope==NULL)
cout<<"Pila Vacia";
else
{
aux=*tope;
while(aux->sig!=NULL)
{
aux=aux->sig;
}
cout<<"El primer elemento es: "<<aux->dato<<"\n";
}
getch();
}
/*Funcion ordenar
Nombre: Ordenar los elementos de la pila
Descripción: imprimir los elementos en forma ascendente y descendente
Pre: p {}
p= {a1, a2, a3,...an}
Post: Escribir: "Pila vacia"
Escribir: Ascendente: a1, a2, a3,... an
Escribir: Descendente: an..., a3, a2, a1
*/void ordenar(struct nodoPila **tope)
{clrscr();
struct nodoPila *aux;
int i=1, j,vec[50],aux2, cont=0;
if(*tope==NULL)
cout<<"\n Pila Vacia ";
else
{aux=*tope;
while(aux!=NULL)
{vec[i]= aux->dato;
aux=aux->sig;
cont=cont+1;
i++;
}
for(i=1; i<=cont-1; i++)
{for(j=1; j<=cont-1; j++)
{if(vec[j] > vec[j+1])
{aux2=vec[j];
vec[j]=vec[j+1];
vec[j+1]=aux2;
}
}
}
cout << "Ascendente: ";
for(i=1; i<=cont; i++)
{cout<<vec[i]<<"\n";
}
cout << "\nDescendente: ";
for(i=cont; i>=1; i--)
{
cout<<vec[i]<<"\n";
}
}
getch();
}
//Cuerpo principal
int main()
{
struct nodoPila *tope;
int dat,opc;
do
{
opc=menu();
switch(opc)
{
case 1:{inicializar(&tope);break;}
case 2:{
cout<<"\nEntre el dato: ";
cin>>dat;
apilar(&tope,dat);
break;
}
case 3:{recorrer(&tope);break;}
case 4:{desapilar(&tope);break;}
case 5:{maximo(&tope);break;}
case 6:{promedio(&tope);break;}
case 7:{elemento(&tope);break;}
case 8:{ordenar(&tope);break;}
}
}while(opc!=9);
return 0;
}
No hay comentarios:
Los comentarios nuevos no están permitidos.