Advertisement
Guest User

Untitled

a guest
Nov 19th, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.95 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct node {  
  5.   int info;  
  6.   struct node *next;
  7. };
  8.  
  9. typedef struct node*  Node;
  10.  
  11. void list_insert( int n, Node *l);
  12. void list_print(Node l);
  13. void list_delete(int n, Node *l);
  14. int isIn(int n, Node l);
  15. int list_count(Node l);
  16. void list_print_rec(Node l);
  17. void list_destroy(Node l);
  18.  
  19. int main (void) {
  20.     Node head;
  21.     char op;
  22.     int n;
  23.     int count = 0;
  24.  
  25. while ((op = getchar()) != 'f') {
  26.     /*scanf(" %c", &op);
  27.     if (op == 'f')
  28.         break;
  29.     */
  30.  
  31.     switch (op) {
  32.         case '+':
  33.             scanf("%d",&n);
  34.             list_insert(n,&head);
  35.             list_print(head);
  36.             printf("\n");
  37.             break;
  38.         case '-':
  39.             scanf("%d",&n);
  40.             list_delete(n, &head);
  41.             list_print(head);
  42.             printf("\n");
  43.             break;
  44.         case '?':
  45.             scanf("%d", &n);
  46.             if (isIn(n, head)) {
  47.                 printf("%d appartiene all'insieme\n",n);
  48.             } else
  49.                 printf("%d non appartiene all'insieme\n",n);
  50.             break;
  51.         case 'p':
  52.             list_print(head);
  53.             printf("\n");
  54.             break;
  55.         case 'c':
  56.             printf("%d\n",list_count(head));
  57.             break;
  58.         case 'o':
  59.             list_print_rec(head);
  60.             break;
  61.     }
  62. }
  63.  
  64. }
  65.  
  66. void list_insert( int n, Node *l){
  67.     Node curr = *l;
  68.  
  69.     while (curr != NULL) {
  70.         if (curr -> info == n)
  71.             return;
  72.         curr = curr -> next;
  73.     }
  74.  
  75.     Node new = malloc(sizeof(struct node));
  76.     new -> info = n;
  77.     new -> next = *l;
  78.     *l = new;
  79. }
  80.  
  81. void list_delete( int n, Node *l){
  82.     Node curr, prev;
  83.  
  84.     for ( curr = *l, prev = NULL; curr != NULL; prev = curr, curr = curr -> next )
  85.         if (curr -> info == n )
  86.             break;
  87.  
  88.     if (curr == NULL)
  89.         return;
  90.     if (prev == NULL)
  91.         *l = (*l)->next;
  92.     else
  93.         prev -> next = curr -> next;
  94.  
  95.     free(curr);
  96. }
  97.  
  98. void list_print(Node l) {
  99.     struct node *curr = l;
  100.     while (curr != NULL) {
  101.         printf("%d ", curr -> info);
  102.         curr = curr -> next;
  103.     }
  104. }
  105.  
  106. int isIn(int n, Node l) {
  107.     Node curr = l;
  108.     while (curr != NULL) {
  109.         if (curr -> info == n)
  110.             break;
  111.         curr = curr -> next;
  112.     }
  113.  
  114.     if (curr == NULL)
  115.         return 0;
  116.         else
  117.             return 1;
  118. }  
  119.  
  120. int list_count(Node l) {
  121.     int count = 0;  
  122.     Node curr = l;
  123.  
  124.     while (curr != NULL) {
  125.         count++;
  126.         curr = curr -> next;
  127.     }
  128.     return count;
  129. }
  130.  
  131. void list_print_rec(struct node *l) {
  132.  if (l!= NULL) {
  133.     list_print_rec(l -> next);
  134.     printf("%d ", l -> info);
  135.   }
  136. }
  137.  
  138. void list_destroy(struct node *l) {
  139.     struct node *curr = l;
  140.     struct node *prev = NULL;
  141.  
  142.     while (curr != NULL){
  143.       prev = curr;
  144.       curr = curr -> next;
  145.       free(prev);
  146.     }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement