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);
}