Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- struct node_list {
- char nome[30]; //Nome
- char num_tel[10]; //Numero telefonico
- struct node_list *p_next;
- };
- typedef struct node_list TList;
- struct node_alb {
- char lett; //Contine lettera
- struct node_list *list; //Punta alla lista dei nomi per lett
- struct node_alb *sx; //Punta alber sx
- struct node_alb *dx; //Punta albero dx
- };
- typedef struct node_alb Node_Alb;
- typedef Node_Alb* Albero;
- TList* Ricerca_Lista(Albero bt,char nome[])
- {
- char lettera;
- lettera=nome[0];
- if(bt==NULL || bt->lett == lettera) ///CASO BASE
- return bt->list;
- else
- {
- if(lettera < bt->lett)
- return Ricerca_Lista(bt->sx,nome);
- else
- return Ricerca_Lista(bt->dx,nome);
- }
- }
- void Ricerca_Nome(Albero bt,char nome[])
- {
- TList* curr;
- curr=Ricerca_Lista(bt,nome);
- ///RICERCA POSIZIONE ELEMENTO
- while(curr!=NULL && (strcmp(nome,curr->nome))>0)
- {
- curr=curr->p_next;
- }
- if(strcmp(curr->nome,nome)==0)///SE CORRISPONDE
- {
- printf("Nome Trovato.\n");
- printf("Numero di Telefono: %s",curr->num_tel);
- }
- else///SE NON CORRISPONDE
- {
- printf("\nNome non presente.");
- }
- }
- ///Ritorno la lista in caso si voglia stamparla per vedere l'inserimento se è andato a buon fine
- TList* Inserimento(Albero bt,char nome[],char num_tel[])
- {
- TList* list,*prec,*curr;
- list=Ricerca_Lista(bt,nome);
- prec=NULL;
- curr=list;
- ///RICERCA DELLA POSIZIONE DI INSERIMENTO
- while(curr!=NULL && (strcmp(nome,curr->nome))>0)
- {
- prec=curr;
- curr=curr->p_next;
- }
- /// SE ESISTE IL NOME
- if(strcmp(nome,curr)==0)
- {
- printf("\nNome gia' esistente\n");
- return list;
- }
- else ///SE NON C'è IL NOME, ALLORA INSERIAMOLO IN LISTA
- {
- TList* new_node;
- new_node=(TList*)malloc(sizeof(TList));
- if(new_node==NULL){printf("\nErrore di allocazione.\n");exit(1);}
- strcpy(new_node->nome,nome);
- strcpy(new_node->num_tel,num_tel);
- ///AGGIORNAMENTO DEI COLLEGAMENTI
- if(prec==NULL)///inserimento in testa della lista
- {
- new_node->p_next=list;
- list=new_node;
- return list;
- }
- else///inserimento posizione centrale o in coda
- {
- prec->p_next=new_node;
- new_node->p_next=curr;
- return list;
- }
- }
- }
- TList* Elimina_Elemento(Albero bt,char nome[])
- {
- TList* list,*prec,*curr;
- list=Ricerca_Lista(bt,nome);
- prec=NULL;
- curr=list;
- ///RICERCA DELLA POSIZIONE
- while(curr!=NULL && (strcmp(nome,curr->nome))>0)
- {
- prec=curr;
- curr=curr->p_next;
- }
- if(strcmp(nome,curr->nome)==0)
- {
- if(prec==NULL)///nome trovato in testa
- {
- list=curr->p_next;///impostiamo la testa al successivo
- }
- else///al centro o alla fine
- {
- prec->p_next=curr->p_next;
- }
- free(curr);
- }
- return list;
- }
- int main()
- {
- printf("Hello world!\n");
- return 0;
- }
Add Comment
Please, Sign In to add comment