Advertisement
Nello96

Esercizio 2 18/5/16

May 18th, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.55 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct nodo *lista;
  6.  
  7. typedef struct nodo {
  8.     char *nome;
  9.     lista next;
  10. } nodo;
  11.  
  12. lista creaLista (void);
  13. lista inserTesta (lista L, char elem[]);
  14. void inserCoda (lista L, char elem[]);
  15. void stampaLista (lista L);
  16. lista ultimoNodo (lista L);
  17. void elidi (lista L, char c);
  18. void elidi_aux (nodo *N);
  19.  
  20.  
  21. int main (void) {
  22.     lista L;
  23.     char c;
  24.     L = creaLista();
  25.     stampaLista(L);
  26.     printf("\nQual รจ l'iniziale da cancellare? ");
  27.     scanf(" %c", &c);
  28.     elidi(L, c);
  29.     stampaLista(L);
  30. }
  31.  
  32. void elidi (lista L, char c) {
  33.     while (L != NULL) {
  34.         if (L->nome[0] == c)
  35.             elidi_aux(L);
  36.         L = L->next;
  37.     }
  38. }
  39.  
  40. void elidi_aux (nodo *N) {
  41.     int i, lun;
  42.     char *M;
  43.     for (i=0; N->nome[i] != '\0'; i++)
  44.         N->nome[i] = N->nome[i+1];
  45.     lun = strlen(N->nome);
  46.     M = calloc(lun+1, sizeof(char));
  47.     strcpy(M, N->nome);
  48.     free(N->nome);
  49.     N->nome = M;
  50. }
  51.  
  52. lista creaLista (void) {
  53.     lista L = NULL;
  54.     nodo N;
  55.     int primo = 1;
  56.     char buffer[21];
  57.     while (1) {
  58.         printf("Inserisci il prossimo valore ($ per terminare): ");
  59.         scanf("%s", buffer);
  60.         if (strcmp(buffer, "$") == 0) {
  61.             break;
  62.         }
  63.         else {
  64.             if (primo == 1) {
  65.                 L = inserTesta (L, buffer);
  66.                 primo = 0;
  67.             }
  68.             else {
  69.                 inserCoda (L, buffer);
  70.             }
  71.         }
  72.     }
  73.     return L;
  74. }
  75.  
  76. lista inserTesta (lista L, char elem[21]) {
  77.     nodo *N;
  78.     int lun;
  79.     char *nome;
  80.     N = malloc(sizeof(nodo));
  81.     lun = strlen(elem);
  82.     nome = calloc(lun, sizeof(char));
  83.     if (N == NULL || nome == NULL) {
  84.         printf("Memoria insufficiente\n");
  85.     }
  86.     else {
  87.         N->nome = nome;
  88.         N->next = L;
  89.         strcpy(N->nome, elem);
  90.         L = N;
  91.     }
  92.     return L;
  93. }
  94.  
  95. void inserCoda (lista L, char elem[21]) {
  96.     nodo *N, *M;
  97.     int lun;
  98.     char *nome;
  99.     N = malloc(sizeof(nodo));
  100.     lun = strlen(elem);
  101.     nome = calloc(lun, sizeof(char));
  102.     if (N == NULL || nome == NULL) {
  103.         return;
  104.     }
  105.     else {
  106.         N->nome = nome;
  107.         M = ultimoNodo (L);
  108.         M->next = N;
  109.         strcpy(N->nome, elem);
  110.         N->next = NULL;
  111.     }
  112. }
  113.  
  114. lista ultimoNodo (lista L) {
  115.     while (L->next != NULL) {
  116.         L = L->next;
  117.     }
  118.     return L;
  119. }
  120.  
  121. void stampaLista (lista L) {
  122.     printf("\nI nomi inseriti sono:\n");
  123.     while (L != NULL) {
  124.         printf("%s ", L->nome);
  125.         L = L->next;
  126.     }
  127.     printf("\n");
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement