|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 862
|
Reverse di una lista??
Buongiorno a tutti,
mi potreste indicare perpiacere, il codice per effettuare un REVERSE di una lista di interi classica? Grazie mille per l'aiuto. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: May 2003
Messaggi: 1113
|
l'ho scritto di getto ma credo funzioni:
Codice:
typedef struct tipolista { int elem; struct tipolista *next; }lista; //inverta una lista concatenata lista *invertList(lista *top) { lista *in; lista *mid; lista *last; in=top; mid=top->next; last=mid->next; if (top!=NULL) { do { mid->next=in; top->next=last; in=mid; mid=last; if (last!=NULL) last=last->next; } while (last!=NULL); } return in; }
__________________
| Athlon XP Barton 3000+ | CoolerMaster HAC-V81 | ASUS A7N8X DELUXE v2.0 | 2*256 PC3200 + 1*512 PC3200 = 1GB DDR400| ATI Radeon 9250 | HD 80Gb Maxtor SATA | Ali Q-TEC 550W Dual Fan GOLD PFC |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
ehm...
non hai specificato in ke linguaggio... in java ad esempio basta utilizzare Collection.sort(lista) e poi scorrersi la lista al contrario oppure Collection.sort(lista, compareOperator) per ottenere la lista ordinata nell'ordine voluto.....
__________________
![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Codice:
#include <list> using namespace std; int main(int argc, char *argv[]) { list<int> lista; lista.push_front(1); lista.push_front(2); lista.push_front(3); lista.reverse(); for(list<int>::iterator it = list.begin(); it != list.end(); it++) cout << *it << endl; return 0; } ![]()
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 862
|
Grazie per le risposte che mi avete dato, :-)
una piccola cosa ancora..... ho a che farer con gli alberi. Crearli sono capace ma mi potete dire com'è il codice se dato un albero binario volgio calcolare l'altezza della'lbero(cioè la profondita) ed la distanza tra due nodi perpiacere? sono possibili tali operazioni? se si com'è il codice? non riesco a caire come si riesce a fare. Grazie mille. |
![]() |
![]() |
![]() |
#6 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
![]() |
![]() |
![]() |
#7 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
non è necessario che siano alberi binari di ricerca affinché si possano realizzare algoritmi per calcolarne l'altezza massima e la distanza tra due nodi: è sufficiente che siano alberi binari
![]() se poi sono di ricerca non cambia niente per quei due algoritmi; infine se sono AVL allora il primo algoritmo penso che diventi più semplice perché forse si può trovare la maniera di calcolarne l'altezza in tempo O(log(n)) anziché O(n), con n = numero di nodi. |
![]() |
![]() |
![]() |
#8 | ||
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Quote:
![]() Ultima modifica di mjordan : 15-02-2006 alle 02:16. |
||
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 862
|
Grazie per le risposte,
cmq si è un albero binario di ricerca indicato come: struct cella{ |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 862
|
Grazie per le risposte,
è un albero binario di ricerca indicato con: struct cella{ int valore; struct cella *dx; struct cella *sx; }; mi potreste scrivere il codice perpiacere? xche non so proprio come fare queste due funzioni di calcolo profondità e distanza tra due nodi..... perpiacere...... |
![]() |
![]() |
![]() |
#11 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
EDIT: un attimo che provo a scriverlo, così è più chiaro... EDIT2: eccolo qua: Codice:
typedef struct _NODE { int Key; int Bal; struct _NODE *Left, *Right; } NODE, *TREE; int Height(TREE Tree) { if (!Tree) { return 0; } if (Tree->Bal < 0) { return Height(Tree->Right) + 1; } return Height(Tree->Left) + 1; } ![]() Ultima modifica di 71104 : 15-02-2006 alle 14:59. |
|
![]() |
![]() |
![]() |
#12 |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
ed eccolo qua anche in forma iterativa:
Codice:
typedef struct _NODE { int Key; int Bal; struct _NODE *Left, *Right; } NODE, *TREE; int Height(TREE Tree) { int Res = 0; for (TREE Node = Tree; Node; ) { Res++; if (Node->Bal < 0) { Node = Node->Right; } else { Node = Node->Left; } } return Res; } |
![]() |
![]() |
![]() |
#13 |
Junior Member
Iscritto dal: Feb 2006
Messaggi: 11
|
Salve ragazzi cio sto programmino che mi visualizza i numeri primipero no riesco a far visualizzare i suoi divisori esempio cio 3 e divisible solo con 3 oppure cio 4 e divisibile con 2 e 4
public class NumeriPrimi{ static int primo; static int i; public static String numeroPrimo(int primo){ if(primo==2){ return"è un numero primo"; }else if (primo==3){ return "è un numero primo"; }else if (primo==5){ return "è un numero primo"; } if ((primo%2)==0) { return"non è numero primo"; }else if ((primo%3)==0){ return"non è un numero primo"; }else if ((primo%5)==0){ return"non è un numero primo"; } return"é un numero primo"; } public static void main(String args[]) { //NumeriPrimi primo = new NumeriPrimi(); String risposta=NumeriPrimi.numeroPrimo(3) System.out.println(risposta); } } ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#14 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
![]() |
![]() |
![]() |
#15 | |
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Nov 2004
Messaggi: 862
|
Salve,
il codice scritto da "leadergl" ho provto a farlo girare ma se ristampo la mia lista (originale: 4->5->8->9......) mi viene stampato solamente : 4->9, cioè il primo elemento e l'ultimo elemento. xche? avrei bisogno che ad esempio data la lista: 4->5->8->9 e quindi stampa 4,5,8,9, con il reverse mi dovrebbe stampare l'inverso quindi 9,8,5,4........ come si puo fare?? infine, per la profondita ho risolto grazie, ma sempre per alberi binari è possibile Calcolare la distanza tra due nodi? cioè riempiamo l'albero con i valori, poi ne scegliamo due a nostro piacimento tra quelli inseriti e calcoliamo la distanza.... mi potreste dire tale funzione? Grazie cmq per le risposte che mi avete dato, siete stati gentilissimi. |
![]() |
![]() |
![]() |
#17 | ||
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
Quote:
|
||
![]() |
![]() |
![]() |
#18 |
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Prova un po'...
Codice:
lista *inverti(lista *l) { lista *newl = NULL; if (! l || ! l->next) return l; if (! l->next->next) newl = l->next; else newl = inverti(l->next); l->next->next = l; l->next = NULL; return newl; } |
![]() |
![]() |
![]() |
#19 | |
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
secondo i miei ricordi dovrebbe essere effettivamente log(n) in qunato il numero di nodi presenti nell'albero cresce esponenzialmente con l'aumentare dell'altezza...
quindi scorrendo solo l'altezza di un ramo si può eseguire l'algoritmo in un tempo log(n) (con n ovviamente inteso il numero totale di nodi)
__________________
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 23:47.