Ho iniziato lavorare con gli alberi in C. Ho affrontato diversi esercizi su altri argomenti (array, matrici, liste collegate con puntatori e varie operazioni su questi costrutti). Sono comunque nuovo alla programmazione e ho studiato solo argomenti di base, introduttivi insomma.
La parte finale del corso trattava gli alberi, essendo stati trattati per solo una lezione e in via molto teorica, una volta arrivato alla compilazione vera e propria mi sono trovato molto in difficolt�.
Ho provato a risolvere un esercizio trovato su compiti di diversi anni fa per vedere di approfondire questo aspetto.
Testo
costruire un albero binario, contarne i numeri pari e stampare i nodi con solo il figlio destro.
Ho provato intanto a costruire l'albero, basandomi sulle poche informazioni del mio libro, dei miei appunti e qualche esempio presente sulle slide del corso
Il compilatore (utilizzo visual studio) mi da i seguenti errori: errore strumenti del linker LNK2019 e LNK11206 esterni non risolti.
Questo � il codice non funzionante che ho provato a mettere insieme e che dopo molti tentativi continua a non funzionare
codice:#include "stdafx.h" #include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #include<stdio.h> #include<malloc.h> typedef unsigned short int Boolean; //definizioni per l'uso di booleani #define TRUE 1 #define FALSE 0 //struttura albero struct btree { float value; struct btree * left_ptr; struct btree * right_ptr; }; //dichiarazioni funzioni gestione albero binario void init(struct btree ** ptrptr); void insert_inorder(struct btree ** ptrptr, float value); void visit_r(struct btree * ptr); Boolean search(struct btree * ptr, float target); //funzioni interazione console void getvalue(float *value_ptr); void notify_selection_failure(char selection); main() { struct btree *bintree; int size, res_search = FALSE, res_canc = FALSE; size = 5; float value, deleted_value; char selection[10]; init(&bintree); printf("Digita uno dei seguenti caratteri per operazioni su albero:\n"); printf("-a per fare un inserimento (ordinato)\n"); printf("-b per fare una visita\n"); printf("-c per fare una ricerca\n"); printf("-x per uscire dal programma\n"); Boolean exit_required = FALSE; int inserimento = 0; //struct btree *bintree; do { printf("\nChe operazione vuoi fare? "); scanf("%s", selection); switch (selection[0]) { case 'a'://inserimento getvalue(&value); insert_inorder(&bintree, value); break; case 'b'://vista simmetrica visit_r(bintree); break; case 'c'://ricerca getvalue(&value); res_search = search(bintree, value); if (res_search == TRUE) printf("Trovato!"); else printf("Niente, riprova!"); break; case 'x': //uscita exit_required = TRUE; break; default: notify_selection_failure(selection[0]); } } while (exit_required == FALSE); }

Rispondi quotando
