[nem-pl] Re: [Nemerle] struktura danych - lista

Michal Moskal michal.moskal at gmail.com
Sun May 15 01:53:49 CEST 2005


On 5/14/05, Piotr Kalinowski <pitkali at interia.pl> wrote:
> Witam,
> 
> Mam pytanie odnośnie struktury danych, jaką jest lista. Ale nie chodzi
> mi o stałą listę Nemerle. Jestem ciekaw, czy istnieje możliwość, aby
> gdzieś w bibliotece Nemerle znalazło się coś takiego, jak "mutable list"

Istnieje.

> (jak to po polsku opisać? :). 

Lista ulotna ;-)

> .NET tego nie ma, a jednak wydaje mi się,
> że czasem taka nieposortowana kolekcja o zmiennym rozmiarze i możliwości
>  modyfikowania jej struktury w czasie stałym się przydaje.

Mi też się tak wydaje, aczkolwiek nie jestem pewny co do wersji 2.0.

> (Właściwie to jestem pewien, że by MI się przydała ;) Mam na sumieniu
> bibliotekę C++ do zarządzania historią wiadomości ekg i najbardziej
> odpowiednią strukturą do trzymania listy wiadomości jest w moim odczuciu
> lista wiązana. No bo jak modyfikuje listę, która trzyma 70 000
> wiadomości o łącznej objętości kilku mega (a kolega, który pisze UI ma
> tego kilkanaście mega ;), to złożoność O(n) dla większości użytkowników
> może nie być zadowalająca, zwłaszcza, jeśli istnieje tak prosta i
> oczywista alternatywa...)

Ja bym pewnie użył drzewa. No ale ja jestem inny ;) A lista taka była
mi kiedyś potrzebna do drzew dominatorów czy jakieś postaci SSA, nie
pamiętam.

> Jeśli powinienem napisać o tym gdzieś indziej - powiedz :) Jeśli
> uważasz, że to raczej element na osobną bibliotekę, którą powinienem
> sobie napisać i być może umieścić gdzieś na BerliOSie lub SF - też
> chciałbym wiedzieć ;)

Nie, trunk/lib/ będzie w porządku. Powinniśmy uruchamiać testy z
lib/tests/ co jutro obiecuję zrobić. Więc razem z klasą wskazany byłby
plik z testami (przykłady w ncc/testsuite/positive/).

> Mógłbym nawet pokazać przykładową implementację, którą skleciłem pisząć
> program na laboratorium z algorytmów. To taka lista wiązana,
> dwukierunkowa, z iteratorem do chodzenia po niej. Iterator implementuje
> IEnumerator, ale jednocześnie property Current pozwala też na zapis do
> węzła, iterator potrafi chodzić nie tylko do przodu i ponadto
> modyfikować strukturę listy (dodawać elementy, usuwać je, itp.)

Super!

> Wewnętrznie ma trzy rodzaje węzłów (w postaci wariantu). Nie sądziłem,
> że kiedyś napiszę listę używającą wartowników początka i końca, ale
> potrzebowałem trzech stanów dla iteratora, aby mógł zachowywać się tak
> samo przebiegając w każdą ze stron. Jest więc Head, Body i Tail. Tylko
> Body przechowuje elementy. Pusta lista ma węzły Head i Tail, wskazujące
> na siebie nawzajem (acz funkcja Empty() sprawdza tylko, czy Head.first
> wskazuje na ogon).
> 
> To by było na tyle. Jeśli uważasz, że jednak któraś struktura .NETa jest
> w stanie służyć, za taką listę, to chętnie się o tym dowiem ;)

Just please commit.

BTW, jest lista devel-pl at nemerle.org, gdzie można pisać po polsku. To
lepsze miejsce na tego typu maile, niż mój adres. Pomimo tego, że nie
ma tam ruchu, to jednak ktoś ją czyta :-)

-- 
   Michal Moskal,
   http://nemerle.org/~malekith/


More information about the devel-pl mailing list