Liste

Pubblicità

davide84

Utente Attivo
Messaggi
45
Reazioni
0
Ciao a tutti, avrei bisogno di chiederVi due aiutin riguardo le liste.
1)Ho bisogno di scorrere una lista al contrario, ovvero dall'ultimo elemento al primo...come posso fare

2)Devo invertire gli elementi di una lista...
esempio:
7 5 6 3 1 9 8 deve diventare 8 9 1 3 6 5 7
.....come posso fare

So che sono due banalità....ma essendo alle prime armi del C faccio un pò fatica a trovare la soluzione...
Grazie a tutti...
 
crea un array della lunghezza della lista, copia negli elementi dell'array i valori presi dalla lista posizionandoli "al contrario"

ecco un po' di pseudocodice (NON è C):

Codice:
 punt = testa_lista;
 tot = 0;
 while (punt != null) {
    tot ++;
    punt = punt->next;
 }
 array = (int*)malloc(tot * sizeof(int))
 punt = testa_lista;
 cur = 0;
 while (punt != null) {
     array[tot-1-cur] = punt->valore;
     punt = punt->next;
     cur ++;
 }
il codice NON è ottimizzato, volendo si riesc a fare tutto in una passata al posto che in due
 
Ciao

1) La lista puoi scorrerla al contrario se, nella struttura, oltre al puntatore all' elemento successivo, hai anche quello all' elemento precedente.Una struttura tipo
typedef struct
{
void* prec;
int dato;
void* succ;
}
ElemLista;

2) per invertirla, se la struttura è quella sopra, te ne crei una di appoggio, inizialmente vuota; leggi la prima lista all' indietro(dall' ultimo al primo); a mano a mano che leggi, popoli quella di appoggio, che alla fine sarà uguale a quella iniziale, solo rigirata... a questo punto puoi eliminare la lista originale,se vuoi, e tenere quella rigirata. Qualsiasi testo scolastico di informatica comunque tratta l' argomento con tanto di disegni esemplificativi.

Buono studio! :ok:
 
Codice:
void crea(nodo *p,int valore){    
     nodo nuovo;
     nodo precedente;
     nodo corrente;
    
     nuovo=malloc(sizeof(lista));
     if(nuovo!=NULL){
                     nuovo->numero=valore;
                     nuovo->next=NULL;
                     
                     precedente=NULL;
                     corrente=*p;
     
     while(precedente!=NULL && valore > corrente->numero){
                          precedente = corrente;
                          corrente = corrente->next;
                          
                          }
                          
     if(precedente == NULL){
                   nuovo->next= *p;
                   *p=nuovo;
                   }
     else{
          precedente->next=nuovo;
          nuovo->next=corrente;
          }
          
          }

Codice:
printf("Inserisci un numero: "); // richiamo della funzione al'interno del main                                           scanf("%d",&num);
                                           crea(&start,num);

Codice:
void crea(nodo *,int); //prototipo di funzione
 
Pubblicità
Pubblicità

Discussioni Simili

Indietro
Top