|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Dec 2004
Città: Venezia
Messaggi: 192
|
[C] Problema con le liste
ciao, ho un piccolo problemino con le liste.
ho creato questo tipo di lista semplice di caratteri Codice:
typedef struct elemento { char info; struct elemento *next; }Elemento; typedef Elemento *Lista; qualche dritta? ![]()
__________________
![]() |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Sep 2006
Città: ~
Messaggi: 146
|
Non la ho compilata e non sono perfettamente sicuro sia ANSI C, quindi non mi prendo nessuna responsabilità se ti fonderà la CPU ed espellerà i cd dai tuoi drive ottici a mo' di frisbee
![]() Comunque dovrebbe controllare se la lista è ordinata in modo crescente. Codice:
int isOrdered(Elemento* lista) {if (lista->next == NULL)}return 1;if (lista->info <= lista->next->info)return isOrdered(lista->next);return 0; ![]()
__________________
Computers are like conditioned air: they work fine 'till you open windows. ![]() |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Dec 2004
Città: Venezia
Messaggi: 192
|
ma la lista è di char...
![]()
__________________
![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
+1 = lista ordinata in modo crescente -1 = lista ordinata in modo decrescente 0 = lista non ordinata o comunque con ordine non determinato (pensiamo ad una lista in cui ci sono, per ipotesi, tutte le informazioni uguali). Il procedimento da seguire per ottenere questo è il seguente. Alla funzione viene passato il puntatore alla 'root' della lista. Dentro la funzione è necessario avere 2 variabili, chiamiamole 'dir' e 'c'. Si fa la scansione dell'intera lista, per ogni elemento si verifica se esiste un elemento successivo. Se esiste un elemento successivo, si fa una comparazione delle due informazioni adiacenti. Se info1 > info2 si mette c=-1, se info1 < info2 si mette c=+1, altrimenti si mette c=0. A questo punto è necessario verificare se la comparazione "concorda" o meno con 'dir'. Se dir==0 e c != 0 si fa dir=c. Se invece sia 'dir' che 'c' sono diversi da 0 e non "concordano" (sono diversi), si fa immediatamente un return di 0. Si continua così con gli elementi successivi. Alla fine si fa ritornare 'dir'. Il risultato è appunto quello di ottenere un +1/-1/0 che indica l'ordinamento come spiegato all'inizio. Spero di aver spiegato in modo chiaro.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Dec 2004
Città: Venezia
Messaggi: 192
|
Quote:
__________________
![]() |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Dec 2004
Città: Venezia
Messaggi: 192
|
![]() grazie ![]() ciao!!!
__________________
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:30.