Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-07-2007, 12:12   #1
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
Alberi in C

Codice:
struct inttree {
	int dato;
	struct inttree *left, *right;
};

typedef struct inttree inttree;


inttree *root = NULL;


// aggiungo un dato alla radice 1° livello
root = malloc(sizeof(inttree));
root->dato = 5;

// aggiungo un dato al ramo sx 2° livello
root->left = malloc(sizeof(inttree));
root->left->dato = 7;

// aggiungo un dato al ramo dx 2° livello
root->right = malloc(sizeof(inttree));
root->right->dato = 9;

// aggiungo un dato al sottoramo sx/sx e dx/sx e dx/dx del 3° livello
root->left->left = root->right->left = root->right->right = NULL;

// aggiungo un dato al sottoramo sx/dx del 3° livello
root->left->right = malloc(sizeof(inttree));
root->left->right->dato = 11;

// aggiungo un dato al sottoramo sx/dx/sx e sx/dx/dx del 4° livello
root->left->right->left = root->left->right->right = NULL;
l'esempio proposto serve solo a far comprendere come si allocano ed aggiungono dati ad un albero creando quindi nodi e conseguenti ramificazioni e sino a qui, tutto bene.
Siccome non credo che il sistema proposto sia efficacissimo, mi chiedevo come ci si posiziona su un determinato nodo di un albero e quindi, se il nodo non dovesse esistere, lo si crea.

Vi prego, solo per chiarezza, di evitare di postare codice chilometrico che genererebbe solo ulteriore confusione; mi interessa capire il meccanismo e non avere il codice migliore per posizionarsi all'iesimo nodo, non prendetela come una pretesa ma una preghiera

Ultima modifica di misterx : 23-07-2007 alle 14:02.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 23-07-2007, 14:11   #2
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Questa funzione serve per caricare il dato a seconda se si sceglie "s - S" per inserire il dato (nel mio caso è un char) a sinistra o "d - D" a destra del nodo padre;
Alla funzione gli devi passare l'indirizzo della nodo-radice dell'albero e il dato.

Questo è il codice

Codice:
void genera (s_albero **rad, char c) {
  
  char sc;
  s_albero *new;
  s_albero *app;
  s_albero *prec;
  int libero;
  
  libero = 0;
  
  new = (s_albero *) malloc (sizeof(s_albero));
  new->sx = NULL;
  new->dx = NULL;
  new->lettera = c;
  
  if ((*rad)==NULL) {
    
    *rad = new;
    
  } else {
    
    app = *rad;
    while (libero==0) {
      do {
		printf("sx o dx di %c ? : ",app->lettera);
		scanf("%c",&sc);
		scanf("%c",&invio);
      } while ((sc!='s') && (sc!='S') && (sc!='d') && (sc!='D'));
      
      prec = app;
      if ((sc=='s') || (sc=='S')) {
		app=app->sx;
      } else {
		app=app->dx;
      }
      
      if (app==NULL) {
		libero=1;
		if ((sc=='s') || (sc=='S')) {
	  		prec->sx = new;
		} else {
			prec->dx = new;
		}
      }
    } // end while
  } // end if
} // end genera
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 23-07-2007, 16:25   #3
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
non riuscivi a lavorare sul mio esempio ?
Che poi tutto sommato si riduce a questo:

Codice:
struct inttree {
	int dato;
	struct inttree *left, *right;
};

typedef struct inttree inttree;

inttree *root = NULL;

Ultima modifica di misterx : 23-07-2007 alle 16:27.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 23-07-2007, 17:15   #4
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Quote:
Originariamente inviato da misterx Guarda i messaggi
non riuscivi a lavorare sul mio esempio ?
Che poi tutto sommato si riduce a questo:

Codice:
struct inttree {
	int dato;
	struct inttree *left, *right;
};

typedef struct inttree inttree;

inttree *root = NULL;
Ecco il codice adattato alla tua struttura

