Advertisement
VRonin

Untitled

Jan 14th, 2012
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.54 KB | None | 0 0
  1. /*ogni volta che riceve una parola in input la inserisce in una lista linkata ordinata e visualizza a video il numero di vocali totali presenti in lista e la parola piu lunga*/
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. //#define DEbug
  7.  
  8. struct Node
  9.  {
  10.    char Data[30]; /*la parola più lunga in italiano è di 29 lettere*/
  11.    struct Node *Next;
  12.  };
  13.  
  14.  int length(struct Node* Head)
  15.  {
  16.     struct Node *cur_ptr;
  17.     int count=0;
  18.  
  19.     cur_ptr=Head;
  20.  
  21.     while(cur_ptr != NULL)
  22.     {
  23.        cur_ptr=cur_ptr->Next;
  24.        count++;
  25.     }
  26.     return count;
  27.  }
  28.  
  29. struct Node* addBeg(struct Node* Head, char* num)
  30.  {
  31.     struct Node *temp;
  32.     temp=(struct Node *)malloc(sizeof(struct Node));
  33.     strcpy(temp->Data,num);
  34.  
  35.     if (Head == NULL)
  36.     {
  37.        //List is Empty
  38.        Head=temp;
  39.        Head->Next=NULL;
  40.     }
  41.     else
  42.     {
  43.        temp->Next=Head;
  44.        Head=temp;
  45.     }
  46.     return Head;
  47.  }
  48.  
  49. struct Node* addEnd(struct Node *Head,char* num)
  50.  {
  51.     struct Node *temp1, *temp2;
  52.  
  53.     temp1=(struct Node *)malloc(sizeof(struct Node));
  54.     strcpy(temp1->Data,num);
  55.  
  56.     // Copying the Head location into another node.
  57.     temp2=Head;
  58.  
  59.     if(Head == NULL)
  60.       Head=addBeg(Head,num);
  61.     else
  62.     {
  63.        // Traverse down to end of the list.
  64.        while(temp2->Next != NULL)
  65.        temp2=temp2->Next;
  66.  
  67.        // Append at the end of the list.
  68.        temp1->Next=NULL;
  69.        temp2->Next=temp1;
  70.     }
  71.     return Head;
  72.  }
  73.  
  74. struct Node* addAt(struct Node* Head, char* num, int loc)
  75.  {
  76.     int i;
  77.     struct Node *temp, *prev_ptr, *cur_ptr;
  78.  
  79.     cur_ptr=Head;
  80.  
  81.     if(loc > (length(Head)+1) || loc <= 0)
  82.     {
  83.        printf("\nImpossibile aggiungere l'elemento\n ");
  84.     }
  85.     else
  86.     {
  87.         // If the location is starting of the list
  88.         if (loc == 1)
  89.             Head=addBeg(Head,num);
  90.         else if (loc==length(Head)-1)
  91.             Head=addEnd(Head,num);
  92.         else
  93.         {
  94.             for(i=1;i<loc;i++)
  95.             {
  96.                 prev_ptr=cur_ptr;
  97.                 cur_ptr=cur_ptr->Next;
  98.             }
  99.  
  100.             temp=(struct Node *)malloc(sizeof(struct Node));
  101.             strcpy(temp->Data,num);
  102.  
  103.             prev_ptr->Next=temp;
  104.             temp->Next=cur_ptr;
  105.         }
  106.     }
  107.     return Head;
  108.  }
  109.  
  110.  void display(struct Node * Head)
  111.  {
  112.     struct Node *cur_ptr;
  113.  
  114.     cur_ptr=Head;
  115.  
  116.     if(cur_ptr==NULL)
  117.     {
  118.        printf("\nLa lista è vuota");
  119.     }
  120.     else
  121.     {
  122.         printf("Elementi nella Lista: ");
  123.         //traverse the entire linked list
  124.         while(cur_ptr!=NULL)
  125.         {
  126.             printf(" -> %s ",cur_ptr->Data);
  127.             cur_ptr=cur_ptr->Next;
  128.         }
  129.         printf("\n");
  130.     }
  131.  }
  132.  
  133.  int SearchPos(struct Node* Head, char* num){
  134.      if (Head==NULL) return 1;
  135.      struct Node* cptr=Head;
  136.      int cont=1;
  137.      while (strcmp(cptr->Data,num)<0){
  138.         cptr=cptr->Next;
  139.         cont++;
  140.         if(cptr==NULL) break;
  141.      }
  142.      return cont;
  143.  }
  144.  
  145.  int ContaVocali(char* a){
  146.      int i,result=0;
  147.      for (i=0;i<strlen(a);i++){
  148.         if (
  149.             *(a+i)=='a' ||
  150.             *(a+i)=='e' ||
  151.             *(a+i)=='i' ||
  152.             *(a+i)=='o' ||
  153.             *(a+i)=='u' ||
  154.             *(a+i)=='A' ||
  155.             *(a+i)=='E' ||
  156.             *(a+i)=='I' ||
  157.             *(a+i)=='O' ||
  158.             *(a+i)=='U'
  159.         ) result++;
  160.      }
  161.      return result;
  162.  }
  163.  
  164.  int CoutnVowels(struct Node* Head){
  165.     struct Node* cptr;
  166.     cptr=Head;
  167.     int result=0;
  168.     while (cptr!=NULL){
  169.         result+=ContaVocali(cptr->Data);
  170.         cptr=cptr->Next;
  171.     }
  172.     return result;
  173.  }
  174.  
  175.  struct Node* PiuLungo(struct Node* Head){
  176.     struct Node* cptr;
  177.     cptr=Head;
  178.     struct Node* max=Head;
  179.     while (cptr!=NULL){
  180.         if (strlen(cptr->Data)>strlen(max->Data)) max=cptr;
  181.         cptr=cptr->Next;
  182.     }
  183.     return max;
  184.  }
  185.  
  186.  void Libera(struct Node* Head){
  187.      struct Node* temp;
  188.      while (Head!=NULL){
  189.          temp=Head->Next;
  190.          free(Head);
  191.          Head=temp;
  192.      }
  193.  }
  194.  
  195.  int main(){
  196.      char input[30];
  197.      struct Node* Lista=NULL;
  198.      while(1){
  199.          printf("\nInserisci una stringa da aggiungere o scrivi \"Esc\" per terminare: ");
  200.          scanf("%s",input); fflush(stdin);
  201.          if (strcmp(input,"Esc")==0) break;
  202.          Lista=addAt(Lista,input,SearchPos(Lista,input));
  203.          printf("\nVocali presenti nelle parole digitate: %d\nParola piu' lunga inserita: %s", CoutnVowels(Lista), PiuLungo(Lista)->Data );
  204.      }
  205.      Libera(Lista);
  206.      return 0;
  207.  }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement