Advertisement
maha_kaal

liste.c

Dec 11th, 2012
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.50 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define TRUE 1
  6. #define STRINGA 50
  7.  
  8. typedef struct node{
  9.     char *stringa;
  10.     int occorenza;
  11.     struct node *next;
  12. } NODE, *PNODE;
  13.  
  14. NODE *creanodo(void);
  15. char *leggistringa(FILE *pfile);
  16. int numocc(NODE *plista, char *str);
  17. void stampa(NODE *plista);
  18.  
  19. int main(){
  20.     PNODE lista, temp;
  21.     char *filename, *parola;
  22.     FILE *file;
  23.    
  24.     lista = NULL;
  25.     temp = NULL;
  26.    
  27.     filename = "divinacommedia.txt";
  28.     file = fopen(filename, "r");
  29.     if(file == NULL){
  30.         printf("Impossibile aprire file.\n");
  31.         abort();
  32.     }
  33.    
  34.     printf("Inzio lettura file.\n");                       
  35.    
  36.     while(TRUE){
  37.         temp = lista;
  38.         lista = creanodo();
  39.        
  40.         if(lista == NULL){
  41.             printf("Memoria non disponibile.\n");
  42.             exit(1);
  43.         }
  44.         printf("acquisisco stringa.\n");
  45.         parola = leggistringa(file);
  46.         printf("stringa: %s\n", parola);
  47.         if(parola == NULL){
  48.             //EOF
  49.             printf("Fine Inserimento.\n");
  50.             break;
  51.         } else if(!numocc(temp, parola)){
  52.             //è la prima volta
  53.             printf("numero occ 1\n");
  54.             lista->stringa = parola;
  55.             lista->occorenza = 1;
  56.             lista->next = temp;
  57.         } else{
  58.             //non è la prima occorrenza quindi libero lo spazio
  59.             printf("non è la prma occ.\n");
  60.             free(lista);
  61.         }
  62.        
  63.         printf("nodo creato.\n");
  64.     }
  65.    
  66.     return 0;
  67. }
  68.  
  69. /*
  70.  * funzione per creare spazio a sufficienza in memoria centrale per contenere un nodo di tipo NODE.
  71.  * restituisce il puntatore alle celle riservate dalla malloc, NULL nel caso malloc fallisca l'assegnamento.
  72.  */
  73.  
  74. NODE *creanodo(void){
  75.     PNODE tmp;
  76.    
  77.     tmp = (NODE *) malloc(sizeof(NODE));
  78.    
  79.     return tmp;
  80. }
  81.  
  82. /*
  83.  * funzione per leggere dal file parola per parola*.
  84.  * restituisce puntatore al primo elemento al vettore di char, NULL di EOF oppure se malloc fallisse nell'assegnare
  85.  * celle di memoria.
  86.  */
  87.  
  88. char *leggistringa(FILE *pfile){
  89.     char str[STRINGA], *pstr;
  90.     fscanf(pfile, "%s", str);
  91.  
  92.     if(feof(pfile)) return NULL;
  93.  
  94.  
  95.     pstr = (char *) malloc(strlen(str)+1);
  96.     if(str == NULL){
  97.         printf("Assegnazione fallita");
  98.         abort();
  99.     }
  100.  
  101.     strcpy(pstr, str);
  102.  
  103.     return pstr;
  104. }
  105.  
  106. /*
  107.  * funzione per vedere se la parola è stata già letta. Se si incrementa l'occorenza di un unità.
  108.  * Restituisce 0 se è la prima occorrenza altrimenti il numero di occorrenze.
  109.  */
  110.  
  111. int numocc(NODE *plista, char *str){
  112.     while(plista != NULL){
  113.         if(strcmp(plista->stringa, str) == 0){
  114.             plista->occorenza++;
  115.             return plista->occorenza;
  116.         }
  117.        
  118.         plista = plista->next;
  119.     }
  120.    
  121.     return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement