Salve a tutti, dovrei implementare un dizionario in C, con le tre operazioni di inserimento, cancellazione e ricerca.
Ho provato a farlo da solo ma credo h ci siano un po' di errori e siccome non so dove mettere le mani confido in un vostro aiuto!!!
Vi ringrazio anticipatamente e vi allego il mio codice con gli errori inlclusi...
codice:/* * Dizionario realizzato mediante struttura circolare doppiamente collegata. * * classe StrutturaCollegata implementa Dizionario: * dati: S(n) = @(n) * una collezione di n record contenenti ciascuno una quadrupla * (prev, elem, chiave, next), dove prev e next sono puntatori * al precedente e successivo record della collezione. * Manteniamo inoltre un puntatore list che contiene l'indirizzo * di un record se la collezione non è vuota e null altrimenti. * operazioni: * insert(elem e, chiave k) T(n)=O(1) * viene creato un record p con elemento e e chiave k. * Se list=null, si effettua p->next=p, p->prev=p e * list=p . Altrimenti si collega il record p tra * list e list->next effettuando p->next=list->next, * list->next->prev=p, p->prev=list e list->next=p. * delete(chiave k) T(n)=O(n) * si trova il record P con chiave k come nella * search; poi si effettua p->prev->next=p->next e * p->next->prev=p->prev; infine viene distrutto * il record p. * search(chiave k)-> elem T(n)=O(n) * se list=null si restituisce null. Altrimenti si * scandisce la struttura saltando di record in * record con p=p->next fino a quando non diventa * p=list, verificando se qualche p ha chiave k. * In caso positivo si restituisce l'elemento * trovato e null altrimenti. */ #include <stdio.h> typedef char* STRINGA; typedef struct dato { struct dato* prec; int elemento; STRINGA chiave; struct dato* succ; } DATO; typedef struct dizionario { DATO* list; inserisci(int el, STRINGA ch); cancella(STRINGA ch); cerca(STRINGA ch); } DIZIONARIO; void creadiz(DIZIONARIO diz) { diz = malloc(sizeof(DIZIONARIO)); diz.list = NULL; } void inserisci(int el, STRINGA ch) { DATO p; p = malloc(sizeof(DATO)); p.elemento = el; p.chiave = ch; if (list == NULL) { p.prec = p; p.succ = p; } else { p.succ = list.succ; list.succ.prec = p; p.prec = list; list.next = p; } } void cancella(STRINGA ch) { if (list == NULL) { return NULL; } else { while ( p != list ) { if( p.chiave == ch ) { p.prec.succ = p.succ; p.succ.prec = p.prec; free(p); } else { p = p.succ; } } } return 0; } void cerca(STRINGA ch) { if (list == NULL) { return NULL; } else { while ( p != list ) { if( p.chiave == ch ) { return p.elemento; } else { p = p.succ; } } } return NULL; }codice:![]()