Liste

davide84

Utente Attivo
45
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...
 

airex

Utente Èlite
2,394
14
CPU
Intel Core2Duo E6750
Scheda Madre
Gigabyte GA-G33M-DS2R
HDD
1x80GB Sata2 + 1x320GB Sata2
RAM
2 x 2048MB DDR2 800MHz
GPU
NVidia 8800GT 1GB
Audio
Intel HDA
Monitor
LCD Samsung 19"
PSU
LC Power Green Power V2.0 - 550 Watt
OS
Linux Slackware64
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
 

Arcovoltaico77

Utente Èlite
1,558
10
CPU
Core 2 Duo E2200 + Thermaltake silent tower 112cu (1,3 Kg)
Scheda Madre
Asus P5B
HDD
160Gb Maxtor SATA2 + WD Caviar 250GB SATA2
RAM
2 * 1Gb Corsair CL4 (Pc4300, Value Select)
GPU
Point of View 6600GT 256Mb (500-1000 @ 571-1183)
Audio
integrato 5.1
Monitor
LCD 17 samsung
PSU
Enermax Pro82+ 525 Watt
Case
ColorsIT
OS
Windows XP & Ubuntu
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:
 

Trigun86

Utente Attivo
24
0
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
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili