Tableau de listes chaînée en C

Fermé
Julien - 25 avril 2004 à 11:44
tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 - 25 avril 2004 à 23:26
Salut à tout le monde!!!!!!

Je viens avec un problème de gros débutant, désolé :-)
J'ai un tableau statique (pour rester simple) allant obligatoirement de 0 à 200.
Pour chacune des cases du tableau je dois pouvoir ajouter une liste chaînée.

J'ai une structure du type :
typedef struct Cellule{
int valeur1;
int valeur2;
struct Cellule *suivant;
}*File;

1-Déjà comment dois-je déclarer initialement mon tableau vide?

2-Ensuite il faut que je puisse ajouter une cellule comme celle ci-dessus. Je connaît valeur1, valeur2 et le numéro de la case du tableau auquel je dois faire l'ajout de la cellule.
Par exemple, je dois ajouter ma cellule sur la liste de la case 59 du tableau. De plus, et là est le gros problème, les cellules doivent être triés par ordre croissant de la valeur1 et si deux valeur1 sont égales alors on trie par la valeur2.

Je sais ajouter en fin de liste une cellule mais je vois pas comment en plein milieu et dans un tableau ;-(((.
Pouvez-vous m'aidez!!!!!!

Julien
-------

1 réponse

tafiscobar Messages postés 1277 Date d'inscription jeudi 7 décembre 2000 Statut Contributeur Dernière intervention 26 février 2009 177
25 avril 2004 à 23:26
Salut, il faut faire suivre en cours (lolllll)
File tab_cell[100]; //déclaration du tableau de cellues
for (int i = 0; i < 100; i++) // initialise les differentes cases
       tab_cell[i]= NULL;
//insérer a la position 0<= j < 100, la cellule c
// on cherche sa position pour l'inserer
File tmp = tab_file[j];
File pred =  tab_file[j];
if (tmp == NULL)  {
     tab_file[j] = c; c->next = NULL }
else {
while (tmp != NULL) {
       if (tmp->valuer1 < c.valeur1) { //on peut l'inserer avant cette cellule
            pred->next = c; 
            c->next = tmp;
            break;
      }
       else if (tmp->valeur1 > c->valeur1) {
                pred = tmp;
                tmp = tmp->next;
       }
       else { // on teste sur valeur2
                 if (tmp->valeur2 < c.valeur2) {
                          c->next = tmp->next;
                           tmp->next = c;
                 }
                  else {
                            pred->next = c;
                            c->next = tmp;
                  }
                   break;
       }
}

if (tmp == NULL) {
      pred->next = c;
       c->next = NULL;
}
}


Il est pas performant, mais je suis fatigué, c'etait juste pour te donner une idée, a toi de faire avec!!!
tafiscobar "lou waye def bopame"
la nullite n'existe pas, l'ignorance oui, ah je suppose!!!
0