1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define TAILLE 7
// On définie d'abord la structure de l'enregistrement
/*On a donc un tableau pointant vers un élement de type strucure [tab[i]]--->[chaine|nb|suiv]*/
struct Boite {
char* chaine; //case qui enregistre le mot que l'on souhaite manipuler
int nb; //Va compter le nombre d'occurence du mot
struct Boite *suiv; //pointeur qui pointe vers la structure suivante
};
typedef struct Boite Element;
Element *tab[TAILLE];
// On va maintenant initialiser toute la structure
void initialisation(){
int i;
for (i=0;i<TAILLE;i++){
tab[i]=NULL;
}
}
/*Fonction hashcode ( fonction qui va hasher les mots en codes pour ensuite donner un numéro entre 1 et TAILLE du tableau)*/
int hashcode(char mot[]){
int resultat=0;
int code;
int nb=0;
int i=0;
while ( mot[i] != '\0'){
resultat=mot[i]+nb;
nb=resultat;
i++;
}
code=resultat%TAILLE;
printf("code : %i\n\n",code);
return code;
}
//Fonction affRésult, qui va afficher les valeurs dans la structure
void affResult(){
int i;
for (i=0;i<TAILLE;i++){
printf("clé n° %d\n",i);
Element *temp=tab[i];
while (temp != NULL){
printf("%s(%d)",temp->chaine, temp->nb);
temp=temp->suiv;
}
printf("\n");
}
}
/*
//Fonction ajout element dans la structure V.1 qui ne marche pas
void ajoutElmt(Element *elmt){
int place=hashcode(elmt->chaine);
if (tab[place]==NULL){
tab[place]=elmt;
}
else{
Element *temp=tab[place];
int exist=strcmp(temp->chaine,elmt->chaine);
while (temp->suiv != NULL && exist !=0){
temp=temp->suiv;
exist=strcmp(temp->chaine, elmt->chaine);
}
if (exist==0){
temp->nb+=1;
}
else{
Element *nouv;
nouv=(Element*)malloc(sizeof(struct Boite));
nouv->chaine=elmt->chaine;
nouv->nb+=1;
nouv->suiv=NULL;
temp->suiv=nouv;
}
}
}
*/
//Fonction ajout element dans la structure V.2 qui ne marche pas
void ajoutElmt(Element *elmt,char mot[]){
strcpy(elmt->chaine,mot);
int place=hashcode(elmt->chaine);
if (tab[place]==NULL){
tab[place]=elmt;
}
else{
Element *temp=tab[place];
int exist=strcmp(temp->chaine,elmt->chaine);
while (temp->suiv != NULL && exist !=0){
temp=temp->suiv;
exist=strcmp(temp->chaine, elmt->chaine);
}
if (exist==0){
temp->nb+=1;
}
else{
Element *nouv;
nouv=(Element*)malloc(sizeof(struct Boite));
nouv->chaine=elmt->chaine;
nouv->nb+=1;
nouv->suiv=NULL;
temp->suiv=nouv;
}
}
}
//Fonction supprimer un élément
void supElmt(char *chaine){
Element *tete=tab[hashcode(chaine)];
if (tete==NULL){
printf("la liste est vide");
}
else{
Element *temp=NULL;
Element *courant=tete;
while (courant != NULL && strcmp (courant->chaine,chaine) != 0){
temp=courant;
courant=courant->suiv;
}
if (temp->suiv==NULL){
printf("élement non trouvé");
}
else{
Element *asupprimer=temp->suiv;
temp->suiv=temp->suiv->suiv;
free(asupprimer);
}
}
}
int main(){
Element *elmt;
char mot="mot";
ajoutElmt(elmt,mot);
affResult();
} |
Partager