Pagina 3 di 6 primaprima 1 2 3 4 5 ... ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 54
  1. #21
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    non so che dire.. nel main provo a testare l'albero e i nodi ci sono correttamente e riesco ad accederci..

    ma nella funzione nella quale mi serve di accedere a quei nodi figli, non riesco..

  2. #22
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Ma riesci a trovare tutti i passi che ti ho mostrato nel programma d'esempio, nel tuo programma?

    Ovvero, mi mostri come crei il nodo root?

    Mi mostri come crei la lista NodoLista e come la agganci al nodo root?

    Mi mostri come crei il nodo che agganci alla lista appena creata?

    E come crei la stringa relativa al nodo suddetto?

  3. #23
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    cerco di risponderti ma non è cosi facile..perche nel porre la questione ho un po semplificato il tutto..visto che ci sono in mezzo 5-6 file.. uno per le strtture list, uno per quelle node, con relative funzioni che creano liste, nodi...etc

    cmq nel main attuale:
    codice:
    int err;
    	node t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12;	// t1 è la radice
    	char *query1,*query2,*query3;
    	list lista_query,risultato;
    	int radice;
    	err = new_list(&lista_query);
    	err = new_list(&risultato);
    
    // costruzione albero di prova input
    	err = new_tag_node(&t1, "libro");
                err = new_tag_node(&t2, "categoria");
                err = new_text_node(&t3, "giallo");
    	err = new_text_node(&t4, "romanzo");
    	err = new_tag_node(&t5, "autore");
    	err = new_tag_node(&t6, "nome");
    	err = new_tag_node(&t7, "nome");
    	err = new_text_node(&t8, "wilbur");
    	err = new_text_node(&t9, "smith");
    	err = new_text_node(&t10, "\n");	
    	err = new_text_node(&t11, "\n");
    	err = new_text_node(&t12, "\n");
    
    	err = add_child(t1, t10);
    	err = add_child(t1, t2);
    	err = add_child(t1, t11);
    	err = add_child(t1, t5);
    	err = add_child(t1, t12);
    	
    	err = add_child(t2, t3);
    	err = add_child(t2, t4);
    
    	err = add_child(t5, t6);
    	err = add_child(t5, t7);
    	
    	err = add_child(t6, t8);
    	err = add_child(t7, t9);
    dove le funzioni new_text_node e new_tag_node sono funzioni che appunto creano nodi:
    codice:
    int new_text_node(node *n, char *text) {
    /* crea un nuovo nodo di tipo text */
    	node t = malloc(sizeof(struct node));
    	t->name = (char *)malloc(sizeof(char) * strlen(text) + 1);
    	if (t->name == NULL) return OP_MEM_ERROR;	// errore: mem non allocata
    	strcpy(t->name,text);
    	t->type = TEXT_NODE;
    	int a = new_list(&t->children);
    	a = new_list(&t->attributes);
    	*n = t;
    	return OP_OK;
    }
    int new_tag_node(node *n, char *text) {
    /* crea un nuovo nodo di tipo tag */
    	node t = malloc(sizeof(struct node));
    	t->name = (char *)malloc(sizeof(char) * strlen(text) + 1);
    	if (t->name == NULL) return OP_MEM_ERROR;	// errore: mem non allocata
    	strcpy(t->name,text);
    	t->type = TAG_NODE;
    	int a = new_list(&t->children);
    	a = new_list(&t->attributes);
    	*n = t;
    	return OP_OK;
    }
    e la add_child:
    codice:
    int add_child(node parent,node child) {
    	if ((!parent) || (!child)) return OP_GENERIC;
    	int a;
    	a = add_last(&parent->children,&child);
    	return 0;
    }

  4. #24
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    E la

    new_list

    ?

  5. #25
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    sono passato a win e non ho piu i file sotto mano cmq la new_list in pratica creava un nuovo elemento list e lo metteva a NULL mi pare..

    cmq quste funzioni dovrebbero andare bene perche hanno superato svariati test precedenti e hanno sempre funzionato..

    sono alla disperazione!

  6. #26
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Senti ... io sto provando il tuo codice e mi manca la new_list ...

    Capisco che tu l'hai provato, ma c'e' un errore e se non mi dai il sorgente non posso provare a capire dov'e' ...

    Quindi, disperarsi non serve a nulla ... se mi dai la funzione che ti ho chiesto, faccio le prove e ti faccio sapere ... altrimenti, non so cosa dirti ...

    P.S. Manca anche la add_last

  7. #27
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    ok ritornato inlinux..


    codice:
    int new_list(list *l) {
    /* crea una nuova lista vuota */
    	*l = NULL;
    	return OP_OK;
    }
    grazie per l'aiuto e la pazienza..

  8. #28
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    La add_last ...

  9. #29
    Utente di HTML.it
    Registrato dal
    Sep 2004
    Messaggi
    322
    codice:
    int add_first(list *l, void *el) {
    /* inserisce l'elemento el in testa alla lista l */
    	if (!el) return OP_NO_ATTRIBUTE_ERROR;
    	list t;
    	t=malloc(sizeof(struct NodoLista));
    	if (!t) return OP_MEM_ERROR;
    	t->value=el;
    	t->next=*l;
    	*l=t;
    	return OP_OK;
    }
    int add_last(list *l, void *el) {
    /* inserisce l'elemento el in coda alla lista l */
    	if (!el) return OP_NO_ATTRIBUTE_ERROR;
    	list t;
    	if (*l == NULL) {	// lista vuota
    		*l=malloc(sizeof(struct NodoLista));
    		(*l)->value=el;
    		(*l)->next=NULL;
    		return OP_OK;
    	} 
    	t = *l; 		// c'è almeno 1 el
    	while (t->next != NULL)
    		t = t->next;
    	t->next=malloc(sizeof(struct NodoLista));
    	if (!t) return OP_MEM_ERROR;
    	t=t->next;
    	t->value=el;
    	t->next=NULL;
    	return OP_OK;
    }

  10. #30
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Per come e' fatta la add_last allora devi chiamarla cosi' nella add_child

    codice:
    int add_child(node parent, node child) {
    	if ((!parent) || (!child)) return 2; //OP_GENERIC;
    	int a = add_last(&parent->children, child);
    	return 0;
    }
    ... ovvero child e' gia' un puntatore, non devi passare un puntatore a puntatore ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.