#include
#include
#include
/* Tipo di dati */
typedef struct lista *lista_pointer;
typedef struct lista {
int dati;
lista_pointer precedente;
lista_pointer successivo;
} lista;
/* Prototipi di funzione */
void crea_lista();
void selection_sort();
lista_pointer valore_minimo(lista_pointer nodo);
void scambiare(lista_pointer x, lista_pointer y);
/* Variabili globali */
lista_pointer testa, testa2;
void main()
{
lista_pointer temp;
printf("QUESTO PROGRAMMA IMPLEMENTA L'ALGORITMO 'SELECTION SORT'\n");
printf("SU UNA LISTA BIDIREZIONALE\n\n\n");
/* Chiamata alla function per la creazione della lista bidirezionale */
crea_lista();
printf("LISTA BIDIREZIONALE 'NON ORDINATA'\n\n");
temp = testa;
/* Ciclo while che visualizza la lista disordinata */
while(temp != NULL) {
printf("[%d]->", temp->dati);
temp = temp->successivo;
}
printf("NULL\n\n");
/* Chiamata alla function selection_sort */
selection_sort();
printf("LISTA BIDIREZIONALE 'ORDINATA'\n\n");
temp = testa;
/* Ciclo while che visualizza la lista ordinata */
while(temp != NULL) {
printf("[%d]->", temp->dati);
temp = temp->successivo;
}
printf("NULL\n\n");
}
//Function selection_sort
void selection_sort()
{
lista_pointer minimo, temp;
temp = testa;
while(temp != NULL) {
/* Calcola il minimo */
minimo = valore_minimo(temp);
/* mette il minimo nella sua posizione */
scambiare(temp, minimo);
/* Accorcia la porzione da ordinare */
temp = temp->successivo;
}
}
//Function valore_minimo
lista_pointer valore_minimo(lista_pointer nodo)
{
lista_pointer minimo, temp;
minimo = nodo;
temp = minimo->successivo;
while(temp != NULL) {
if(temp->dati <>dati)
minimo = temp;
temp = temp->successivo;
}
return minimo;
}
//Function scambiare
void scambiare(lista_pointer x, lista_pointer y)
{
int dati;
dati = x->dati;
x->dati = y->dati;
y->dati = dati;
}
//Function crea_lista
void crea_lista()
{
srand (unsigned int) time(NULL);
lista_pointer nodo;
int i;
testa = (lista_pointer) malloc(sizeof(lista));
nodo = (lista_pointer) malloc(sizeof(lista));
testa2 =NULL;
nodo->precedente=nodo;
nodo->dati =rand()%50;
nodo->successivo=testa2;
for (i=2; i<8;i++)
{
nodo->precedente=nodo;
nodo->dati =rand()%50;
nodo->successivo=testa2;
}
testa->dati = rand()%50;
testa->precedente = NULL;
testa->successivo = nodo;
testa2->dati = rand()%50;
testa2->precedente = nodo;
testa2->successivo = NULL;
}
Nessun commento:
Posta un commento