Advertisement
darkjessy94

eliminazione_lista_bidirezionale - antonio guerra

Sep 6th, 2017
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <assert.h>
  5. //CANCELLAZIONE IN TESTA, CODA, E IN MEZZO IN UNA LISTA BIDIREZIONALE SENZA SENTINELLA.
  6.  
  7. //Supponiamo che la lista sia una lista di interi, creo la struct informazioni che conterra' il valore
  8. struct informazioni
  9. {
  10. int valore;
  11. };
  12. typedef struct informazioni informazioni;
  13.  
  14. //Creo la struttura per la lista bidirezionale
  15. struct elemento
  16. {
  17. informazioni info;
  18. struct elemento *prec;
  19. struct elemento *succ;
  20. };
  21. typedef struct elemento elemento;
  22. typedef elemento *lista;
  23.  
  24. lista crea_lista();
  25. int main()
  26. {
  27. }
  28.  
  29. lista crea_lista()
  30. {
  31. lista appoggio;
  32. appoggio = NULL;
  33. return appoggio;
  34. }
  35.  
  36. void cancella_testa(lista testa)
  37. {
  38. lista appoggio;
  39. appoggio = testa;
  40. //La nuova testa sarà il successivo della vecchia testa
  41. testa = appoggio->succ;
  42. //Il precedente della vecchia testa, divenuta adesso la nuova testa, punterà a NULL
  43. appoggio->succ->prec = NULL;
  44. //Questo passaggio può essere scritto meglio creando una nuova variabile appoggio
  45. //ESEMPIO : lista appoggio2; allocazione dinamica di appoggio2; appoggio2 = appoggio->succ; appoggio2->prec = NULL
  46. //Infatti come l'ho scritto io su alcuni compilatori potrebbe dare problemi pur essendo corretto logicamente
  47. free(appoggio);
  48. }
  49.  
  50. void cancella_fondo(lista fondo)
  51. {
  52. lista appoggio;
  53. appoggio = fondo;
  54. fondo = appoggio->prec;
  55. appoggio->prec->succ = NULL;
  56. free(appoggio);
  57. }
  58.  
  59. void cancella_mezz(lista testa)
  60. {
  61. int el;
  62. printf("Quale elemento vuoi eliminare ?");
  63. //L'utente dovrà inserire un numero, ad esempio 4 per eliminare il quarto.
  64. lista appoggio;
  65. appoggio = testa;
  66. int i = 0;
  67. while(appoggio!=NULL && i<4)
  68. {
  69. appoggio = appoggio->succ;
  70. }
  71. //Il ciclo si fermerà sull'elemento da eliminare
  72. //Si possono utilizzare nuovamente altre variabili per semplificare la cosa
  73. appoggio->succ->prec = appoggio->prec;
  74. appoggio->prec->succ = appoggio->succ;
  75. free(appoggio);
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement