Listes chainées !!!!!

flopflopp Messages postés 14 Date d'inscription dimanche 8 février 2004 Statut Membre Dernière intervention 23 mars 2007 - 3 nov. 2004 à 11:24
virlix Messages postés 17 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 9 septembre 2005 - 3 nov. 2004 à 15:45
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

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
3 nov. 2004 à 12:42
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.
0
virlix Messages postés 17 Date d'inscription jeudi 24 juillet 2003 Statut Membre Dernière intervention 9 septembre 2005
3 nov. 2004 à 15:45
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.
0
Rejoignez-nous