tree.c 1.55 KB
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define size 50
#define taille 26

struct Noeud { char valeur;struct liste * fils; char complet;};

struct liste { struct Noeud * noeud; struct liste * suivant;};

struct dico {struct Noeud tableau[26];int dernier;};

typedef struct liste * liste;

typedef struct Noeud Noeud;


Noeud cons_noeud (char a)
{ 
    Noeud * N = malloc(sizeof(struct Noeud));
    N->valeur=a;
    N->fils=NULL;
    N->complet=0;
    return * N;
}
    
void ajout_lettre (Noeud * N , char a)
{
    if(N==NULL)
        cons_noeud(a);
    else
    {   ((N->fils)->noeud)->valeur=a;
         ((N->fils)->noeud)->fils=NULL;

    }
}

//Reprendre cette fonction!
void ajout_mot (struct dico * D, char mot[size])
{
  Noeud *N;
  for (int j=0;j<D->dernier;j++)
    { if(D->tableau[j].valeur== mot[0])
	{
	  *N=D->tableau[j];
	}
      else
	{
	 *N=cons_noeud(mot[0]);
	}
      
      for (int i=0; i<size; i++)
    
        {
	  ajout_lettre (N,mot[i]);
	  N=N->fils->noeud;
        }
      N->complet=1;
   }
}


void cons_dico(FILE* fp, struct dico* D)
{ char a;
  D->dernier=-1;
  if(fp==NULL)
    return;
  while(fscanf(fp,"%s",&a)!=EOF)
    { ajout_mot(D,&a);
      D->dernier++;}
    
}

int rech_mot(struct dico D,char mot [size])
{
    Noeud N;
    D.dernier=-1;
    for(int i=0;i<D.dernier;i++)
      {
	if(D.tableau[i].valeur==mot[0])
	  {
	     N=D.tableau[i];
	    for(int j=0;j<size;j++)
	      {
		if(N.valeur==mot[j])
		  *N=N->fils->noeud;
	      }
	    return 1;
	
	    if(N.complet=1)
	      return 1;
	  } 
	else
	  return 0;
      }
}