Torna indietro   Hardware Upgrade Forum > Software > Programmazione

GeForce RTX 5060, due schede alla prova per capire se 8 GB di memoria sono ancora sufficienti
GeForce RTX 5060, due schede alla prova per capire se 8 GB di memoria sono ancora sufficienti
MSI GeForce RTX 5060 Gaming OC e AORUS GeForce RTX 5060 ELITE ci permettono di vedere da vicino l'ultima arrivata di casa NVIDIA, la GPU Blackwell attualmente meno costosa ad arrivare sul mercato con un prezzo a partire da 329 euro. Con 8 GB di VRAM è adeguata per il contesto attuale? La risposta è che dipende molto dalle necessità e aspettative di chi la compra.
Samsung Galaxy Tab S10 FE+: un tablet enorme a un prezzo super, ma con qualche limite
Samsung Galaxy Tab S10 FE+: un tablet enorme a un prezzo super, ma con qualche limite
Samsung Galaxy Tab S10 FE+ 5G si candida come una delle proposte più intriganti fra i tablet dalle dimensioni esagerate. Con uno schermo LCD da 13,1 pollici e una batteria da 10.090 mAh, oltre al supporto S Pen incluso, punta a competere con iPad Air a un prezzo ben inferiore. La proposta coreana appare solida sul piano del design, tuttavia presenta qualche difficoltà in termini di prestazioni pure.
Motorola razr 60 Ultra: il migliore! Peccato per l’AI un po’ ''zoppa''. Recensione
Motorola razr 60 Ultra: il migliore! Peccato per l’AI un po’ ''zoppa''. Recensione
Motorola rinnova i suoi smartphone pieghevoli e abbiamo avuto modo di mettere sotto torchio questo nuovo razr 60 Ultra, flagship della serie, che cambia alcune cose migliorando in molti aspetti e soprattutto divenendo, aspettando Samsung e gli altri, il pieghevole a conchiglia perfetto. Peccato la mancanza di Moto AI in italiano.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-02-2012, 02:21   #1
Saetta93
Member
 
Iscritto dal: Feb 2012
Messaggi: 55
[C] - Eliminazione nodo albero binario.

Ciao a tuttii

Io ho questo codice, devo completare la/le funzione/i per eliminare un nodo da un albero binario, ma sono ad un punto in cui non riesco a continuare..

In pratica all'interno di questo if (da quello che ho capito):

Codice:
if((*p)->ptrsx == NULL)  
        {
            num = (*p)->dato;
            free(*p);
            *p=NULL;
            risultato=num;
        }
dovrei salvare il contenuto della foglia, nel puntatore del nodo appena eliminato.. ma come devo fare?

Qualcuno può aiutarmi gentilmente?

Codice C:

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// #include <malloc.h>

typedef struct nodo{
    int dato;
    struct nodo *ptrsx;
    struct nodo *ptrdx;
}nodo;

int elimina(nodo** );

nodo* creazione(){
    nodo *q;
    q = malloc(sizeof(nodo));
    
    printf("\nInserisci un numero intero:\t");
    scanf("%i", &q->dato);
    printf("\n");
    
    q->ptrsx = NULL;
    q->ptrdx = NULL;
    
    return q;
}

void ins_ord(nodo *p,nodo *q)
{
    nodo *r;
    r = p;
    if(r->dato > q->dato) {
        if(r->ptrsx == NULL) {
            r->ptrsx = q;
        }else {
            ins_ord(r->ptrsx,q);
        }
    } else {
        if(r->ptrdx == NULL) {
            r->ptrdx = q;
        } else {
            ins_ord(r->ptrdx, q);
        }
    }
}

nodo* ins_bin(nodo *p) {
    nodo *q;
    q = creazione();
    
    if(p == NULL) {
        return q;
    } else {
        ins_ord(p, q);
    }
    
    return p;
}

void visita(nodo *p){
    nodo *r;
    r = p;
    if(r!=NULL)
    {
        if(r->ptrsx != NULL) {    // controllare il padre
            visita(r->ptrsx);
        }
        
        printf("%i", r->dato);
        printf("\t");
        
        if(r->ptrdx != NULL) {
            visita(r->ptrdx);
        }
    }
}

bool eliminazione(nodo **p, int val)
{
    if((*p) == NULL)
        return false;
    else {
        elimina(p);
        return true;
    }
}

int elimina(nodo **p)
{
    int num, risultato;
    if((*p)!=NULL)
    {
        if((*p)->ptrsx == NULL)  
        {
            num = (*p)->dato;
            free(*p);
            *p=NULL;
            risultato=num;
        }
        else
        {
            risultato = elimina(&((*p)->ptrdx));
        }
    }
    return risultato;
}


int main()
{
    nodo *radice = NULL;
    int scelta = 1, num;
    while(scelta != 0) {
        printf("1 - Inserimento ordinato;\n2 - Visita albero;\n3 - Cancella elemento;\n0 - Esci;\n\nScelta:\t");
        scanf("%i", &scelta);
        
        switch(scelta) {
            case 1: {
                radice=ins_bin(radice);
                
                break;
            }
            case 2: {
                printf("\nAlbero:\n");
                visita(radice);
                printf("\n\n");
                
                break;
            }
            case 3: {
                if(radice != NULL){
                    printf("\nInserisci il numero da cancellare:\t");
                    scanf("%d", &num);
                    radice->ptrsx=NULL;
                    radice->ptrdx=NULL;
                    eliminazione(&radice, num);
                } else {
                    printf("\nLa lista e' vuota.\n");
                }
                
                break;
            }
        }
    }
}
Grazie mille a tutti
Saetta93 è offline   Rispondi citando il messaggio o parte di esso
Old 26-02-2012, 11:32   #2
Saetta93
Member
 
Iscritto dal: Feb 2012
Messaggi: 55
Con un amico sono arrivato a questo codice:

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// #include <malloc.h>

typedef struct nodo{
    int dato;
    struct nodo *ptrsx;
    struct nodo *ptrdx;
}nodo;

nodo* creazione(){
    nodo *q;
    q = malloc(sizeof(nodo));
    
    printf("\nInserisci un numero intero:\t");
    scanf("%i", &q->dato);
    printf("\n");
    
    q->ptrsx = NULL;
    q->ptrdx = NULL;
    
    return q;
}

void ins_ord(nodo *p,nodo *q)
{
    nodo *r;
    r = p;
    if(r->dato > q->dato) {
        if(r->ptrsx == NULL) {
            r->ptrsx = q;
        }else {
            ins_ord(r->ptrsx,q);
        }
    } else {
        if(r->ptrdx == NULL) {
            r->ptrdx = q;
        } else {
            ins_ord(r->ptrdx, q);
        }
    }
}

nodo* ins_bin(nodo *p) {
    nodo *q;
    q = creazione();
    
    if(p == NULL) {
        return q;
    } else {
        ins_ord(p, q);
    }
    
    return p;
}



void visita(nodo *p){
    if(p != NULL){
        visita(p->ptrsx);
        printf("%i\t", p->dato);
        visita(p->ptrdx);
    }
}

bool eliminazione(nodo *p,int val){
    nodo *rd,*rs;
    if(p==NULL) return false;
    if(p->dato==val){
        rs=p->ptrsx;
        rd=p->ptrdx;
        free(p);
        if(rd == NULL)p=rs;
        else{
            while(rd->ptrsx != NULL) rd=rd->ptrsx;
            rd->ptrsx=rs;
            p=rd;
        }
        return true;
    }else if (val > p->dato) return eliminazione(p->ptrdx,val);
    else return eliminazione(p->ptrsx,val);
}

//funzione per la dellocazione finale dell'albero, usata alla fine del main
void dealloca(nodo *p){
    if(p!=NULL){
        dealloca(p->ptrsx);
        dealloca(p->ptrdx);
        free(p);
        p=NULL;
    }
}

int main()
{
    nodo *radice = NULL;
    int scelta = 1, num;
    while(scelta != 0) {
        printf("1 - Inserimento ordinato;\n2 - Visita albero;\n3 - Cancella elemento;\n0 - Esci;\n\nScelta:\t");
        scanf("%i", &scelta);
        
        switch(scelta) {
            case 1: {
                radice=ins_bin(radice);
                
                break;
            }
            case 2: {
                printf("\nAlbero:\n");
                visita(radice);
                printf("\n\n");
                
                break;
            }
            case 3: {
                if(radice != NULL){
                    printf("\nInserisci il numero da cancellare:\t");
                    scanf("%d", &num);
                    radice->ptrsx=NULL;
                    radice->ptrdx=NULL;
                    eliminazione(radice, num);
                } else {
                    printf("\nLa lista e' vuota.\n");
                }
                
                break;
            }
        }
    }
}
Però qualsiasi numero io voglia cancellare (sia che esista, e sia che non esista), mi elimina sempre la radice, ovvero il primo valore che inserisco nell'albero..

Come mai?
Saetta93 è offline   Rispondi citando il messaggio o parte di esso
Old 03-03-2012, 21:16   #3
Varilion
Member
 
Iscritto dal: Oct 2005
Messaggi: 68
perchè setti
Codice:
radice->ptrsx=NULL;
radice->ptrdx=NULL;
prima di chiamare "eliminazione(radice,val)" ?
Varilion è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


GeForce RTX 5060, due schede alla prova per capire se 8 GB di memoria sono ancora sufficienti GeForce RTX 5060, due schede alla prova per capi...
Samsung Galaxy Tab S10 FE+: un tablet enorme a un prezzo super, ma con qualche limite Samsung Galaxy Tab S10 FE+: un tablet enorme a u...
Motorola razr 60 Ultra: il migliore! Peccato per l’AI un po’ ''zoppa''. Recensione Motorola razr 60 Ultra: il migliore! Peccato per...
AWS Summit Milano 2025: accelerare sull'IA per liberare il potenziale delle imprese italiane AWS Summit Milano 2025: accelerare sull'IA per l...
Recensione HONOR Pad 10: a questo prezzo fa tremare la concorrenza Recensione HONOR Pad 10: a questo prezzo fa trem...
Nothing Phone (3): addio alla ricarica d...
Questa è la nuova Mercedes elettr...
Amazon Music Unlimited si arricchisce: a...
Sony non vuole sentire ragioni: nessuna ...
OnePlus 15T: un flagship compatto pronto...
vivo X200 FE: il top di gamma si fa tasc...
Zero Trust sempre e ovunque: così...
PlayStation Plus compie 15 anni: ce...
Tutte le offerte Amazon oggi: tablet 99€...
Tanti errori per i Tesla Robotaxi: passe...
HONOR Pad 10: quando batteria infinita i...
Parlare con il tuo gatto? Ecco l'AI cine...
Amazon lancia gli sconti sulle nuove RTX...
Snapdragon 8 Elite 2 a 2nm debutter&agra...
Una scelta intelligente: Xiaomi Redmi No...
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: 12:28.


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