Dev - C++ - lista LSE cargar una lista al reves

 
Vista:
Imágen de perfil de Gaston
Val: 114
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

lista LSE cargar una lista al reves

Publicado por Gaston (40 intervenciones) el 04/05/2021 16:57:11
Que tal gente,

Si me pueden dar una ayuda con listas simplemente enlazada. Ejercicio de una trabajo práctico.

Los puntos que tengo dudas para resolverlos son puntos a) y b)

Les dejo el enunciado y el código en lenguaje C.

/-----------------------------------------------------------------------------------------------------------------------------------------------------------

Enunciados:

a) Se tiene los datos de las edades de 10 personas, las cuales se deben cargar en memoria en alguna estructura donde se le de prioridad a los últimos datos ingresados. Es decir, debería estar al comienzo de la estructura el último
dato cargado y al final, el primero.

b) Se mostrarán los mismos en el siguiente orden: desde el último dato cargado hasta el primero.

c) Luego se mostrará la cantidad de personas que fueran mayores de edad.

d) Luego mostrarán todas las edades pares de las personas.

--------------------------------------------------------------------------------------------------------------------------------------------------------------/

//código en C

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>

//-----------------------------------------------------------------------------------------------------------

struct lista
{
int num;
struct lista *sig;
struct lista *nuevo;

};


//----------------------------------------------------------------------------------------------------------------------
//Procedimiento para armar la lista

void armar_lista(struct lista *&com)
{
//declaro un puntero a struct lista
struct lista *p;
struct lista *ant;
struct lista *sig;

int n;

printf("\n ingrese la edad de la persona: ");
scanf("%d",&n);
fflush(stdin);

//si n==0 com apunta a NULL. Ojo !! com debe estar apuntado a NULL
if(n==0)
com=NULL;
else
{
//creo un nodo para com: "pido un nodo para com por unica vez, esto se hace aparte fuera del ciclo para no perderlo"
com= new struct lista;
com->num=n; //com apunta num que es n: es un valor numerico que yo ingreso.
com->sig=NULL; //com apunta sig que es NULL !!!
ant=com; //ahora com apunta a ant

printf("\n ingrese otro edad de la persona: (0) para terminar ");
scanf("%d",&n);
fflush(stdin);

while(n!=0)
{

p=new struct lista; //creo el nodo apuntado por p: "pido un nodo para p"
p->num=n; //p apunta num que es n: es un valor numerico que yo ingreso.
p->sig=NULL; //p apunta sig que es NULL !!!!
ant->sig=p; //ant apunta a sig que es p (aca hago el enlace)
ant=p; //ahora p apunta a ant

printf("\n ingrese otro numero de la lista: (0) para terminar ");
scanf("%d",&n);
fflush(stdin);
}

}

}
//-------------------------------------------------------------------------
//Procedimiento para mostrar la lista

void mostrar_lista(struct lista *com)
{
struct lista *p;
p=com;

while(p!=NULL)
{
printf("\n %d",p->num);
p=p->sig;
}
}

//-------------------------------------------------------------------
//procedimiento para dar vuelta la lista

lista *revertir(lista *com)
{
lista *ant = com;
if (com->sig != 0)
{
ant = revertir(com->sig);
(com->sig)->sig = com;
com->sig = 0;
}
return ant;
}

void cargareves(struct lista *&com)
{
//recursivdidad
com = revertir(com);
}

//-----------------------------------------------------------------------
//mostrar todas las edades pares de las personas.

int cant_pares(struct lista *com)
{
int num = 0;

lista *actual = com;

while(actual != NULL)
{
if(actual->num % 2 == 0)
num++;
actual = actual->sig;
}

return num;
}
//-------------------------------------------------------------------------
//Luego se mostrará la cantidad de personas que fueran mayores de edad.

void mayor_edad(struct lista *com)
{
struct lista *f;
struct lista *m;
int aux;

f=com;

while(f!=NULL)
{
m=f->sig;

//recorro la lista
while(m!=NULL)
{
//validar el mayor
if(f->num > m->num)
{
//intercambio
aux=f->num;
f->num=m->num;
m->num=aux;

}
m=m->sig;

}
f=f->sig;
}

}

void leer(char cade[30], int &a)
{

printf("\n %s:",cade);
scanf("%d",&a);
fflush(stdin);

}

void pausar()
{
printf("\n");
system("PAUSE");

};

//----------------------------------------------------------------------------------------------------------------------------------

int main()
{

int num;
int a;
struct lista *comienzo;

//NO hace falta hacer esta sentencia. No es necesario pedir un nodo ya lo tenemos !!!
// comienzo = new struct lista; //pido un nodo

//llamo al procedimiento y le paso el parámetro
armar_lista(comienzo);

//llamo al procedimiento y le paso el parámetro
mostrar_lista(comienzo);

cargareves(comienzo);

printf("\n");
printf("__________________________________ \n");
printf("\n");
printf(" Edades de la personas \n");
printf("\n");

mostrar_lista(comienzo);
printf("\n");
printf("__________________________________ \n");
printf("\n");

cant_pares(comienzo);

printf("\n las edades pares %d : ",cant_pares(comienzo));
printf("\n");
printf("___________________________________ \n");
printf("\n");
printf("\n Personas que fueran mayores de edad ");
printf("\n");

mayor_edad(comienzo);

printf("\n");

mostrar_lista(comienzo);

printf("\n");
printf("_____________ Termino ______________ \n");
pausar();

return 0;

}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder