PDA

Visualizza la versione completa : [C] Algoritmo di fusione su lista collegata di puntatori


tonyprats
18-09-2011, 18:37
Il testo dell'esercizio Ŕ:
Scrivere la funzione C che realizza l'algoritmo di fusione su una lista collegata con puntatori. La funzione
riceve in ingresso due doppi puntatori ptrptr1 e ptrptr2,dove ptrptr1 punta alla prima metÓ della
lista e ptrptr2 alla seconda metÓ della lista. Le due semi-liste puntate da ptrptr1 e ptrptr2 sono
ordinate. La lista risultato ordinata deve essere puntata da ptrptr1 e deve essere generata spostando gli
elementi delle due semi-liste senza utilizzare nuove allocazioni/deallocazioni della memoria (NOTA: la lista
puntata da ptrptr2 Ŕ una sottolista di quella puntata da ptrptr1).

Potreste gentilmente verificare la correttezza di questo programma ed eventualmente indicarmi dove ho sbagliato..Grazie!

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

struct list {
float value;
struct list *next_ptr;
};

int LunghezzaLista( struct list *ptr);

void main(void)

{
int value;
struct list *ptr;


void merge(struct list *ptrptr1, struct list *ptrptr2)
{
int length;

length=LunghezzaLista(ptr);

while (ptr!=(ptr+length/2)->next_ptr)
{
ptrptr1->value=ptr->value;
ptr=ptr->next_ptr;
}
while (ptr!=NULL)
{
ptrptr2->value=ptr->next_ptr->value;
ptr=ptr->next_ptr;
}
while(ptrptr1!=ptrptr1+length/2 && ptrptr2!=NULL)
{
if(ptrptr1->value < ptrptr2->value)
ptrptr1=(ptrptr1->next_ptr);
else
{
ptrptr1->next_ptr=ptrptr2;
ptrptr2=ptrptr2->next_ptr;
}
}
return;
}
return;
}


int LunghezzaLista( struct list *ptr)
{
int length=0;
while (ptr != NULL)
{
length++;
ptr->next_ptr;
}
printf("la lista contiene:",length);
return length;
}

linoma
18-09-2011, 18:42
Intanto cn merge nn dai modo di pensare alla fusione/fissione. :)

tonyprats
18-09-2011, 18:45
scusa ma non ho capito cosa vorresti dire.. potresti spiegarti meglio grazie!

linoma
18-09-2011, 19:04
Io avrei usato unione e non fusione.

Loading