Kulcs transzformációs táblázat

Hasonló dokumentumok
9. előadás. A táblázat. A táblázatról általában, soros, önátrendező, rendezett és kulcstranszformációs táblázat

Táblázatok fontosabb műveletei 1

Egyirányban láncolt lista

Adatszerkezetek 1. előadás

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Algoritmusok és adatszerkezetek gyakorlat 06 Adatszerkezetek

Struktúra nélküli adatszerkezetek

10. előadás Speciális többágú fák

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

A programozás alapjai előadás. [<struktúra változó azonosítók>] ; Dinamikus adatszerkezetek:

Adatszerkezetek 1. Dr. Iványi Péter

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Programozás alapjai II. (7. ea) C++

Adatszerkezetek és algoritmusok

Amortizációs költségelemzés

15. tétel. Adatszerkezetek és algoritmusok vizsga Frissült: január 30.

Adatszerkezetek 2. Dr. Iványi Péter

Adatszerkezetek. Nevezetes algoritmusok (Keresések, rendezések)

Programozási segédlet

Adatszerkezetek I. 6. előadás

Programozás alapjai 9. előadás. Wagner György Általános Informatikai Tanszék

Adatbáziskezelés. Indexek, normalizálás NZS 1

Láncolt listák Témakörök. Lista alapfogalmak

Rendezések. A rendezési probléma: Bemenet: Kimenet: n számot tartalmazó (a 1,a 2,,a n ) sorozat

Algoritmusok és adatszerkezetek 2.

Algoritmusok és adatszerkezetek I. 1. előadás

Algoritmusok és adatszerkezetek gyakorlat 07

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

17. A 2-3 fák és B-fák. 2-3 fák

Algoritmusok és adatszerkezetek I. 5. előadás

Algoritmuselmélet. Hashelés. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Adatszerkezetek Hasító táblák. Dr. Iványi Péter

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Tartalom Keresés és rendezés. Vektoralgoritmusok. 1. fejezet. Keresés adatvektorban. A programozás alapjai I.

Tuesday, March 6, 12. Hasító táblázatok

A lista adatszerkezet A lista elemek egymásutániságát jelenti. Fajtái: statikus, dinamikus lista.

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Dinamikus adatszerkezetek. Dinamikus adatszerkezetek. Önhivatkozó struktúrák. Önhivatkozó struktúrák

Önszervező bináris keresőfák

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

Adatbázis és szoftverfejlesztés elmélet. Programozási tételek

Keresés és rendezés. A programozás alapjai I. Hálózati Rendszerek és Szolgáltatások Tanszék Farkas Balázs, Fiala Péter, Vitéz András, Zsóka Zoltán

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Láncolt listák. Egyszerű, rendezett és speciális láncolt listák. Programozás II. előadás. Szénási Sándor

5. SOR. Üres: S Sorba: S E S Sorból: S S E Első: S E

adatszerkezetek 2007/7/6 15:51 page 27 #23

Felvételi tematika INFORMATIKA

Láncolt Listák. Adat1 Adat2 Adat3 ø. Adat1 Adat2 ø Adat3

Fogalmak: Adatbázis Tábla Adatbázis sorai: Adatbázis oszlopai azonosító mező, egyedi kulcs Lekérdezések Jelentés Adattípusok: Szöveg Feljegyzés Szám

6. LISTÁK ábra. A lista absztrakt adatszerkezet (ADS)

Verem Verem mutató 01

Pásztor Attila. Algoritmizálás és programozás tankönyv az emeltszintű érettségihez

Egyszerű programozási tételek

Buborékrendezés: Hanoi Tornyai: Asszimptótikus fv.ek: Láncolt ábrázolás: For ciklussal:

file:///d:/okt/ad/jegyzet/ad1/b+fa.html

Diszkrét matematika II., 8. előadás. Vektorterek

Hasító táblázatok. Hasító függvények, kulcsütközés kezelése. Programozás II. előadás. Szénási Sándor

ÁTVÁLTÁSOK SZÁMRENDSZEREK KÖZÖTT, SZÁMÁBRÁZOLÁS, BOOLE-ALGEBRA

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Adatszerkezetek II. 10. előadás

Bevezetés a programozásba. 5. Előadás: Tömbök

Alkalmazott modul: Programozás

GRÁFOK ÉS ALGORITMUSOK ELMÉLETE VIZSGAKÉRDÉSEK Matematika BSc Elemző szakirány II. év 1. félév

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj. Nagy

LINEÁRIS PROGRAMOZÁSI FELADATOK MEGOLDÁSA SZIMPLEX MÓDSZERREL

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

7. Számelmélet. 1. Lehet-e négyzetszám az a pozitív egész szám, amelynek tízes számrendszerbeli alakjában 510 darab 1-es és valahány 0 szerepel?

Algoritmuselmélet 2. előadás

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Adatszerkezetek 7a. Dr. IványiPéter

Adatbáziskezelés alapjai. jegyzet

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

Algoritmuselmélet. 2-3 fák. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 8.

Rendezések. Összehasonlító rendezések

ALAPOK. 0 és 255 közé eső számértékek tárolására. Számértékek, például távolságok, pontszámok, darabszámok.

Adatszerkezetek és algoritmusok

Kiegészítő részelőadás 1. Az algoritmusok hatékonyságának mérése

SZÁMRENDSZEREK KÉSZÍTETTE: JURÁNYINÉ BESENYEI GABRIELLA

Elemi adatszerkezetek

HHF0CX. k darab halmaz sorbarendezésének a lehetősége k! Így adódik az alábbi képlet:

Programozás alapjai. 8. előadás

Számláló rendezés. Példa

Adatbázismodellek. 1. ábra Hierarchikus modell

Hatékonyság 1. előadás

Érdekes informatika feladatok

Harmadik gyakorlat. Számrendszerek

PROGRAMOZÁSI TÉTELEK

Bevezetés az informatikába gyakorló feladatok Utoljára módosítva:

4. Fuzzy relációk. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI

Generikus osztályok, gyűjtemények és algoritmusok

A továbbiakban Y = {0, 1}, azaz minden szóhoz egy bináris sorozatot rendelünk

Algoritmusok és adatszerkezetek I. 4. előadás

ELEMI PROGRAMOZÁSI TÉTELEK

Rekurzió. Dr. Iványi Péter

1. Halmazok, számhalmazok, alapműveletek

OSZTHATÓSÁG. Osztók és többszörösök : a 3 többszörösei : a 4 többszörösei Ahol mindkét jel megtalálható a 12 többszöröseit találjuk.

22. GRÁFOK ÁBRÁZOLÁSA

Programozás I. Egyszerű programozási tételek. Sergyán Szabolcs

Átírás:

Kulcs transzformációs táblázat Ennek a táblázatnak az ábrázolása folytonos. Soros táblázat esetén egy elem helyét a beszúrás időpontja, önátrendező táblázatnál a feldolgozás gyakorisága, rendezett táblázatnál a kulcs értéke szabja meg. Kulcstranszformációs táblázat esetén egy elem helyét a k kulcs valamilyen f(k)-val jelölt függvénye alapján határozhatjuk meg. Ezt a függvényt hívjuk hasító vagy hash függvénynek. Az eljárást magát (elem kulcsához meghatározzuk az f(k) értéket) hashingnak vagy randomizálásnak vagy kulcstranszformációnak vagy hasításnak nevezzük. 1

Kulcstranszformációs módszerek A kulcstranszformációs módszerek azt mondják meg, hogy a hash-függvény milyen algoritmussal helyezi le a kulcsot a tartománybeli címre. Különböző módszerek a kulcsok egyes típusaira: Szöveges kulcsok: a hash-függvények veszik a kulcsot alkotó karakterlánc belső kódját, az így kapott numerikus értékeken pedig valamilyen transzformációt hajtanak végre. Numerikus kulcsok 2

Numerikus kulcsok Feltételezzük, hogy a kulcstranszformációs táblázat kulcsinak száma n. Ennél általában nagyságrendekkel (100x, 1000x, ) nagyobb az elméletben előfordulható kulcsok száma. Prímszámmal való osztás módszere: A HASH függvény minden új KULCS értéket eloszt azon p prímszámmal, amely a legnagyobb, az n-nél kisebb prímek között. Az elem helyét (sorszámot) a maradék fogja adni. Ebben az esetben 0 és p-1 közötti egész szám lesz. (Ha a tárhelyeket 1-től sorszámozzuk, ezt az értéket még 1-el megnöveljük) Ez a módszer elég jól véletlenszerűsít (egyenletesít) és egyszerű. 3

Numerikus kulcsok Szorzás módszere: Többféleképpen is megvalósítható. Az eredeti kulcsot minden esetben szoroznunk kell. Elképzelhető, hogy egy prímszámmal, vagy önmagával, vagy a kulcsot valamely két számjegye között félbevágjuk, és a két felét összeszorozzuk. A megkapott szorzatnak vesszük annyi számjegyét (k), ahány jegyű n, és az ebből képzett számot tekintjük az elem táblázatbeli sorszámának. Általában a szorzat középső k db számjegye szokott lenni a Hashfüggvény értéke. Ez a módszer is elég jól véletlenszerűsít. (Viszont nem annyira egyszerű.) 4

Numerikus kulcsok Helyiérték kiválasztásos módszer: A kapott numerikus kulcs számjegyei közül véletlenszerűen kiválasztunk k db helyiértéket, és minden kulcsból az ezen a helyiértékeken szereplő mennyiségeket kiválasztva kapjuk az elem sorszámát. Bázistranszformáció módszere: Ebben az esetben a kapott kulcsot úgy tekintjük, mint egy tizesnél magasabb alapú szám rendszerben felírt számot. Ezt a számot áttranszformáljuk (visszatranszformáljuk) tizes számrendszerbeli számmá, és az így kapott számnak k db számjegyéből képzett számot tekintjük az elem sorszámaként. 5

Kulcstranszformációs módszerek Ha sikerült Hash-függvényt választanunk, akkor a táblázat létrehozásakor, ill. bővítése idején felmerülhet a következő probléma: A Hash-függvény időnként több érkező elemhez, ugyanazt a tárcímet (sorszámot) rendeli hozzá. Ekkor szinonímák előfordulásáról, ill. túlcsordulásról beszélünk. Mit tegyünk ilyenkor? Három módszer van a szinonima kezelésre: 1. A nyílt címzés módszere 2. Láncolással történő nyílt címzés módszere 3. Független túlcsordulási lista alkalmazása 6

A nyílt címzés módszere A nem túlcsordult és a túlcsordult elemeket ugyanazon tárhely sorozatban kell elhelyezni. (Folytonos tárolás) Ha valahol túlcsordulást tapasztalunk, akkor az adott helyről elindulunk a tárhelyek vége felé, és keressük az első üres tárhelyet, ahová bepakoljuk a túlcsordult a elemet. Amennyiben elérjük a tár végét akkor az üres hely keresését az 1. tárhelytől kezdve folytatjuk tovább. 7

A nyílt címzés módszere Egy adatelemet kulcs alapján visszakeresni ezután a Hash-függvény segítségével úgy lehet, hogy ha az adott kulcsú elem nincs a Hash-függvény által adott címen (tárhelyen), akkor egy teljes keresést kell végrehajtani az 1. üres helyig, vagy amíg meg nem találjuk a keresett elemet. Ha a keresés közben elérjük a tartomány végét (utolsó tárhelyét), akkor a keresést a tárhely elején folytatjuk tovább. A keresést megállíthatja még az is, hogy anélkül érünk vissza a kiinduló helyzethez, hogy a keresett elemet megtaláltuk volna. 8

A nyílt címzés módszere A kulcstranszformációs táblázatnál nyílt címzés módszerével problémát jelenthet, hogy egy túlcsorduló rekord túlcsordulttá tehet egyébként nem túlcsorduló elemeket is. A probléma megoldása az lehet, ha az elemeket két lépesben helyezzük el a táblázatban. Első körben azokat, amelyek szabályosan a helyükre pakolhatók, majd ezek után a kimaradókat (ezek mindegyike túlcsordult lesz majd). 9

A nyílt címzés módszere Nyílt címzés esetén egy elem a tárhelyről fizikailag semmiképpen sem törölhető, ugyanis a helyén maradó üres tárhely megállítaná a keresést. Emiatt az ilyen kulcstranszformációs táblázatban egy tárhelynek három állapota lehet attól függően, hogy érvényes elemet, vagy (logikailag) törölt elemet tartalmaz, vagy egyszerűen üres. Új elem beszúrásakor az új elemet üres vagy legalább törölt helyre szúrjuk be. 10

Láncolással történő nyílt címzés módszere A nyílt címzéssel történő szinoníma kezelés hátránya: túlcsordult elemek esetén az elem elsődleges helyén (ahová a Hash-függvény leképezné) nincs semmi információ az elem tényleges helyére vonatkozóan. Ezt javítja egy másik szinonimakezelési technika, a láncolással történő nyílt címzés módszere. A tárhely eddigi két oszlopa (kulcs és adat) mellé fel kell venni egy harmadikat. A mutató oszlopban található értékek megadják az adott helyről, vele azonos kulccsal először túlcsorduló elem címét (sorszámát). Ezen értékek segítségével a szinonim elemeket egy-egy láncban fűzzük fel. Amennyiben a mutató mezőben található érték NIL vagy nulla értékű, akkor az adott tárhelyről (ugyanazon kulccsal) nem történt túlcsordulás. 11

Láncolással történő nyílt címzés módszere A szinonimák a láncon keresztül gyorsan elérhetők, viszont nő a tárfoglalási és a karbantartási idő. Nyílt címzés, illetve láncolással történő nyílt címzés módszere esetén az előfordulhat, hogy a túlcsordult elemek a túlcsordulás helyéhez viszonylag közel legyenek, az elemek tárolásához várhatóan szükséges tárhelynél kb. 10%-kal több tárhelyet szokás lefoglalni. Ez tovább növeli a módszerek tárhelyigényét. 12

Független túlcsordulási lista alkalmazása Ennél a módszernél az azonos helyről túlcsordult rekordokat külön listákban, és nem a folytonos tárban helyezzük el. Ezúttal a mutató oszlopban található értékek egy irányban láncolt listák fejmutatóiként funkcionálnak. (Amúgy hasonlít az előzőre.) Az így elkészített táblázatba a nem túlcsorduló elemek kerülnek, a szinonim elemek mindegyike pedig a Hashfüggvény által jelzett helyről kiinduló egy irányban láncolt listába kerülnek. 13

Kulcstranszformációs táblázatokon végzehető műveletek Asszociatív adatszerkezet, mert ilyen táblázatnál az asszociatív csoportosítást a szinonimák adják. Szinonimák létezése esetén ezek a csoportok nem 1 elemű részhalmazokat fognak alkotni. Létrehozás: Szinonimakezelési technika választása, Hash-függvény választás (szempontjai már voltak). A gyakorlatban előforduló kulcsok számára adni kell valamilyen becslést, majd tárhelyet kell foglalni a leendő elemek számára (1., 2.: +10% ; 3: annyi, amennyi), és végül az elemek elhelyezése a tárban. 14

Kulcstranszformációs táblázatokon végzehető műveletek Bővítés: Kulcsok alapján a Hash-függvény segétségével, és az előzőekben említettek függvényébe vételével történik. Törlés: Logikai törlés: Minden módszer esetén működik. Fizikai törlés: A harmadik módszernél a független túlcsrdulási listákban elhelyezett elemek esetében lehetséges. Csere: Kulcs alapján megoldható. Értékeit lehet cserélni bármikor. A kulcs cseréje törléssel és bővítéssel megoldható. 15

Kulcstranszformációs táblázatokon végzehető műveletek Rendezés: Nincs (nem értelmezett) Elérés: Kvázi közvetlen, hiszen a Hash-függvény a közvetlen elérést szolgálja. A szinonímákat keresni kell. Keresés: A szinonímakezelési módszertől függ. Feldolgozás: Alapja a Hash-függvény, illetve rajta keresztül a kvázi közvetlen elérés. A táblázat, mint adatszerkezet nagyon sok különböző jellegű problémánál előkerül. Sok operációs rendszer adatbázis kezelő rendszere kezeli a táblázatokat. Igazi jelentőségük az állományok kezelésénél van. 16

Lista adatszerkezet Szekvenciális adatszerkezetek Minden elem két másik elemmel van kapcsolatban, kivéve az első és az utolsó elemet. Lista, mint absztrakt adatszerkezet. Dinamikus adatszerkezet Van első és utolsó eleme - kivéve az üres listát. Minden elemnek van rákövetkezője - kivéve az utolsó elemet. És minden elemnek van megelőzője - kivéve az első elemet. Lista jelölése: Q=[x 1,x 2,,x n ] ahol az x-szel jelölt dolgok a lista elemei. 17

Lista adatszerkezet Az üres listának egy eleme sincs: [ ]. A lista első elemét szokás a lista fejének is nevezni. Azt a listát amelyik úgy keletkezik, hogy az eredeti listából elhagyjuk a fejet (első elemet), a lista farkának hívjuk. Fej: [x 1 ] Farok: [x 2,,x n ] Vége: [x n ] A lista mérete alatt az elemeinek a számát értjük. Méret jelölése: Q (=n). Ezek speciális lista fogalmak voltak. 18

Lista műveletei Műveletei: (alap lista műveletek). 1. Hozzáférés (elérés): Minden elem a többitől függetlenül, közvetlenül elérhető. Q[i]=x i. Az elemek elérése sorszámhivatkozással történik. Ha nem létező sorszámra hivatkozunk, akkor a hozzáférés az üres listát adja. 2. Allista képzés: Q[i..j]=[x i,x i+1,,x j-1,x j ] Az eredeti listának két megadott sorszámú eleme közötti részlistát adja eredményül. Ha az i sorszám értéke<1, akkor az allistaképzés az első elemtől indul, ha a j értéke >n, akkor az n-edik elmig tart. 3. Összefűzés (konkatenáció, egyesítés): R=[y 1,y 2,,y m ] Q&R=[x 1,x 2,,x n, y 1,y 2,,y m ] 19

Lista, mint absztrakt adatszerkezet műveletei Ezek a speciális lista műveletek fontosak, mert az összes többi műveletetet ennek a háromnak a segítségével lehet definiálni: Létrehozás: Létrehozákor explicit módon megadjuk a lista elemeit, amelyek a felsorolás sorrendje alapján kapják sorszámaikat. Bővítés: A listát bárhol bővíthetjük. A bővítést részlista képzéssel és konkatenációval realizálhatjuk. Ha a listát a k-adik elem után akarom bővíteni egy új elemmel, azt úgy tehetem meg: Q[1..k]&[elem] &Q[k+1..n]. 20

Lista, mint absztrakt adatszerkezet műveletei Törlés: Fizikai törlést jelent. K-adik elem törlése: Két allista képzéssel és az eredményük konkatenálásával tehetjük meg: Q[1..k-1]&Q[k+1..n] Csere: Értelmezett: Allista képzésekkel és konkatenációval realizálható k-adik elem cseréje: Q[1..k-1]&[x] &Q[k+1..n] A két részlista közé beillesztjük az új elemet, majd a részeket összefüzzük. 21

Lista, mint absztrakt adatszerkezet műveletei Rendezés: Minden értelmezett, akármelyik használható. Keresés: Teljes keresés, ill. rendezett listánál lineáris vagy bináris (ez ábrázolás függő is). Feldolgozás: Lista elemeit dolgozza fel. A speciális lista műveletekkel. 22

Lista ábrázolása Ábrázolás: Mindkét módszerrel (folytonos, szétszórt) szokásos. Szétszórt ábrázolási módok közül a két irányban láncolt lista a legpraktikusabb. A lista alapvető szerepe olyan problémáknál, ahol az elemek között valamilyen nem értékeken, hanem például időbeliségen alapuló sorrend van, illetve ahol az elemek elérését mindig közvetlenül szeretnénk megoldani. 23

Speciális Listák Ezeknél többnyire csak az alábbi hat speciális múvelet némelyike használatos. Ezek a lista első és utolsó elemének kezelésére szolgálnak. 1. ACCES HEAD: Q[1] 2. PUSH: Q [x] &Q 3. POP: Q[1] és Q Q[2..n] 4. ACCESS END: Q[n] 5. INJECT: Q Q &[x] 6. EJECT: Q[n] és Q Q[1..n-1] 24

Speciális Listák Verem: Egy speciális lista adatszerkezet. Az előbbi műveletek közül az 1. ACCES HEAD 2. PUSH 3. POP műveleteket lehet értelmezni rajta. A verem alján van a legkisebb sorszámú elem, feljebb egyre nagyobb sorszámúak. A vermet LIFO (last in first out) adatszerkezetnek is szokás nevezni. Az utolsónak érkezett fog először távozni. 25

Speciális Listák: Verem Létrehozáskor mindig az üres vermet hozzuk létre. Bővítés: A Push művelet alkalmazásával. Az elemeket érkezésük sorrendjében egymás felé pakoljuk a veremben. Feldolgozáskor csak a legfelső elem hozzáférhető ACCESSHEAD POP (Egyben fizikai törlés is) Törlés: csak fizikai, csak a legutolső elemet lehet. Rendezés: nem értelmezett; Keresés: nem értelmezett; Elérés: Csak a legutóljára elhelyezett elemet lehet. 26

Speciális Listák: Verem Ábrázolás: Mindkét módon Folytonos reprezentáció esetén van egy verem mutató, amely jelzi, hogy aktulisan hány elem van a veremben. Egyúttal ez a verem mutató a verem tetejét is címzi. A verem üres, ha nincs egy eleme sem, a verem mutató értéke ilyenkor nulla. A verem tele van, ha nincs több hely a veremben, veremmutató értéke, vm=n. PUSH: Ha a veremben még van hely, az új elemet az vm+1-edik helyre tesszük, majd a veremmutató értéke egyel növeljük. POP: Ha a verem nem üres, a veremmutató által mutatott helyről vesszük ki az elemet, majd a verem mutató értékét eggyel csökkentjük. 27

Speciális Listák: Verem Szétszórt reprezentáció Egy irányban láncolt listát használhatunk. PUSH: Egy irányban láncolt lista első eleme előtti bővítéssel Ha a verem üres, a fejmutató értéke NIL. A verem implementációjakor ezeket el kell rejteni, de azért tudnunk kell, hogy üres-e a verem, vagy esetleg tele van-e. A verem alapvető fontosságú az olyan problémák kezelésénél, ahol az elemeket felbukkanási sorrendjük fordítottjában kell feldolgozni. A tömb mellett a másik legalapvetőbb adatszerkezet. Programozási nyelveknél az alprogram hívási láncok kezelésénél van alapvető szerepe. 28

Speciális Listák: Sor A sor adatszerkezet olyan speciális lista, amelyet a műveletei definiálnak. 1. ACCESS HEAD 3. POP itt GET-nek nevezzük 5. INJECT itt PUT-nak nevezzük Kiegészítésként kiemeljük az első és az utolsó elemet FIFO adatszerkezetnek is nevezik (First In First Out) Ennek megfelelően a sorba az elemek az érkezésnek megfelelő sorrendben kerülnek, az újak mindig a sor végére kerülnek Feldolgozni a sor első elemét szokás, ami egyben fizikai törlést is jelent 29

Speciális Listák: Sor Sorba történő írás művelete, PUT művelet, az olvasás (fizikai törlés) művelete a GET művelet. Logikai törlés nincs Rendezés nincs értelmezve Keresés nincs értelmezve Elérés: Csak az első elemet tudjuk elérni Feldolgozás a fejmutató által hivatkozott elemet Bővítés: az utolsó mutató után a mutatók átállításával 30

Speciális Listák: Sor Ábrázolás Szétszórt: egyirányban láncolt listával, két segédmutatóval (fej és vége mutató) Folytonos: Folytonos reprezentációk mindegyike egy vektorban tárolja a sor elemeit Fontos a sor elejének és végének jelzése 1. Fix kezdetű sor 2. Vándorló sor 3. Ciklikus sor 4. Két végű sor 5. Prioritásos sor 31

Speciális Listák: Sor Fix kezdetű sor A sor első eleme a vektor első tárhelyén helyezkedik el, az utolsó elem mutatója v. Üres a sor: v=0 Tele van a sor: v=n Új elem beírása: v+1-edik helyre kerül, majd v eggyel megnő. Elem törlése: Nehézkes, több adatmozgatás, a sor első elemét dolgozzuk fel. A sor eleje pedig mindig ugyanott kell, hogy legyen, ezért törlés után a többi elemet rámozgatjuk az előző pozícióra. V értéke eggyel csökken. 32

Speciális Listák: Sor Vándorló sor A sokszori adatmozgatást küszöböli ki Elvetjük azt a megszorítást, hogy az első elem az első helyen álljon. Megengedjük, hogy az első elem helye vándoroljon. Ehhez segédmutatók, e és a szokásos v szükséges Üres a sor: e=v=0 Tele a sor: e=1, v=n Új elem bekerülése: A v mutatót követő pozícióra kerül be, ha a sor nincsen tele. Bővítéskorkor előfordulhat, hogy a v az utolsón áll, de az e vándorlása miatt a sor nincs tele: ilyenkor (csak ilyenkor), adatmozgatást hajtunk végre: A legelső pozícióig toljuk a sort előre. 33

Speciális Listák: Sor Ciklikus sor: Az adatmozgatást eddig még nem küszöböltük ki teljesen. A ciklikus sorban az elejét és végét jelző mutató vándorlását a határokon keresztül is megengedjük: Üres a sor: e=v=0 Tele a sor: e=1 és v=n, vagy v+1=e. Új elem: szabályokat figyelembe véve, ha a sor nincs tele, akkor a v+1-edik helyre kerül, (esetleg v visszaugrik az elejére). Törlés: e mutató által mutatott elem, majd e=e+1. (Esetleg e visszaugrik az elejére.) 34