Don't like ads? PRO users don't see any ads ;-)
Guest

Funzioni Main ABR

By: mittimus on Jul 16th, 2012  |  syntax: C  |  size: 1.91 KB  |  hits: 19  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. void insord(list *l, tipobaseList x){
  2. position p,u;
  3. tipobaseList tmp;
  4. if (EmptyList(*l)) InsertList(l,First(*l),x);
  5. else {
  6. p=First(*l);
  7. u=End(*l);
  8. while (p!=u) {
  9. tmp=Retrieve(*l,p);
  10. if (ConfrontaList(tmp,x)<0) p=Next(*l,p);
  11. else break;
  12. }
  13. InsertList(l,p,x);
  14. }
  15.  
  16. }
  17. void inserimento_autore(list *l,tipobaseList a){
  18. position p;
  19. abr q;
  20. if(!EmptyList(*l)) p=Locate(*l,a);
  21. if(EmptyList(*l) || p==End(*l)){
  22. MakeNullABR(&q);
  23. AggiornaABR(&a,q);
  24. insord(l,a);
  25. } else printf("\nL'autore inserito e' gia' presente");
  26. }
  27. void inserimento_opera(list *l,tipobaseList a){
  28. position p;
  29. tipobaseABR libro;
  30. abr q;
  31. if(!EmptyList(*l)) p=Locate(*l,a);
  32. if(EmptyList(*l) || p==End(*l)) {
  33. printf("\nL'autore NON esiste, verra' prima inserito ");
  34. LeggiElementoABR(&libro);
  35. MakeNullABR(&q);
  36. InsertABR(&q,libro);
  37. AggiornaABR(&a,q);
  38. insord(l,a);
  39. } else {
  40. a=Retrieve(*l,p);
  41. LeggiElementoABR(&libro);
  42. CopiaABR(&q,a);
  43. if(Member(q,libro))
  44. printf("\nLibro gia' presente in archivio");
  45. else{
  46. InsertABR(&q,libro);
  47. AggiornaABR(&a,q);
  48. DeleteList(l,p);
  49. InsertList(l,p,a);
  50. }
  51. }
  52. }
  53. /*funzione che cerca un elemento in un ABR e */
  54. /*visualizza il contenuto di un nodo, se lo trova */
  55. void cerca_libro(abr n, tipobaseABR lb){
  56. tipobaseABR tmp;
  57. if (EmptyABR(n)) printf("\nLibro non trovato in archivio ");
  58. else {
  59. tmp=Label(n);
  60. if (!ConfrontaABR(tmp,lb))
  61. if(LibroPresente(tmp)) VisualizzaElementoABR(tmp);
  62. else printf("\nIl Libro %s e' attualmente in prestito");
  63. else if (ConfrontaABR(tmp,lb)>0) cerca_libro(LeftChild(n),lb);
  64. else cerca_libro(RightChild(n),lb);
  65. }
  66. }
  67. void ricerca_opera(list l, tipobaseList a){
  68. tipobaseABR libro;
  69. position p;
  70. abr q;
  71. if(!EmptyList(l)) p=Locate(l,a);
  72. if(EmptyList(l) || p==End(l))
  73. printf("\nL'autore inserito non esiste");
  74. else{
  75. a=Retrieve(l,p);
  76. CopiaABR(&q,a);
  77. if(EmptyABR(q))
  78. printf("\nNon ci sono libri relativi a questo autore");
  79. else {
  80. CercaElementoABR(&libro);
  81. cerca_libro(q,libro);
  82. }
  83. }
  84. }