láncolt adatszerkezetek láncolás megvalósítása...

17
Adatszerkezetek Láncolt adatszerkezetek Pap Gáborné – [email protected] Láncolás

Upload: others

Post on 23-Oct-2019

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

Adatszerkezetek

Adatszerkezetek

Láncolt adatszerkezetek

megvalósítása a

programozásoktatásban

Pap Gáborné – [email protected]

Láncolás

Page 2: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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

Page 3: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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

Page 4: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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

Page 5: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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

Page 6: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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

Page 7: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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

Page 8: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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

Page 9: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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

)

Page 10: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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

Page 11: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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

Page 12: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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…)

Page 13: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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ó

Page 14: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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.

Page 15: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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ó

Page 16: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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ó

Page 17: Láncolt adatszerkezetek Láncolás megvalósítása aadatszerk1l.elte.hu/downloads/eloadas/adatszerk_ea1_lancolas.pdfAdatszerkezetek Adatszerkezetek Láncolt adatszerkezetek megvalósítása

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.