te alla fine si basa su un inserimento ordinato:
Codice:
#include <stdio.h>
#include <stdlib.h>
typedef struct EL{
int iVal;
struct EL *pNext;
}Node;
void ins_ord(Node **pTesta, int iVal){
Node *pPrec, *pApp, *pCorr;
pPrec = NULL;
pCorr = *pTesta;
pApp = (Node*)malloc(sizeof(Node));
pApp->iVal = iVal;
while (pCorr!=NULL && pCorr->iVal<iVal){
pPrec = pCorr;
pCorr = pCorr->pNext;
}
if (pPrec == NULL){
pApp->pNext = *pTesta;
*pTesta = pApp;
}
else{
pPrec->pNext = pApp;
pApp->pNext = pCorr;
}
}
Node* Ordina (Node **pTesta){
Node *pApp, *pTestaOrd;
pTestaOrd = NULL;
while (*pTesta!=NULL){
ins_ord (&pTestaOrd, (*pTesta)->iVal);
pApp = *pTesta;
*pTesta=(*pTesta)->pNext;
free(pApp);
}
return (pTestaOrd);
}
void visualizza (Node *pTesta){
if (pTesta ==NULL) return;
printf ("\nvalore:\t%d\n\n",pTesta->iVal);
visualizza (pTesta->pNext);
}
void inserisci (Node **pTesta, int iVal){
Node *pApp;
pApp = (Node*)malloc(sizeof(Node));
pApp->iVal = iVal;
pApp->pNext = *pTesta;
*pTesta = pApp;
}
int main (void){
Node *Testa, *pApp;
Testa = NULL;
inserisci (&Testa, 1);
inserisci (&Testa, 20);
inserisci (&Testa, 11);
inserisci (&Testa, 21);
inserisci (&Testa, 150);
visualizza (Testa);
Testa = Ordina (&Testa);
printf ("\n\nLista 2");
visualizza (Testa);
system ("PAUSE");
return (0);
}
si potrebbe migliorare spostando direttamente il nodo anziche passare il valore allocare lo spazio e distruggere il nodo precedente.
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso