láncolt adatszerkezetek láncolás megvalósítása...
TRANSCRIPT
Adatszerkezetek
Adatszerkezetek
Láncolt adatszerkezetek
megvalósítása a
programozásoktatásban
Pap Gáborné – [email protected]
Láncolás
Adatszerkezetek
Fogalmak, célok, eszközök, a módszer
• Láncolás a programozási folyamatban – Programozás: adat-/tevékenység-döntések
– Specifikációból+finomításokból erednek
– Adatok nagyrészt sokaságok
– Hatékonysági kérdések :
• Hogy lehetne csak annyi helyet használni, amennyire az adott futásnál éppen szükség van?
• Hogyan lehetne a helyfoglalást dinamikussá tenni?
• Hogy lehetne az adatszerkezetek össz elemigényét
összehangolni, s így minimalizálni?
– Dinamizmus nyelvi lehetőségei
– Dinamikus tömb helyett inkább: láncolás ;cím és tartalom elválasztása
2011.02.10. Láncolás 2
Fogalmak, célok, eszközök, a módszer
Adatszerkezetek
Előhang – fogalmak, célok, eszközök, a
módszer
• Dinamikus tömb és
nyelvi lehetőségek:
Var ra:Array of Real;
N,i:Integer;
… //N értéket kap
SetLength(ra,N);
For i:=0 to N-1 do
Begin
ra[i]:=…; …
End; …
FreePascal.
2011.02.10. Láncolás 3
Fogalmak, célok, eszközök, a módszer
Adatszerkezetek
Fogalmak, célok, eszközök, a módszer
• Láncolás a programozásoktatásban
– Programozásoktatás
– Adatokkal kapcsolatos fogalmak megértése hozzáférési jog, típus… „Nevezetes homályok”:
• Mikor, hogyan jönnek létre a deklarált adatok, meddig léteznek?
• Mi az adat memóriacíme és mi a tartalma?
• Mi a típus és az adott típusú adat viszonya?
• Mi történik egy tömb indexelésekor, és mi egy rekord (struktúra) mezőjére hivatkozáskor?
• Hogy történik a paraméterek átadása egy eljárás/függvény hívásakor?
2011.02.10. Láncolás 4
Adatszerkezetek
Fogalmak, célok, eszközök, a módszer
– Homályoszlatás: a láncolás fogalmával;
cím, tartalom szétválasztása
– Láncolás=cím
2011.02.10. Láncolás 5
Adatszerkezetek
Fogalmak, célok, eszközök, a módszer
• Amutató típus és a láncolás
– A láncolást az alábbi memóriamodellre vezetjük vissza.• ExportModul Memória(Típus TElem):
• Típus TMutató=TLáncElem'Mutató
• TLáncElem=Rekord(érték:TElem, mut:TMutató)
• Konstans Sehova:TLáncElem'Mutató
• Eljárás Lefoglal(Változó mut:TMutató)
[a memóriában TLáncElem-nyi egybefüggő helyet foglal le,
a kezdőcímet mut-ban adja vissza, …]
• Eljárás Felszabadít(Változó mut:TMutató)
[a mut címen kezdődő TLáncElem-nyi egybefüggő memóriát
szabadít fel, …]
• Függvény Láncelem(Konstans mut:TMutató):TLáncElem
[a mut címen kezdődő TLáncElem értékét adja vissza]
• Eljárás Láncelemmódosít(Konstans mut:TMutató, Konstans e:TLáncElem)
[a mut címen kezdődő TLáncElem értékét módosítja e-re]
• Eljárás Láncelemértékmódosít(Konstans mut:TMutató, Konstans e:TElem)
[a mut címen kezdődő TLáncElem érték mezőjét módosítja e-re]
• Eljárás Láncelemmutmódosít(Konstans mut:TMutató, Konstans p:TMutató)
[a mut címen kezdődő TLáncElem mut mezőjét módosítja p-re]
• Modul vége.
–2011.02.10. Láncolás 6
Adatszerkezetek
Fogalmak, célok, eszközök, a módszer
A modellt meg kell valósítani.
Ezt kétféleképpen is megtehetjük:
1.„valódi címekkel” a memóriában, azaz a láncolás egy memóriacím
által jön létre (ekkor építünk a programozási nyelvi környezet
memóriamenedzselő támogatására);
2.indexekkel, amelyek egy kellő méretű (statikusan létrehozott)
tömbbe mutatnak.
2011.02.10. Láncolás 7
Adatszerkezetek
Fogalmak, célok, eszközök, a módszer
– A memóriamodell 1. („valódi” címes) változata:
2011.02.10. Láncolás 8
.
.
.
.
.
.
.
.
.
bájt
Méret’TElem
Cím(a)
Változóa:TElem
mem
óri
a
Adatszerkezetek
Fogalmak, célok, eszközök, a módszer
– A memóriamodell 2. (tömbös) változata:
2011.02.10. Láncolás 9
.
.
.
.
.
.
Méret’TElem
.
.
.
.
.
.
Cím(a)=Index(a)
.
.
.
.
.
.
…
belső láncolás
Változóa:TElem
töm
b(…
:TE
lem
)
Adatszerkezetek
Út az „elmélettől” a „gyakorlat” felé
• A típuskonstrukció paramétere (általában): a
sorozat elemtípusa.
• Láncolt ábrázolás esetén a logikai és fizikai
sorrend eltérő.
• A logikai sorrend megvalósítása:
rákövetkezési mutató.
• A memóriamodell szempontjából együtt
kezelendő az elem és a rákövetkezési mutató,
de önállóan is manipulálandók.
2011.02.10. Láncolás 10
Adatszerkezetek
Megvalósítás „klasszikus” nyelvi környezetben
• Tipikus nyelv: Pascal;
alkalmazott változat: FreePascal
• Korlát: a modul (=unit) nem paraméterezhető
• Típusonként önálló modul
– „alapmodul”: TElem
– a memóriamodell (mutatóval egyesített) modulja(i):
• „valódi memóriacímeken” alapuló – „dinamikus”
• TElem típusú tömbön nyugvó – „statikus”
2011.02.10. Láncolás 11
Adatszerkezetek
Megvalósítás „klasszikus” nyelvi környezetben
– Az „alapmodul”: TElem
2011.02.10. Láncolás 12
Unit uelem;
Interface
Type
TElem=Integer;
…
Implementation
…
Begin
End.
Mindig a feladatban szereplő típusra cserélendő, akár elemi, akár
összetett típus lehet
Bővíthető típus-specifikus műveletekkel (függvényekkel,
operátorokkal…)
Bővíthető típus-specifikus műveletekkel (függvényekkel,
operátorokkal…)
Adatszerkezetek
Megvalósítás „klasszikus” nyelvi környezetben
– A „dinamikus” modell modulja:
2011.02.10. Láncolás 13
Unit dinlanc;
Interface
Uses uelem;
Type Mutato = ^TLancElem;
TLancElem = Record
ertek: TElem;
mut: Mutato;
End;
Const sehova = nil;
Procedure Lefoglal(Var p: Mutato);
Procedure Felszabadit(Var p: Mutato);
Function LancElem(Const p: Mutato): TLancElem;
Procedure LancElemModosit(Const p: Mutato; Const le: TLancElem);
Procedure LancElemErtekModosit(Const p: Mutato; Const e: TElem);
Procedure LancElemMutModosit(Const p: Mutato; Const m: Mutato);
…
Exportált fogalmak
Reprezentáció
Adatszerkezetek
Megvalósítás „klasszikus” nyelvi környezetben
– A „dinamikus” modell modulja (folytatás):
2011.02.10. Láncolás 14
…
Implementation
Procedure Lefoglal(Var p: Mutato);
Begin
new(p);
End;
Procedure Felszabadit(Var p: Mutato);
Begin
dispose(p); p:=sehova;
End;Function LancElem(Const p: Mutato): TLancElem;Begin
LancElem:=p^;End;
Procedure LancElemModosit(Const p: Mutato; Const le: TLancElem);
Begin
p^:=le;
End;
Procedure LancElemErtekModosit(Const p: Mutato; Const e: TElem);
Begin
p^.ertek:=e;
End;
Procedure LancElemMutModosit(Const p: Mutato; Const m: Mutato);
Begin
p^.mut:=m;
End;
…
Implementáció
Inicializálás: üres.
Adatszerkezetek
Megvalósítás „klasszikus” nyelvi környezetben
– A „statikus” modell modulja:
2011.02.10. Láncolás 15
Unit statlanc;
Interface
Uses uelem;
Const MaxMem = 100;
Type Mutato = 0..MaxMem;
TLancElem = Record
ertek: TElem;
mut: Mutato;
End;
TMem = Array [1..MaxMem] of TLancElem;
Const sehova = 0;
Var szfej: Mutato;
mem: TMem;
i: integer;
Procedure Lefoglal(Var p: Mutato);
Procedure Felszabadit(Var p: Mutato);
Function LancElem(Const p: Mutato): TLancElem;
Procedure LancElemModosit(Const p: Mutato; Const le: TLancElem);
Procedure LancElemErtekModosit(Const p: Mutato; Const e: TElem);
Procedure LancElemMutModosit(Const p: Mutato; Const m: Mutato);
…
Exportált fogalmak
Reprezentáció
Adatszerkezetek
Megvalósítás „klasszikus” nyelvi környezetben
– A „statikus” modell modulja (folytatás):
2011.02.10. Láncolás 16
…
Implementation
Procedure Lefoglal(Var p: Mutato);
Begin
p:=szfej;
If p<>sehova then szfej:=mem[szfej].mut;End;
Procedure Felszabadit(Var p: Mutato);
Begin
mem[p].mut:=szfej; szfej:=p; p:=sehova;
End;Function LancElem(Const p: Mutato): TLancElem;Begin
LancElem:=mem[p];End;
Procedure LancElemModosit(Const p: Mutato; Const le: TLancElem);
Begin
mem[p]:=le;
End;
Procedure LancElemErtekModosit(Const p: Mutato; Const e: TElem);
Begin
mem[p].ertek:=e;
End;
Procedure LancElemMutModosit(Const p: Mutato; Const m: Mutato);
Begin
mem[p].mut:=m;
End;
…
Implementáció
Adatszerkezetek
Megvalósítás „klasszikus” nyelvi környezetben
– A „statikus” modell modulja (folytatás):
2011.02.10. Láncolás 17
…
Begin
szfej:=1;
For i:=1 to MaxMem-1 do
Begin
mem[i].mut:=i+1;
End;
mem[MaxMem].mut:=sehova;
End.
Inicializálás.