Torna indietro   Hardware Upgrade Forum > Software > Programmazione

iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile
C'è tanta sostanza nel nuovo smartphone della Mela dedicato ai creator digitali. Nuovo telaio in alluminio, sistema di raffreddamento vapor chamber e tre fotocamere da 48 megapixel: non è un semplice smartphone, ma uno studio di produzione digitale on-the-go
Intel Panther Lake: i processori per i notebook del 2026
Intel Panther Lake: i processori per i notebook del 2026
Panther Lake è il nome in codice della prossima generazione di processori Intel Core Ultra, che vedremo al debutto da inizio 2026 nei notebook e nei sistemi desktop più compatti. Nuovi core, nuove GPU e soprattutto una struttura a tile che vede per la prima volta l'utilizzo della tecnologia produttiva Intel 18A: tanta potenza in più, ma senza perdere in efficienza
Intel Xeon 6+: è tempo di Clearwater Forest
Intel Xeon 6+: è tempo di Clearwater Forest
Intel ha annunciato la prossima generazione di processori Xeon dotati di E-Core, quelli per la massima efficienza energetica e densità di elaborazione. Grazie al processo produttivo Intel 18A, i core passano a un massimo di 288 per ogni socket, con aumento della potenza di calcolo e dell'efficienza complessiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-02-2006, 07:58   #1
giack83
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.
giack83 è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 08:16   #2
leadergl
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
leadergl è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 12:46   #3
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
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.....
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 13:32   #4
AnonimoVeneziano
Senior Member
 
L'Avatar di AnonimoVeneziano
 
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
AnonimoVeneziano è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 15:19   #5
giack83
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.
giack83 è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 18:29   #6
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da giack83
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.
La parola "alberi" è un po generica. Suppongo tu stia parlando di classici "alberi binari di ricerca", la cui altezza corrisponde alla profondità massima raggiunta da un nodo (il nodo che ha distanza massima dalla radice definisce l'altezza dell'albero, per intenderci). Per trovarla basta che implementi una funzione (ricorsiva o iterativa) che prosegui dalla radice fino all'ultimo nodo disponibile nei due sottoalberi disponibili. Già implementando un qualsiasi algoritmo di attraversamento di un albero puoi arrivare allo scopo. Lo stesso dicasi per la distanza.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 22:40   #7
71104
Bannato
 
L'Avatar di 71104
 
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.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2006, 01:52   #8
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da 71104
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;
Mi sono espresso male, non intendevo dire che si possono fare solo con gli alberi di ricerca. Solo una supposizione, quindi. Supposizione motivata dalla seguente riflessione. Gli alberi binari, a parte il grado due dell'albero, consente l'inserimento dei nodi in qualsiasi posizione. In altre parole, l'ordine dei nodi in un albero binario non è importante. In genere, in informatica, gli alberi binari semplici vengono utilizzati esclusivamente come rappresentazione per gli heap a loro volta usati come code di priorità (heap min/max). Utilizzare un normale albero binario come struttura dati per effettuare le classiche operazioni non ha senso, poichè inserimento, cancellazione e ricerca richiedono un tempo pari a O(n), non diverso che usare una semplice lista concatenata. Da cui la supposizione dell'albero binario di ricerca (semplice o sue varianti). Che poi, soffermandomi un attimo, "distanza fra due nodi" che significa in un albero... La distanza si calcola sempre con un nodo ed indica il numero di nodi che intercorrono fra il nodo in questione e la radice dell'albero. Io questo intendevo prima. Cioè il concetto di distanza tradizionale.

Quote:
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.
In che senso scusa... Calcolare l'altezza di un albero è sempre O(n), indipendentemente dal tipo di albero

Ultima modifica di mjordan : 15-02-2006 alle 02:16.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2006, 13:55   #9
giack83
Senior Member
 
Iscritto dal: Nov 2004
Messaggi: 862
Grazie per le risposte,

cmq si è un albero binario di ricerca indicato come:

struct cella{
giack83 è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2006, 13:57   #10
giack83
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......
giack83 è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2006, 14:55   #11
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da mjordan
In che senso scusa... Calcolare l'altezza di un albero è sempre O(n), indipendentemente dal tipo di albero
era solo un'idea: se l'albero è AVL allora vuol dire che in ogni nodo l'altezza del sottoalbero sinistro differisce da quella del destro al più di un fattore associato al nodo stesso (fattore di bilanciamento) che può assumere al massimo valore assoluto 1; di conseguenza penso che (idea non verificata) per calcolare l'altezza massima di un albero AVL è sufficiente effettuare un qualsiasi percorso radice-foglia (tempo O(log(n))) contando i nodi e tenendo anche conto di eventuali differenze di altezza indicate nei fattori di bilanciamento; se per esempio sono arrivato al kappesimo nodo, quindi ho contato un'altezza k, e vedo che il suo fattore di bilanciamento è 1, allora vorrà dire che il sottoalbero sinistro è più alto del destro, percui per contare un'altezza corretta dovrò scendere a sinistra.

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;
}
sarebbe interessante provarlo e vedere se funziona veramente... il tempo è sicuramente O(log(n))

Ultima modifica di 71104 : 15-02-2006 alle 14:59.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2006, 15:04   #12
71104
Bannato
 
L'Avatar di 71104
 
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;
}
decisamente preferibile.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 15-02-2006, 16:48   #13
alexanderf
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);
}
}
alexanderf è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2006, 06:46   #14
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da 71104
sarebbe interessante provarlo e vedere se funziona veramente... il tempo è sicuramente O(log(n))
Come fai a dire che è O(log(n))?
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2006, 06:48   #15
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da alexanderf
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);
}
}
Qui' sei off-topic. Apri un thread e usa il tag code per postare il codice.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2006, 12:08   #16
giack83
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.
giack83 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2006, 12:32   #17
mjordan
Bannato
 
L'Avatar di mjordan
 
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR ‫Casco: XR1000 Diabolic 3
Messaggi: 27578
Quote:
Originariamente inviato da giack83
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??
Perchè non posti il codice completo anche del codice che usi per creare la lista (utilizzando il tag quote)?

Quote:
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.
Ma che utilità dovrebbe avere? La distanza si calcola dalla radice non da due nodi. Se un nodo si trova nel sottoalbero sinistro, che distanza dovrebbe avere da un nodo che sta nel sottoalbero destro? Non ha senso.
mjordan è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2006, 13:01   #18
Qu@ker
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;
}
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2006, 14:49   #19
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da mjordan
Come fai a dire che è O(log(n))?
per te invece la stima quant'è?
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 16-02-2006, 16:50   #20
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
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)
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


iPhone 17 Pro: più di uno smartphone. È uno studio di produzione in formato tascabile iPhone 17 Pro: più di uno smartphone. &Eg...
Intel Panther Lake: i processori per i notebook del 2026 Intel Panther Lake: i processori per i notebook ...
Intel Xeon 6+: è tempo di Clearwater Forest Intel Xeon 6+: è tempo di Clearwater Fore...
4K a 160Hz o Full HD a 320Hz? Titan Army P2712V, a un prezzo molto basso 4K a 160Hz o Full HD a 320Hz? Titan Army P2712V,...
Recensione Google Pixel Watch 4: basta sollevarlo e si ha Gemini sempre al polso Recensione Google Pixel Watch 4: basta sollevarl...
Elgato Embrace: una sedia ergonomica pro...
Brad Pitt torna in pista: F1 – Il Film a...
Hitachi Vantara annuncia la sua AI Facto...
Brembo passa all'alluminio riciclato al ...
HONOR pronta a sfidare gli iPad Pro con ...
OpenAI esce allo scoperto: confermati i ...
In arrivo altri due prodotti da Apple en...
Il tool per aggiornare da Windows 10 a W...
Rishi Sunak entra in Microsoft e Anthrop...
Porsche in poche ore chiude la formazion...
iPhone 17 disponibili su Amazon al prezz...
La Ferrari Elettrica non è la cau...
Ricarica da record: Zeekr supera i 1.300...
Un 'capezzolo' con feedback aptico al po...
Porsche Taycan Rush a Misano: prima al v...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 23:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v