Jeśli używam standardową definicję abstrakcyjny typ danych jako czarną skrzynkę, która zapewnia pewne funkcje do zarządzania zbiór danych, połączonej listy pasuje do tego opisu:Czy jest połączona lista ADT, czy jest to struktura danych, czy obie te opcje?
pojemnika, który oferuje funkcje add (x) i uzyskać (i) (między innymi), które można wykorzystać do utrzymania listy obiektów.
Ale kiedy zadać sobie pytanie, co jest złożoność czas tych operacji, a potem okazuje się, że zależy to pojemnik jest realizowany:
Jeśli tylko wewnętrznie utrzymać łącze do węzła głowy, powyższe dwie operacje będą wykonywane w czasie O (n). Jeśli dodatkowo utrzymujesz łącze do węzła końcowego, uzyskasz O (1) czas na obu.
Moje pytanie brzmi, czy w celach edukacyjnych uważasz, że lista powiązana jest ADT lub struktura danych?
To pytanie pojawiło się, gdy próbowałem zaimplementować ADT stosu w Podręczniku projektowania algorytmu Skiena i czytałem o tym, jak wydajność jego metod put (x) i get() będzie zależała od tego, do której struktury danych wybrano Wdrożyć je. Książka mówi, że w tym przypadku nie ma to większego znaczenia, jeśli wybierzesz strukturę danych z listą lub połączoną listą, aby zaimplementować ten ADT, oba oferują podobną wydajność.
Ale czy? Czy to nie zależy od sposobu implementacji tej listy linków? Istnieje wiele sposobów na implementację samej połączonej listy, więc czy to nie sprawia, że jest to tylko kolejny ADT?
połączona lista to ADT. "abstrakcja" w abstrakcyjnym typie danych nie odnosi się do faktu, że nie jest konkretna, ale raczej do tego, że może być używana bez znajomości rzeczywistych danych, które będą w niej przechowywane (na przykład w C, dane będą przechowywane jako puste *) – amit
Mój zły, błędny abstrakcyjny typ danych dla klasy abstrakcyjnej. – MGZero