Codice:
void genera (inttree **root, int c) { // funzione chiamata per generare l'albero; viene inserito un nodo alla volta
  
  char sc, invio;
  inttree *new;
  inttree *app;
  inttree *prec;
  int libero;
  
  libero = 0;
  
  new = (inttree *) malloc (sizeof(inttree)); // creo il nuovo nodo
  new->left = NULL;                                // puntatore di SX a null
  new->right = NULL;                              // puntatore di DX a null
  new->dato = c;                                   // inserisco dato nel nodo
  
  if ((*root)==NULL) { // se la radice è vuota
    
    *root = new;        // posiziono il nodo creato come radice
    
  } else {
    
    app = *root;           // memorizzo in una variabile d'appoggio la radice
    while (libero==0) {   // libero; se 1 --> inserisco il nodo creato nell'albero; se 0 --> scorro l'albero
      do {
		printf("sx o dx di %d ? : ",app->dato); // l'utente decide se inserire a SX o a DX del nodo padre
		scanf("%c",&sc);
		scanf("%c",&invio);
      } while ((sc!='s') && (sc!='S') && (sc!='d') && (sc!='D'));
      
      prec = app;                     // memorizzo il nodo app (prec poi diventa il padre di app)
      if ((sc=='s') || (sc=='S')) { // se l'utente ha scelto a SX
		app=app->left;       // appoggio si posiziona nel nodo figlio SX
      } else {                          // altrimenti
		app=app->right;     // appoggio si posiziona nel nodo figlio DX
      }
      
      if (app==NULL) {            // se appoggio è NULL
		libero=1;             // libero = 1 --> inserisco il nodo creato all'inizio nell'albero
		if ((sc=='s') || (sc=='S')) {
	  		prec->left = new; // se ho scelto a SX inserisco a SX
		} else {
			prec->right = new; // altrimenti a DX
		}
      }
    } // end while
  } // end if
} // end genera

Ultima modifica di nico88desmo : 24-07-2007 alle 11:30.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 06:37   #5
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
scusa, ma senza un briciolo di commento non riesco a capire come lavora il tuo algoritmo!
Il codice di inserimento di un nuovo nodo è mescolato con quello dell'input dei dati, boh!
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 11:31   #6
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Quote:
Originariamente inviato da misterx Guarda i messaggi
scusa, ma senza un briciolo di commento non riesco a capire come lavora il tuo algoritmo!
Il codice di inserimento di un nuovo nodo è mescolato con quello dell'input dei dati, boh!
Ho modificato il codice precedente e ho aggiunto i commenti.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 14:19   #7
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
un pò di pazienza che non è un argomento poi così banale

Immagine.gif

a mano a mano che alloco nodi la configurazione (struttura) che si viene a creare è come quella nel mio disegno ?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 15:48   #8
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
La struttura è tipo questa

nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 16:59   #9
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3741
lo so che è rappresentato così un albero binario. Mi interessava sapere se strutturalmente nella memoria del calcolatore si hanno aree di memoria configurate come nel mio schema e collegate come nel mio schema.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 24-07-2007, 21:32   #10
nico88desmo
Senior Member
 
Iscritto dal: Jul 2006
Messaggi: 1568
Quote:
Originariamente inviato da misterx Guarda i messaggi
lo so che è rappresentato così un albero binario. Mi interessava sapere se strutturalmente nella memoria del calcolatore si hanno aree di memoria configurate come nel mio schema e collegate come nel mio schema.
Si si, è come nel tuo schema.
nico88desmo è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2007, 11:16   #11
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
salve, usando il "cerca" ho trovato questa interessante discussione. Avrei una domanda a riguardo...ma se invece di voler creare un albero binario, io volessi creare un albero con k figli?? cioè, ho una radice, poi ogni nodo può avere da 0 a k figli, e cosi via....
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 22-11-2007, 15:42   #12
stdecden
Member
 
L'Avatar di stdecden
 
Iscritto dal: Apr 2007
Messaggi: 263
Un nodo dell'albero dovrebbe contenere:
- Una lista di nodi

Codice:
struct Node
{
     std::list<*Node> Nodi;
};
(Codice non testato)
stdecden è offline   Rispondi citando il messaggio o parte di esso
Old 23-11-2007, 08:33   #13
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da stdecden Guarda i messaggi
Un nodo dell'albero dovrebbe contenere:
- Una lista di nodi

Codice:
struct Node
{
     std::list<*Node> Nodi;
};
(Codice non testato)
è una struttura nodo con all'interno???? non capisco di che tipo di membro si tratta...
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
Ring Intercom Audio a 44,99€ su Amazon: ...
Apple iPhone 16 crolla a 689€: ecco perc...
Google Pixel 9 a 449,90€ con caricatore ...
Ecco la top 7 delle offerte Amazon, aggi...
Ex ingegnere ammette il sabotaggio: migl...
I coupon nascosti di Amazon si rinnovano...
Disponibili i video e le immagini in alt...
La NASA ha rilasciato le prime fotografi...
Cometa interstellare 3I/ATLAS: l'ESA dif...
Kodak PIXPRO AZ653: la fotocamera bridge...
Monitor da gaming: Samsung si conferma l...
The Duskbloods potrebbe arrivare a fine ...
Il miglior pesce d'aprile del mondo Linu...
Monopattini elettrici a 62 km/h fermati ...
OpenAI porta la modalità vocale d...
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: 08:17.


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