View Single Post
Old 15-02-2005, 15:44   #3
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
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
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso