Si tu veux éviter l'allocation dynamique dans ta fonction à tout prix, je ne vois que la solution de beagle.
Mais comme l'as dis zuzuf, ça dépend de l'utilisation que tu veux en faire. Si tu traites des ensembles de grande taille dont le nombre ou la taille est aléatoire, les listes chaînées me paraissent plus appropriées, si tu ne traites que de petits ensembles, la solution du stack déjà alloué est plus efficace, dans le sens ou tu n'as pas besoin de réallouer a chaque fois, mais tu auras de la perte de mémoire.
Une solution alternative serait de chaîner des stacks, ce qui peut permettre d'avoir moins de pointeurs à gérer. Ce serait par exemple approprié dans le cas d'un nombre aléatoire de petits éléments, car ça consomme moins de mémoire qu'une liste chaînée (par exemple, si tes éléments font 10 caractères, une liste chaînée de 200 élément pèsera 200*(10+4)=2800, dont 800 de "perdus", avec un stack de 2000 octets, tu n'aurais pas de perte, mais si c'est aléatoire, comment estimer juste? Un mixe des 2 serait de chaîner 20 stacks de 100 octets. consommation: 20*(100+4)=2080 octets.).
Comme dis plus haut, la solution dépends de l'application.
Si tu peux prévoir de manière fiable la taille des éléments que tu parses, le stack est approprié.
Si tu ne peux pas le prévoir, mais que tes éléments seront probablement importants, la liste chaînée est idéale.
Si tu peux prévoir en partie, et que tes éléments sont probablement de taille réduite, le mixe des 2 pourrait être plus efficace, mais au niveau code, tu auras les contraintes des 2 solutions: la libération correcte de la mémoire, et l'obligation de communiquer la taille des stacks, pour éviter tout problème de sécurité et de stabilité.
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin