nicb

carica, stampa, elimina testa coda e mezza PILA

Jan 30th, 2018
192
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct pila
  5. {
  6.     int elemento;
  7.     struct pila *next;
  8. }pila;
  9.  
  10. pila* inser_testa (pila *p);
  11. pila* inser_succ (pila *p, int i);
  12. void stampa (pila *p);
  13. void elimina_testa (pila *p);
  14. pila* elimina_coda (pila *p);
  15. void elimina_mezzo (pila *p, int k);
  16. void elimina_mezzo_pos (pila *p, int el, int n);
  17. int main()
  18. {
  19.     pila *p;
  20.     int n,i,k,el;
  21.     printf("Quanto elementi deve contenere la pila? ");
  22.     scanf("%d",&n);
  23.     if(n==1)
  24.         p= inser_testa(p);
  25.     else
  26.     {
  27.         p=inser_testa(p);
  28.         for (i=1;i<n;i++)
  29.         {
  30.             p= inser_succ(p,i);
  31.         }
  32.     }
  33.     stampa(p);
  34.     elimina_testa(p);
  35.     printf("\n");
  36.     stampa(p);
  37.     p=elimina_coda(p);
  38.     printf("\n");
  39.     stampa(p);
  40.     printf("\nInserisci elemento da eliminare: ");
  41.     scanf("%d",&k);
  42.     elimina_mezzo(p,k);
  43.     system("pause");
  44.     printf("\n");
  45.     stampa(p);
  46.     printf("\nDecidere la posizione dell'elemento da eliminare:");
  47.     scanf("%d",&el);;
  48.     elimina_mezzo_pos (p,el,n-2);
  49.     stampa(p);
  50.     return 0;
  51. }
  52. pila* inser_testa (pila *p)
  53. {
  54.     p= (pila *)calloc(1, sizeof(pila));
  55.     printf("inserisci il 1 elemento della pila: ");
  56.     scanf("%d",&p->elemento);
  57.     p->next= NULL;
  58.     return p;
  59. }
  60. pila* inser_succ (pila *p, int i)
  61. {
  62.     pila *nuovo;
  63.     nuovo= (pila *) calloc(1, sizeof(pila));
  64.     printf("inserisci il %d elemento della pila: ",i+1);
  65.     scanf("%d",&nuovo->elemento);
  66.     nuovo->next=p;
  67.     return nuovo;
  68. }
  69. void stampa (pila *p)
  70. {
  71.     if(p!=NULL)
  72.     {
  73.         printf("%d\t",p->elemento);
  74.         stampa(p->next);
  75.     }
  76. }
  77. void elimina_testa (pila *p)
  78. {
  79.     if(p->next->next==NULL)
  80.         p->next=NULL;
  81.     else elimina_testa(p->next);
  82. }
  83. pila* elimina_coda (pila *p)
  84. {
  85.     return p->next;
  86.  
  87. }
  88. void elimina_mezzo (pila *p,int k)
  89. {
  90.     if(p->next!=NULL)
  91.     {
  92.         if(p->next->elemento==k)
  93.         {
  94.             (p->next)=(p->next->next);
  95.             elimina_mezzo(p,k);
  96.         }
  97.         else
  98.         {
  99.             elimina_mezzo(p->next,k);
  100.         }
  101.  
  102.     }
  103. }
  104. void elimina_mezzo_pos (pila *p, int el, int n)
  105. {
  106.     int i;
  107.     for(i=n;i>n-el+1;i--)
  108.     {
  109.         p=p->next;
  110.     }
  111.     p->next=p->next->next;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment