Si j'utilise la définition standard d'un type de données abstrait comme une boîte noire qui fournit certaines fonctions pour gérer une collection de données, une liste chaînée correspond à cette description:La liste liée est-elle un ADT ou est-ce une structure de données, ou les deux?
Un conteneur qui offre des fonctions ajouter (x) et obtenir (i) (entre autres) qui peut être utilisé pour maintenir une liste d'objets.
Mais quand vous posez la question, quelle est la complexité temporelle de ces opérations, alors vous vous rendez compte que cela dépend de la façon dont ce conteneur est mis en œuvre:
Si vous venez de maintenir en interne un lien vers le noeud de tête, ce qui précède deux opérations se dérouleront en heure O (n). Si vous maintenez en plus un lien vers le noeud final, vous aurez le temps O (1) sur les deux. Par conséquent, ma question est la suivante: à des fins d'apprentissage, considérez-vous une liste liée comme un ADT ou une structure de données? Cette question est survenue lorsque j'essayais de mettre en œuvre un ADT Stack du Manuel de conception d'algorithmes de Skiena, et je lisais comment la performance de ses méthodes put (x) et get() dépend de la structure de données choisie. Mettre en œuvre. Le livre dit que dans ce cas, peu importe si vous choisissez un tableau ou une structure de données de liste liée pour implémenter cet ADT, ils offrent tous les deux des performances similaires.
Mais le font-ils? Cela ne dépend-il pas de la façon dont cette liste de liens est implémentée? Il y a plusieurs façons d'implémenter la liste chaînée elle-même, cela ne fait-il donc pas d'elle une autre ADT?
Une liste chaînée est un ADT. le 'abstract' dans Abstract Data Type ne fait pas référence au fait qu'il n'est pas concret, mais plutôt au fait qu'il peut être utilisé sans savoir quelles sont les données réelles qui y seront stockées (par exemple, en C, les données seront conservées comme vides *) – amit
Mon mauvais, a confondu le type de données abstrait pour une classe abstraite. – MGZero