|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Junior Member
Iscritto dal: Aug 2005
Messaggi: 7
|
[C]-Array
Salve gente ho un piccolo problema a collegare un array di 26 elementi( ogni elemento contiene una lettera dell'alfabeto e un puntatore ad un albero ) all'albero che contiene il nome degli autori che iniziano con quella determinata lettera. Il testo completo dell'esercizio è questo:
Quote:
Adesso copio un pò di codice che ho sviluppato per dare un'idea ma vi avverto che è solo un abbozzo infatti le strutture si devono organizzare meglio (forse sono anche sbagliate ) e probabilmente c'è qualche errore sparso qua e là cmq come ho già detto prima è solo per dare un'idea Grazie e ciao: Codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Lista{
char nome[21];
char titolo[31]; // Info dei Libri
int anno;
}Lista;
typedef struct ListaLibri{
Lista info;
struct ListaLibri *next; // Lista dei Libri
}ListaLibri;
typedef ListaLibri *TipoListaLibri;
typedef struct s1{
char cognome[21];
}s1;
typedef struct tree{
s1 info;
TipoListaLibri libri; // Albero con Lista Libri
struct tree *left;
struct tree *right;
}tree;
typedef tree *TipoTree;
typedef struct biblioteca{
char lettera;
TipoTree nodo; // Archivio generale
}archivio[26];
tree *inserisci_autore(TipoTree root, TipoTree PA, s1 A);
tree *inserisci_lista(TipoTree Nodo, Lista B);
tree *carica(TipoTree Nodo);
int menu();
tree *carica(TipoTree Nodo) {
FILE *f1, *f2;
s1 A;
Lista B;
f1 = fopen("Autori", "r");
if(!f1) {
printf("\nImpossibile Aprire il File\n");
return Nodo;
}
f2 = fopen("Libri", "r");
if(!f2) {
printf("\nImpossibile Aprire il File\n");
return Nodo;
}
while(!feof(f1)) {
fscanf(f1, "%s", A.cognome);
Nodo = inserisci_autore(Nodo, Nodo, A);
}
fclose(f1);
while(!feof(f2)) {
fscanf(f2, "%s", B.nome);
fscanf(f2, "%s", B.titolo);
fscanf(f2, "%d", &B.anno);
Nodo = inserisci_lista(Nodo, B);
}
fclose(f2);
return Nodo;
}
tree *inserisci_autore(TipoTree root, TipoTree PA, s1 A){
if( PA == NULL ) {
PA = (TipoTree)malloc(sizeof(tree));
if(!PA) {
printf("\nMemoria Esaurita.\n");
return PA;
}
PA->left = NULL;
PA->right = NULL;
PA->info = A;
PA->libri = NULL;
if(!root) {
return PA;
}
if( strcmp(root->info.cognome, A.cognome) > 0 ) {
root->left = PA;
}
else if( strcmp(root->info.cognome, A.cognome) < 0) {
root->right = PA;
}
return PA;
}
if( strcmp(PA->info.cognome, A.cognome) > 0 ) {
inserisci_autore(PA, PA->left, A);
}
else if(strcmp(PA->info.cognome, A.cognome) < 0 ) {
inserisci_autore(PA, PA->right, A);
}
else if( !strcmp(PA->info.cognome, A.cognome) ) {
printf("\nAutore già Presente.\n");
return root;
}
return root;
}
tree *inserisci_lista(TipoTree Nodo, Lista B) {
TipoListaLibri aux;
if( strcmp(Nodo->info.cognome, B.nome) < 0 ) {
inserisci_lista(Nodo->right, B);
}
else if(strcmp(Nodo->info.cognome, B.nome) > 0 ) {
inserisci_lista(Nodo->left, B);
}
else if( !strcmp(Nodo->info.cognome, B.nome) ) {
aux = (TipoListaLibri)malloc(sizeof(ListaLibri));
if(!aux) {
printf("\nMemoria Esaurita.\n");
return Nodo;
}
aux->info = B;
aux->next = NULL;
if( !Nodo->libri ) {
Nodo->libri->info = aux;
Nodo->libri->next = NULL;
}
}
}
|
|
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
Hai fatto una funzione di inserimento nell'albero?
io ho pensato che potresti fare un array così struct tree *iniziali[26]; poi carichi un libro dal file e ne estrai l'iniziale dell'autore la trasformi in minuscola e la metti in una variabile iniziale_corrente poi chiami la funzione di inserimento nell'albero inserisci(iniziali[iniziale_corrente - 'a'],...altriparametri); così dovresti inserire ogni autore nell'albero giusto ciao EDIT Ultima modifica di Brazorv : 08-09-2005 alle 13:03. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Aug 2005
Messaggi: 7
|
Ti chiedo troppo se fai una piccola implementazione perchè non ho capito bene come fare. Inoltre L'array che hai intenzione di creare è di tipo tree?? perchè se è cosi forse non è esattamente giusto; cmq fammi sapere io intanto provo a cercare altre soluzioni. Ciao
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:04.



















