[C] Ordinamento lista

di il
3 risposte

[C] Ordinamento lista

Ciao a tutti!
Come faccio ad adattare l'algoritmo SelectionSort (array) ad una lista? é possibile?
So che per array uso due contatori uno che mi segna il valore massimo e l'altro la posizione e poi man mano facendo il confronto scambio i valori massimi nella posizione massima. Con le liste non so proprio come implementarlo, come faccio a tenere traccia della posizione massima con i puntatori? Ho provato ad usare una funzione che mi conta il numero dei nodi della lista e poi ragionare come per i vettori ma non ci salto fuori... penso che usando direttamente i puntatori la cosa si semplifichi ma non riesco proprio ad impostarlo. Mi servirebbe un aiutino da cui partire..
Grazie

3 Risposte

  • Re: [C] Ordinamento lista

    Un consiglio ... scrivi del codice che fa l'ordinamento con un array e presentalo. Poi si ragiona insieme su come adattarlo alla lista.
  • Re: [C] Ordinamento lista

    void selectionSort(int *a, int r) { 
      int i, j, tmp;
      for(i=0; i<r-1; i++) {
        int min = i;
        for(j=i+1; j<r; j++)
          if(a[j]<a[min]) min = j;
        tmp=a[i];
        a[i]=a[min];
        a[min]=tmp;
      }
    }
  • Re: [C] Ordinamento lista

    typedef struct nodo{
        char prodotto[20];
        int prezzo;
        int quantita;
        struct nodo *next;
    } tiponodo;
    
    int countlist(tiponodo *t) {
    	if (!t) return 0;
    	return 1 + countlist(t->next);
    }
    
    
    void selection_sort(tiponodo *head){
        tiponodo *tmp, *tmp1, *tmp2;
        int i, j;
     
        for(i=0; i < countlist-1; i=++){
        tmp1=head;
        int min=i;
            for(j=i+1; j < countlist; j=j++){
            tmp2=head;
                if(tmp1->prezzo >tmp2->prezzo){
                    strcpy(tmp->prodotto, tmp1->prodotto);
                    strcpy(tmp1->prodotto, tmp2->prodotto);
                    strcpy(tmp2->prodotto, tmp->prodotto);
                    tmp->prezzo=tmp1->prezzo;
                    tmp1->prezzo=tmp2->prezzo;
                    tmp2->prezzo=tmp->prezzo;
                    tmp->quantita=tmp1->quantita;
                    tmp1->quantita=tmp2->quantita;
                    tmp2->quantita=tmp->quantita;
                }
            }
        }
    }

    Nel frattempo ho provato a riadattarlo.. mi è uscito fuori questo ma non ci siamo..
Devi accedere o registrarti per scrivere nel forum
3 risposte