darkjessy94

BTS_rubrica_traccia esame

Sep 1st, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.57 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct node_list {
  6. char nome[30]; //Nome
  7. char num_tel[10]; //Numero telefonico
  8. struct node_list *p_next;
  9. };
  10. typedef struct node_list TList;
  11.  
  12. struct node_alb {
  13. char lett; //Contine lettera
  14. struct node_list *list; //Punta alla lista dei nomi per lett
  15. struct node_alb *sx; //Punta alber sx
  16. struct node_alb *dx; //Punta albero dx
  17. };
  18.  
  19. typedef struct node_alb Node_Alb;
  20. typedef Node_Alb* Albero;
  21.  
  22.  
  23. TList* Ricerca_Lista(Albero bt,char nome[])
  24. {
  25. char lettera;
  26. lettera=nome[0];
  27. if(bt==NULL || bt->lett == lettera) ///CASO BASE
  28. return bt->list;
  29. else
  30. {
  31. if(lettera < bt->lett)
  32. return Ricerca_Lista(bt->sx,nome);
  33. else
  34. return Ricerca_Lista(bt->dx,nome);
  35. }
  36. }
  37. void Ricerca_Nome(Albero bt,char nome[])
  38. {
  39. TList* curr;
  40.  
  41. curr=Ricerca_Lista(bt,nome);
  42. ///RICERCA POSIZIONE ELEMENTO
  43. while(curr!=NULL && (strcmp(nome,curr->nome))>0)
  44. {
  45. curr=curr->p_next;
  46. }
  47. if(strcmp(curr->nome,nome)==0)///SE CORRISPONDE
  48. {
  49. printf("Nome Trovato.\n");
  50. printf("Numero di Telefono: %s",curr->num_tel);
  51. }
  52. else///SE NON CORRISPONDE
  53. {
  54. printf("\nNome non presente.");
  55. }
  56. }
  57. ///Ritorno la lista in caso si voglia stamparla per vedere l'inserimento se è andato a buon fine
  58. TList* Inserimento(Albero bt,char nome[],char num_tel[])
  59. {
  60. TList* list,*prec,*curr;
  61. list=Ricerca_Lista(bt,nome);
  62. prec=NULL;
  63. curr=list;
  64. ///RICERCA DELLA POSIZIONE DI INSERIMENTO
  65. while(curr!=NULL && (strcmp(nome,curr->nome))>0)
  66. {
  67. prec=curr;
  68. curr=curr->p_next;
  69. }
  70. /// SE ESISTE IL NOME
  71. if(strcmp(nome,curr)==0)
  72. {
  73. printf("\nNome gia' esistente\n");
  74. return list;
  75. }
  76. else ///SE NON C'è IL NOME, ALLORA INSERIAMOLO IN LISTA
  77. {
  78. TList* new_node;
  79. new_node=(TList*)malloc(sizeof(TList));
  80. if(new_node==NULL){printf("\nErrore di allocazione.\n");exit(1);}
  81.  
  82. strcpy(new_node->nome,nome);
  83. strcpy(new_node->num_tel,num_tel);
  84. ///AGGIORNAMENTO DEI COLLEGAMENTI
  85. if(prec==NULL)///inserimento in testa della lista
  86. {
  87. new_node->p_next=list;
  88. list=new_node;
  89. return list;
  90. }
  91. else///inserimento posizione centrale o in coda
  92. {
  93. prec->p_next=new_node;
  94. new_node->p_next=curr;
  95. return list;
  96. }
  97. }
  98.  
  99. }
  100.  
  101. TList* Elimina_Elemento(Albero bt,char nome[])
  102. {
  103. TList* list,*prec,*curr;
  104. list=Ricerca_Lista(bt,nome);
  105. prec=NULL;
  106. curr=list;
  107. ///RICERCA DELLA POSIZIONE
  108. while(curr!=NULL && (strcmp(nome,curr->nome))>0)
  109. {
  110. prec=curr;
  111. curr=curr->p_next;
  112. }
  113. if(strcmp(nome,curr->nome)==0)
  114. {
  115. if(prec==NULL)///nome trovato in testa
  116. {
  117. list=curr->p_next;///impostiamo la testa al successivo
  118. }
  119. else///al centro o alla fine
  120. {
  121. prec->p_next=curr->p_next;
  122. }
  123. free(curr);
  124. }
  125. return list;
  126. }
  127. int main()
  128. {
  129. printf("Hello world!\n");
  130. return 0;
  131. }
Add Comment
Please, Sign In to add comment