les listes et les listes chaînées, c la même chose ?? - Algo - Programmation
Marsh Posté le 08-09-2002 à 00:01:17
non
Marsh Posté le 08-09-2002 à 00:02:12
a priori les listes c'est le concept, les listes chainées une implémentation possible, j'ai bon ?
Marsh Posté le 08-09-2002 à 00:05:34
lorill a écrit a écrit : a priori les listes c'est le concept, les listes chainées une implémentation possible, j'ai bon ? |
vi ... eg en lisp, la liste est le type de base, implémenté par liste chaînée.
Marsh Posté le 08-09-2002 à 12:47:25
mais si je connais les liste chaînées, je connais les listes ?
Marsh Posté le 08-09-2002 à 13:28:12
tu voudrais pas être ... un peu moins vague ?
une liste c'est simple : empiler / dépiler un élément, chopper le nième, etc. dans certains cas, une liste peut contenir des listes (lisp toujours), transformant la structure en arbre.
donc il faudrait savoir où commencent et où s'arrêtent tes besoins de cours ...
Marsh Posté le 08-09-2002 à 13:33:03
airseb a écrit a écrit : mais si je connais les liste chaînées, je connais les listes ? |
Une liste chaînée est une implementation possible du concept de liste !!!
Donc tu ne connais pas toutes les implémentations possible.
Marsh Posté le 09-09-2002 à 00:27:34
Une liste en langage courant = un ensemble d'objet rangé du premier au dernier (liste de course, top 50 etc..).
Donc pour faire une liste d'objet tu peux utiliser un array en C/C++, un std::vector, un objet std::list, une CList, un arbre binaire et j'en passe.
En algorithmique une liste est souvent un objet a acces sequentiel ("suivant" ).
La facon de faire differe evidemment si tu es en langage fonctionnel ou en C.
Dans les langages fonctionnels style caml la liste est un type predefini du langage donc tu n'as pas a te preoccuper de comment c'est fait.
En C, il faut definir pour chaque element de ta liste un pointeur vers l'element suivant. tu peux aussi mettre un pointeur vers l'element precedent. C'est ce qui est fait dans std::list (dans la lib standard C++).
La distinction entre vector et list est fixee par un contrat. Meme si la semantique et les methodes d'acces sont strictement les memes, le cout de chaque operation differe de maniere tres precise. La liste (doublement chainee) te garantit un parcours en temps lineaire dans les deux sens, une insertion et une suppression en temps constant n'importe ou dans la liste. Par contre elle ne te garantit pas un temps d'acces aleatoire en temps constant mais en temps lineaire et la recherche d'element est exhaustive (au pire tu parcours toute la liste pour trouver le dernier element). Le vector par contre a un temps de parcours lineaire, une insertion et une suppression en temps non constant (dependance lineaire de la distance de l'element insere ou supprimé au dernier element). Le temps d'acces aleatoire est constant par contre. La recherche d'element sur un vector non trié est exhaustive, par contre sur un vector trié cela peut etre reduit a du log(n).
Si tu veux des choses plus precises, poses des questions precises.
LeGreg
Marsh Posté le 08-09-2002 à 00:00:16
pasque je dois apprendre ça