home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 07 / ami70 < prev    next >
Text File  |  1997-04-15  |  6KB  |  150 lines

  1. 11E
  2.  
  3. <lead>Muszë stwierdziê, ûe jestem pod wraûeniem. Nigdy nie byîem
  4. przekonany do twórczoôci Quentina Tarrantino. Wedîug mnie "Bad
  5. Lieutenant" ("Zîy porucznik") byî przesadnie brutalny. Nie
  6. podobaî mi sië. Natomiast ostatnie dzieîo -- "Pulp Fiction" --
  7. jest po prostu rewelacyjne. Mimo nieprzeciëtnej dozy przemocy
  8. (czego bardzo nie lubië) film moûe zachwyciê. Rzeczywiôcie,
  9. zgodnie z nazwâ, jest to brukowa powieôê, jednak mistrzowsko pokazana.
  10. Poleciîbym ten film wszystkim kursantom E, jednak
  11. jest pewna przeszkoda -- "Pulp Fiction" jest, sîusznie zresztâ,
  12. dozwolony od 18 lat!
  13.  
  14. <a>Rafaî Wiosna
  15.  
  16. <txt>Dziô na warsztacie mamy...
  17.  
  18. <sr>Listy linkowane
  19.  
  20. <txt>Wiem, wiem, ûe Lotny Patrol Lingwistyczny wydaî na mnie
  21. wyrok, a ciëûarówki wypeînione ich bojówkami juû tu jadâ. Brzydko to
  22. wyglâda i brzmi, jednak, jak sâdzë, utarîo sië sîowo "linkowaê",
  23. szczególnie w ôrodowisku programistów, a wîaônie do nich kierujë
  24. ten kurs.
  25.  
  26. Amiga E ma pewnâ cechë, która jest bardzo rzadko spotykana
  27. (zwykle obsîuga list îâczonych, ang. linked lists, jest
  28. realizowana zewnëtrznymi procedurami, nie jest wbudowana "w
  29. jëzyk"). Znowu jak na dîoni widaê, ûe autor E wziâî najlepsze
  30. cechy kilku jëzyków, w tym miëdzy innymi jëzyka Lisp, który ûywi
  31. sië listami.
  32.  
  33. Do miana listy linkowanej mogâ pretendowaê E-listy oraz E-ciâgi,
  34. gdyû to wîaônie te typy danych moûna obsîugiwaê za pomocâ pewnych
  35. funkcji, oferowanych przez E. Listë linkowanâ moûna porównaê do
  36. normalnej listy list, z tym ûe poszczególne jej elementy sâ
  37. porozrzucane po pamiëci, nie zajmujâ jednego ciâgîego kawaîka.
  38. Kaûdy z elementów takiej linkowanej listy otrzymuje dodatkowy
  39. parametr (niedostëpny dla programisty) -- wskaúnik do elementu
  40. nastëpnego. W szczególnym wypadku, kiedy dany element jest
  41. ostatnim w liôcie, wskaúnik ma wartoôê NIL (czyli zero).
  42.  
  43. Co prawda autor E nie okreôliî zasady, ûe typy danych w
  44. linkowanej liôcie majâ byê te same (tzn. lista ma sië skîadaê
  45. tylko z E-list lub tylko E-ciâgów), jednak nie powinno sië
  46. zbytnio mieszaê -- wszak nie ma w E funkcji IsString() czy
  47. IsList(), które mogîyby odpowiedzieê na pytanie, czy dana
  48. dana jest ciâgiem czy listâ.
  49.  
  50. Do obsîugi list linkowanych sîuûâ cztery funkcje.
  51.  
  52. >Link(COMPLEX1,COMPLEX2)<. Funckja ta îâczy COMPLEX1 z COMPLEX2
  53. (mogâ to byê dwie E-listy, dwa E-ciâgi lub E-lista i E-ciâg). W
  54. ekstremalnych wypadkach COMPLEX2 moûe mieê wartoôê NIL, co
  55. przydaje sië przy obcinaniu "ogona" linkowanej liôcie (jak juû
  56. wspomniaîem, element takiej listy, który wskazuje na NIL, jest
  57. traktowany jako ostatni). Nielinkowane E-ciâgi i E-listy majâ
  58. wskaúnik nastëpnego elementu ustawiony na NIL. Parametrem
  59. zwracanym przez funkcjë jest wskaúnik do COMPLEX1. Jest on
  60. potrzebny do poruszania sië po liôcie.
  61.  
  62. Sîuûy do tego funcja >Next(COMPLEX)<. Zwraca ona wskaúnik do
  63. nastëpnego elementu wskazywanego przez COMPLEX. Jeûeli jest on
  64. ostatnim elementem listy, zwracany jest NIL. (Koniecznie naleûy
  65. sprawdziê, czy parametr COMPLEX nie jest przypadkiem NIL, gdyû
  66. inaczej dziaîanie funkcji nie jest okreôlone i moûe doprowadziê
  67. do zawieszenia sië komputera!). Oto przykîad uûycia Link() i
  68. Next(). (Zapis "->" oznacza "wskazuje/wskazujâcy na").
  69.  
  70. <l>DEF s[23]:STRING, t[7]:STRING, lt[41]:LIST, lnk
  71.  
  72. -> Najpierw tworzymy linkowalnâ listë
  73.  
  74. lnk:=Link(lt,t) -> lista skîada sië z dwóch elementów: lt->t
  75.  
  76. lnk:=Link(s,lt) -> teraz jest trzyelementowa: s->lt->t
  77.  
  78. -> Utworzyliômy trzyelementowâ listë: s->lt->t->NIL
  79.  
  80.  
  81. -> Przykîad "wëdrówki" po liôcie (lnk wskazuje na s)
  82.  
  83. lnk:=Next(lnk) -> Teraz lnk wskazuje na lt->t
  84.  
  85. lnk:=Next(lnk) -> Teraz lnk wskazuje na t
  86.  
  87. lnk:=Next(lnk) -> Teraz lnk ma wartoôê NIL, co oznacza koniec listy
  88.  
  89. <txt>Warto zauwaûyê, ûe powinieneô trzymaê gdzieô wskaúnik na
  90. "gîowë" listy. Amiga E ma bardzo prostâ implementacjë list
  91. linkowalnych, umoûliwiajâcâ "wëdrówkë" tylko w przód. Moûna to
  92. nazwaê "listâ jednostronnie linkowanâ". Brak jest moûliwoôci
  93. wykonania funkcji Previous(), która zwracaîaby adres POPRZEDNIEGO
  94. elementu "listy linkowanej obustronnie". Tak wiëc, gdy
  95. powëdrujesz sobie funkcjâ Next() na koniec listy, utracisz tym
  96. samym jej gîowë (pierwszy element), chyba ûe zapamiëtasz jâ
  97. wczeôniej w jakiejô zmiennej.
  98.  
  99. Wracajâc do funkcji Next(), moûna jâ wywoîaê z parametrem NIL i
  100. nic sië nie stanie (a dokîadniej -- zwróci NIL).
  101.  
  102. Bardzo podobnâ funkcjâ, operujâcâ na listach linkowanych, jest
  103. >Forward(COMPLEX,LICZBA)<. Zwraca ona wskaúnik do elementu listy
  104. odlegîego od COMPLEX o LICZBA elementów. Jak moûna zauwaûyê,
  105.  
  106. <l>nast:=Next(lnk)
  107.  
  108. <txt>to to samo co
  109.  
  110. <l>nast:=Forward(lnk,1)
  111.  
  112. <txt>Instrukcja
  113.  
  114. <l>nast:=Forward(lnk,5)
  115.  
  116. <txt>zwróci w zmiennej nast wskaônik do piâtego elemetu po lnk.
  117.  
  118. Aby pozbyê sië ogona linkowanej listy, naleûy uûyê funkcji
  119. >DisposeLink(COMPLEX)<. Usunie ona z pamiëci wszystkie zlinkowane
  120. do COMPLEX elementy. Oto przykîad:
  121.  
  122. <l>-> Zakîadam, ûe mamy listë a->b->c->d->NIL
  123.  
  124. ogon:=Link(b,NIL)
  125.  
  126. DisposeLink(c) -> usuwa ogon c->d->NIL
  127.  
  128. -> Teraz lista wyglâda tak: a->b->NIL
  129.  
  130. <txt>W tym miejscu chciaîbym podkreôliê, ûe nie wolno îâczyê
  131. E-list lub E-ciâgów statycznych, gdyû mija sië to z celem.
  132. Pamiëtacie mój wywód na temat danych statycznych w poprzednim
  133. odcinku? Elementy list linkowanych powinny byê alokowane
  134. dynamicznie, za pomocâ funkcji List() i String()!
  135.  
  136. Listy linkowalne sâ bardzo pomocne przy budowaniu kompleksowych
  137. struktur danych, a dokîadniej list dynamicznie alokowanych, tzn.
  138. takich, które mogâ sië rozszerzaê lub zmniejszaê, w zaleûnoôci od
  139. wyników dziaîania programu. Bardzo dobrym przykîadem na linkowane
  140. listy jest program D.e znajdujâcy sië w katalogu Src/Utils.
  141.  
  142. <sr>*
  143.  
  144. <txt>Tym razem odcinek jest krótszy niû zwykle, stwierdziîem, ûe
  145. nie ma sensu mëczyê Was na plaûy duûâ porcjâ informacji. W
  146. nastëpnym numerze zacznie sië prawdziwe miësko: wbudowane funkcje
  147. graficzno-intuicyjne (tzn. takie, które uûywajâ Intuition).
  148. Postaram sië wyjaôniê tajniki programowania systemu, chociaû polecam
  149. teû lekturë kursu (tfu!) C.
  150.