Hola, el siguiente codigo no funciona correctamente ya que solo funciona cuando hay un elemento si alguien me puede ayudar se lo agradeceria
#include <stdio.h>
#include <malloc.h>
//Definició d'estructura
typedef struct llista;
struct llista
{
int numero;
struct llista *seg, *ant;
};
struct llista *nou, *primer,*recorrer,*anterior;
//Funcions
void altes();
void consultes();
void llistats();
void baixes();
int i,op,num,bus,opcio;
int main()
{
op=1;
//Inicialitzem els apuntadors
nou=NULL;
primer=NULL;
recorrer=NULL;
do
{
system("cls");
printf ("\n\n\n\t\t ********************************\n");
printf (" \t\t *** LLISTA DINAMICA ***\n");
printf (" \t\t *** DOBLEMENT ENLLACADA ***\n");
printf (" \t\t ***--------------------------***\n");
printf (" \t\t *** 1.- ALTES ***\n");
printf (" \t\t *** 2.- BAIXES ***\n");
printf (" \t\t *** 3.- CONSULTES ***\n");
printf (" \t\t *** 4.- LLISTAT ***\n");
printf (" \t\t *** 5.- SORTIR ***\n");
printf ("\t\t ********************************\n");
printf ("\n\t\t SELECCIONE UNA OPCION DEL MENU: ");
scanf ("%d",&opcio);
switch(opcio)
{
case 1: altes();
break;
case 2: baixes();
break;
case 3: consultes();
break;
case 4: llistats();
break;
}
}while (opcio!=5);
}
void altes()
{
nou=primer;
printf ("\n ALTA DEL NUMERO: ");
scanf ("%d",&num);
nou=(llista *)malloc(sizeof(struct llista));
nou->numero=num;
nou->seg=NULL;
nou->ant=NULL;
recorrer=primer;
if (primer==NULL)
{
primer=nou;
recorrer=nou;
}
else
{
do
{
if (primer==recorrer)
{
if (nou->numero<primer->numero)
{
primer=nou;
primer->seg=recorrer;
recorrer->ant=nou;
}
else
{
primer->seg=recorrer;
recorrer->ant=primer;
}
}
else if (recorrer->seg!=NULL)
{
if (nou->numero<recorrer->numero)
{
anterior=recorrer->ant;
nou->ant=anterior;
nou->seg=recorrer;
anterior->seg=nou;
recorrer->ant=nou;
}
}
else
{
recorrer->seg=nou;
nou->ant=recorrer;
}
}while(recorrer!=NULL);
}
}
void consultes()
{
int bus;
recorrer=primer;
if (recorrer == NULL)
{
printf("La LLista esta buida!!!!\n");
system("pause");
}
else
{
printf ("\nNUMERO A BUSCAR: ");
scanf ("%d",&bus);
do
{
if (bus==recorrer->numero)
{
printf ("\nNUMERO %d ENCONTRAT.\n ",bus);
recorrer=recorrer->seg;
}
else recorrer=recorrer->seg;
}while (recorrer!=NULL);
system("pause");
}
}
void llistats()
{
recorrer=primer;
if (recorrer == NULL)
{
printf("La LLista esta buida!!!!\n");
system("pause");
}
else
{
while (recorrer!=NULL)
{
printf ("\n NUMERO--> %d\n",recorrer->numero);
recorrer=recorrer->seg;
}
system("pause");
}
}
void baixes()
{
recorrer=primer;
anterior=primer;
if (recorrer == NULL)
{
printf("La LLista esta buida!!!!\n");
system("pause");
}
else
{
printf ("\nNUMERO A DONAR DE BAIXA: ");
scanf ("%d",&bus);
do
{
if (bus==recorrer->numero)
{
if (recorrer==nou)
{
nou=nou->ant;
free(recorrer);
nou->seg=NULL;
}
else if (primer!=recorrer)
{
anterior->seg=recorrer->seg;
free(recorrer);
recorrer=anterior->seg;
recorrer->ant=anterior;
}
else
{
anterior->seg=recorrer->seg;
recorrer=anterior->seg;
free(primer);
primer=recorrer;
anterior=primer;
}
}
else
if (recorrer==primer)
recorrer=recorrer->seg;
else
{
recorrer=recorrer->seg;
anterior=anterior->seg;
}
}while (recorrer!=NULL);
}
}
AYUDA CON LISTA DOBLEMENTE ENLAZADA
Moderador: Moderadores