Scrivere una funzione
che prese in input due liste di interi, crei una nuova lista ordinata a partire dalle due
liste in input.
#include <stdio.h>
#include <stdlib.h>
struct nodo{
int elem;
struct nodo *next;
};
typedef struct nodo L_ELEM;
typedef struct nodo *L_PTR;
void stampa_lista(L_PTR p);
L_PTR inserisci_in_coda(L_PTR L, int val);
void fusione(L_PTR *p, L_PTR *q);
L_PTR inverti_lista(L_PTR L);
int main()
{
L_PTR startPtr = NULL;
L_PTR startPtr2 = NULL;
int k=0;
int w=0;
int val=0;
int z=0;
int y=0;
scanf("%d",&k);
z=k;
while(k>0)
{
scanf("%d",&val);
startPtr = inserisci_in_coda(startPtr, val);
k--;
}
scanf("%d",&w);
y=w;
while (w>0)
{
scanf("%d",&val);
startPtr2 = inserisci_in_coda(startPtr2, val);
w--;
}
//startPtr =
fusione(&startPtr,&startPtr2);
//startPtr = inverti_lista(startPtr);
stampa_lista(startPtr);
system("pause");
return 0;
}
void stampa_lista(L_PTR p) {
while (p != NULL) {
printf("%d ", p->elem);
p = p->next;
}
return;
}
L_PTR inverti_lista(L_PTR L)
{
L_PTR temp;
if ((L==NULL) ||(L->next == NULL))
return L;
else
{
temp=inverti_lista(L->next);
L->next->next=L;
L->next=NULL;
return temp;
}
}
void fusione(L_PTR *p, L_PTR *q) {
//L_PTR r, primo = NULL;
while (*p != NULL && *q != NULL) {
//r = malloc(sizeof(L_ELEM));
if ((*p)->elem < (*q)->elem) {
(*p)->elem = (*p)->elem;
*p = (*p)->next;
} else {
(*p)->elem = (*q)->elem;
*q = (*q)->next;
}
(*p)->next = *p;
//*p = *p;
}
while (*p != NULL) {
//r = malloc(sizeof(L_ELEM));
(*p)->elem = (*p)->elem;
(*p)->next = *p;
//(*p) = *p;
*p = (*p)->next;
}
while (*q != NULL) {
//r = malloc(sizeof(L_ELEM));
(*p)->elem = (*q)->elem;
(*p)->next = *p;
//*p = *p;
*q = (*q)->next;
}
return ;
}
L_PTR inserisci_in_coda(L_PTR L, int val)
{
L_PTR curr,temp;
curr=L;
temp = malloc(sizeof(L_ELEM));
if(temp != NULL)
{
temp->elem = val;
if (L==NULL)
{
temp->next = NULL;
curr=temp;
}
else
{
while(L->next != NULL )
L=L->next;
temp->next=L->next;
L->next= temp;
}
return curr;
}
else return NULL;
}
Ricerca appunti sul web
Ricerca personalizzata
sabato 28 febbraio 2009
Sorgenti c : Fusione liste ordinate
Pubblicato da Baiox alle 00:49
Etichette: Informatica, Programmazione C
Iscriviti a:
Commenti sul post (Atom)
0 commenti:
Posta un commento