fonction récursive et liste doublement chainée - C - Programmation
Marsh Posté le 03-01-2008 à 21:07:56
après cette ligne (*destination)->suivant=malloc(sizeof(element));
il faudrait faire quelque chose comme
(*destination)->suivant->precedent = *destination;
A+,
Marsh Posté le 03-01-2008 à 21:30:06
gilou a écrit : après cette ligne (*destination)->suivant=malloc(sizeof(element)); |
Ca marche merci. J'aurai dû y penser.
J'y retourne, faut que je transforme tout ça en arbre maintenant
Marsh Posté le 04-01-2008 à 08:23:19
Il me semble que si tu appelles remplissage de cette facon, c'est la valeur de phrase avant l'incrementation qui va etre passee en parametre. Donc si ta chaine commence par autre chose que '\0' tu as une recursion infinie. Me trompe-je?
Marsh Posté le 05-01-2008 à 20:22:55
Non c'est si je fais ++phrase je crois. Enfin en tout cas comme ça ça marche.
Edit : non en fait je fais pas comme ça. Il y a des sous conditions, genre j'ai 2 types de caractères : les nombres et les opérateurs ('(', ')', '+', '-' etc). Si c'est un nombre je prends tout le nombre et j'incrémente phrase jusqu'au prochain opérateur, si c'est un opérateur je prends juste l'opérateur et un seul phrase++. Ensuite seulement j'apelle remplissage(phrase, &((*dest)->suivant));.
Marsh Posté le 08-01-2008 à 23:41:05
Salut tout le monde, j'ai un nouveau problème. Si je tape :
Code :
|
puis dans la console :
(32+32)+(32+32)
Il me sort un peu n'imp. Genre seulement 8 valeurs (alors qu'il en faudrait strlen(str) soit le double), il va clairement pas jusqu'au bout, c'est ça qui m'embête. Par exemple j'ai par ailleurs un algo pour retrouver des parenthèses, et comme ça apelle d'autres fonctions après et que le résultat correspond pas à celui attendu mon prog bug de partout. Voilà si quelqu'un a une réponse..
Marsh Posté le 09-01-2008 à 00:18:03
Le str++ a la 16e ligne doit foutre le bordel, non?
Parce que si tu parcours str en regardant ce sur quoi pointe str+i, vaut mieux que str soit fixe.
A+,
Marsh Posté le 09-01-2008 à 01:31:23
Ok en fait il avance 2 fois trop vite c'est ça ?
En fait j'ai ça :
Code :
|
Ca teste si chaque caractère est un nombre ou un opérateur ou une parenthèse. Sauf que si je tape (32+32)+(32+32) ça bugge. Et là ça avance pas 2 fois trop vite. Par contre ça le fait dans la fonction d'après, je vérifie et je repost. Merci en tout cas.
Marsh Posté le 09-01-2008 à 02:19:06
Oui, il avançait deux fois trop vite.
Dans ton code, ton while est bien trop complexe et fait une kyrielle de tests inutiles.
Je procederais ainsi, ou on ne teste *(strex+i) qu'une fois [en apparence, apres ca depend de ce que le compilo fait comme code généré pour un petit switch]:
Code :
|
Et cela me semble être du code plus facile a comprendre a la lecture.
J'ai viré le cas '\0' car il ne peut survenir si l'on a n=strlen(strex).
A+,
Marsh Posté le 03-01-2008 à 20:37:23
Salut, je cherche à faire une liste doublement chainée via une fonction récursive, le problème c'est qu'à chaque appel de la fonction les variables sont réinitialisées, donc comment faire pour remplir les champs de l' "élément précédent" ?
Typiquement :
Puis la fonction (on va dire que chaque élément est un caractère tiré d'une chaine caractère) :
Que faut-il modifier pour qu'un champ "precedent" soit rempli ?