absztraktadatszerkezetek

7
Absztrakt adatszerkezetek v1.0

Upload: bence-miklos

Post on 16-Dec-2015

217 views

Category:

Documents


2 download

DESCRIPTION

Adatszerkezetek jegyzet

TRANSCRIPT

Absztrakt adatszerkezetek

Absztrakt adatszerkezetek

v1.0

Binris fa

A binris fa adatstruktra legltalnosabb formjban tartalmaz egy kulcs, egy adat s hrom mutat mezt. A mutatk rendre: szl, balfi, jobbfi. (1. bra)

Termszetesen az adott implementcinak megfelelen elhagyhat valamely mez. Pl. ha nincs szksg a szl ismeretre, flsleges bent hagyni az adattpusban. A fentitl teljesen eltr brzols is lehetsges tmbk segtsgvel, ez a megolds azonban rendkvl helypazarl ltalnos binfkat tekintve, mivel gy nagyon sok helyet resen kell hagyni a tmbben.

1. bra Egy binris fa sematikus brja. A kpen nem szerepel sem a kulcs, sem az adatmez.

A binris fa kiterjesztse

Ha pontosan tudjuk, hogy hny legazsra lesz szksgnk egy cscsbl, egyszeren hozzvesznk a struktrnkhoz mg pr mutatt, s meg is van oldva a problma. Ha azonban nem tudunk egy biztos fels korltot adni a legazsok szmra ez a mdszer nem alkalmazhat. Ekkor nyjt segtsget a balfi-jobbtestvr reprezentci. Az adatstruktrnk nem fog vltozni, csak mskpp rtelmezzk. A balfi szerepe nem vltozik, tovbbra is az s egy gyermekre fog mutatni. A jobbfi azonban mr nem leszrmazottat jell, hanem az s testvreit.

Mskpp fogalmazva. Az elz struktrban a hrom mutat az egy feljebb s a kt lejjebb lev elemre mutatott, mg most egy tovbbra is a felette lv egy pedig az egyik alatta lev elemre mutat, mg a harmadik mutat most mr a vele egy szinten lev elemekre mutat.

Az egy cscsbl legaz pontokat gy nem kzvetlenl a cscsbl rhetjk el, hanem elszr a legbaloldalibb elemet tudjuk elrni, majd belle kiindulva szpen egyesvel bejrhatjuk a tbbit.

2. bra A balfi jobbtestvr reprezentci brzolsa. Jl lthat, hogy a szlbl csak egy gyermek rhet el, a tbbihez csak rajta keresztl juthatunk el, azonban minden gyermekbl mutat pointer a szlre.

Sor

A sor adatszerkezet ihletje minden valsznsg szerint a szocjalista brokrcia volt (. A FIFO (First In First Out) elv magvalstsval llunk szemben, ugyanis a sor lnyege, hogy amit elszr bele tettem, azt vehetem ki elsknt.

Megvalstsnak ltezik dinamikus s statikus mdja. Mint mindig, most is az adott feladat dnti el, hogy melyiket rdemes hasznlni.

Ngy mveletet definilunk az adattpuson:

PUSH: betesz egy elemet a sorba

POP: kivesz egy elemet a sorbl

PEEK: visszaadja a kiveend elemet, de bent hagyja a sorban (PreView)

EMPTY: van-e mr elem a sorban

A statikus megoldshoz szksgnk lesz egy tmbre, melyben az adatokat troljuk, valamint kt indexre (eleje, vge). A PUSH eljrs a vge index ltal mutatott helyre szrja be az j elemet, majd megnveli a vge rtkt. Ha elrtk a tmb fels hatrt, jra kezdjk tlteni a sort az elejrl, egszen addig amg a vge el nem ri az elejt, ugyanis ekkor betelt a tmbnk. A POP fggvny az elejn lv rtket adja vissza, majd megnveli (vagy krbefordtja, pont ahogy a PUSH tette) az eleje rtkt, ezltal trlve az elemet a sorbl.

A mveletek megtallhatk a statsor.pas file-ban.

Ha a dinamikus megvalstst vlasztjuk, nem kell trdni a tlcsordulssal (max. elfogy a rendelkezsre ll memria, s kiakad a program, de ezt mr gyis megszokta a kedves felhasznl, ha MS termkeket is hasznl (. Ha igazn szpen akarjuk csinlni, most is figyelni kell, hogy van-e elg mem., de ettl a pldban az egyszersg kedvrt eltekintek.) Most szksgnk lesz egy vltozra, amiben a sor elemszmt troljuk valamint egy eleje s egy vge mutatra. Lncolt listt fogunk hasznlni, hogy el ne felejtsk, hol van a tbbi elem.

A mveletek megtallhatk a dinsor.pas file-ban.

3. bra Az (a) kpen egy valahogy kialakult llapotot lthat. Mr tettnk be s vettnk is ki a sorbl elemeket. A (b) bra azt mutatja, mi trtnik, ha elrjk a tmb fizikai vgt .Szpen kezdi elrl a mr megresedett helyek feltltst. A (c)-n pedig pp egy pop utasts utn vagyunk.

Verem

Szintn kpszer nvvel br adattpus van soron. A FILO (First In Last Out) elvet megvalst szerkezet. Nevhez hven azt tudjuk kivenni belle, amit utoljra beleraktunk. Szintn kt megvalstsa is lehetsges.

A statikus megolds esetn ugyanazokat a htrnyokat kell elszenvednk, mit amiket a sor esetn is tapasztalhattunk, magyarn vagy tl kicsire vlasztjuk a tmb mrett, s gy knnyen elfordulhat tlcsorduls. A msik eshetsg, hogy indokolatlanul nagy tmbt foglalunk le, s gy feleslegesen memrit fecsrelnk el. A tmbn kvl szksgnk lesz mg egy veremindexre (az asm SP-je pl.) mely azt mutatja, hogy ppen hol tartunk a veremben. Mr nincs szksgnk a PEEK mveletre, mivel amit kivettnk, ugyanoda vissza is tudjuk tenni.

A mveletek megtallhatk a staverem.pas file-ban.

Jjjn ht a dinamikus megolds. Nincs ms dolgunk, csak az elbbi tmbt, ugyan gy, mint a sornl, kicserljk egy lncolt listra. Megint nincs szksgnk a verem aljra, csak a tetejre.

A mveletek megtallhatk a dimverem.pas file-ban.

Apr magyarzattal tartozom ezen a ponton, hogy mirt is nem a tanr r programjai vannak itt. A magyarzat egyszer. Tl bonyolultnak talltam ket. Ha valaki most ismerkedik a fenti adatszerkezetekkel, annak feleslegesek az ott szerepl extra megoldsok, aki meg hasznostani tudja ket, az mr rgen bezrta ezt a dokumentumot (.

4. bra Azt hiszem tl sok magyarzni val nincs az brn (ha mgis, akkor mgsem sikerlt elg rtelmesen fogalmaznom, krlek rj egy e-mailt, hogy kijavthassam ezt a hibt). (a) egy kzbls llapot, (b) kt PUSH utn. (c) meg adtunk neki egy POP-ot is.

Prioritsi sor

Ez az adattpus nagyon hasonlt az elzkhz. A mveletei ugyan azok, csak meg van csavarva egy bels mvelettel. A prioritsi sor lnyege, hogy mindig a legnagyobb / legkisebb elemet tudjuk kivenni belle. Ezt gy oldja meg, hogy amikor betesznk egy elemet, azonnal rendezi is a sort vagy lncot, gy ha legkzelebb ki akarunk venni belle, mr a legnagyobb / legkisebb elem van a sor vgn.

Mr tanultunk egy adatszerkezetet, amit most nagyon jl tudunk hasznostani, ez pedig a kupac (ms terminolgiban halom). A mr megrt kupacol eljrst felhasznlva knnyen elkszthet az j adatszerkezet. A POP utastssal a kupac cscst kell kicserlni az utols elemmel, azt levgni a kupacrl, majd a maradkra meghvni a kupacol eljrst. A PUSH, ha lehet, mg ennl is egyszerbb, ott ugyanis nem is cserlgetnk semmit, csak berjuk az utols utni helyre az j elemet, hozzvesszk a kupachoz, majd meghvjuk r a mr sokat emlegetett kupacolt.

A tanr r ltal rt plda megtallhat a prisor.pasban.

type

adattip = ???;

kulcstip = ???;

type

pelem = ^elem;

elem = record

adat : adattip;

kulcs : kulcstip;

szulo : pelem;

balfi : pelem;

jobbfi : pelem;

end;

#define adattip ???

#define kulcstip ???

typedef

struct elem

{

adattip adat;

kulcstip kulcs;

struct elem *szulo;

struct elem *balfi;

struct elem *jobbfi;

} elem;