Listes chainées !!!!!

Signaler
Messages postés
14
Date d'inscription
dimanche 8 février 2004
Statut
Membre
Dernière intervention
23 mars 2007
-
Messages postés
17
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
9 septembre 2005
-
Bonjour je travaille tjrs sur mon éditeur de texte style vi et je voudrais vous soumettre un nouveau problème :

En fait j'ai une structure ligne qui est la suivante :

extern struct ligne
{
  int numLigne; // Numéro de la ligne
  char* tLigne; // Tableau de caractères terminés automatiquement par '\n' suivi de '\0'
  struct ligne* lSuiv; // Pointeur sur la ligne suivante
  struct ligne* lPrec; // Pointeur sur la ligne précédente
};


A partir de celà je voudrais écrire une fonction qui créee une ligne, cependant je n'arrive pas à mettre dans la même fonction le cas où on ajoute un premier élément et le cas où on ajoute un élement qui n'est pas le premier.

En effet si je cree une première ligne, lSuiv va pointer sur NULL et lPrec aussi. Mais quand je crée une 2nde ligne lSuiv de la ligne 1 pointe sur la ligne 2 et lSuiv de la ligne 2 pointe sur NULL. De plus lPrec de la ligne 2 doit pointer sur la ligne1.

Est ce possible de faire tt celà dans la même fonction qui serait ma fonction de création de ligne??????

Merci de votre aide !

2 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Tu pourrais pas créer une variable globale contenant le nombre de ligne totale. une telle variable peut toujours etre utile il me semble.
Pourquoi créer une première ligne ? quand tu crées un nouveau document la première est crée automatiquement. Apres lors de l'appel à la fonction création de ligne, reste à tester les cas particulier qui sont la première et dernière ligne, connaissant l'endroit où l'on veut ajouter une ligne.
Messages postés
17
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
9 septembre 2005

Oui mais il peut toujours inserer une ligne en premiere position donc son probleme reviendra quand il voudra faire cette operation.
Ton probleme de NULL ne devrait pas exister. C'est comme une liste de tache dans un environnement multitache. S'il n'y a qu'une tache et bien la suivante sera la seule qui existe.
Donc ton pointeur lSuiv pointe sur lui meme et lPrecedent pointe sur lui meme tant que de nouvelles lignes ne sont pas inserees.