Dinamikus adatszerkezetek

Cím munka: Dinamikus adatszerkezetek. Vermek, sorok. Listákat. bináris fák

Szakterület: Informatika, kibernetika és programozás

Leírás: Amikor létrehoz egy fa az úgynevezett rekurzív eljárás, amely hasonlít a következőket: eljárás Insertvr Root: TTree; X: T; <Дополнительная процедура создающая и инициализирующая новый узел> eljárás CreteNodevr p: TTree; N: T; kezdődik Newp; p ^ .Right: = nil végén; kezdeni, ha Root = nil Aztán CreteNodeRoot X <создаем новый узел дерева> mást Root ^ nem kezdeni, ha vlue X, akkor X InsertRight else if vlue X Ezután InsertLeft X mást <Действия производимые в случае повторного.

Fájl mérete: 178,5 KB

Job letöltve: 82 fő.

istsiplina „alapjai algoritmusok és programozás” Dinamikus adatszerkezetek

Dinamikus adatszerkezetek.

Vermek, sorok. Listákat. Bináris fák.

[4] bináris fa

Dinamikus adatszerkezetek # 150; adatstruktúrát, egy memóriát, amely kiosztott és felszabadította szükség.

A dinamikus adatszerkezetek az alábbiak szerint:

  • létrehozása (zajlanak a dinamikus memória);
  • dolgozni segítségével az index;
  • törlése (Release szerkezet kapcsolt helyzetbe).

Sok probléma használata szükséges adatokat, amelyekből a kialakítása, mérete és összetétele változhat a program végrehajtása során. Benyújtásának a dinamikus információs struktúrák. Ezek a szerkezetek a következők:

  • egyirányú (csak csatlakoztatott) listák;
  • kétirányú (kétszeresen összekapcsolt) listák;
  • gyűrűs listák;
  • verem;
  • december;
  • elhelyezni;
  • bináris fák.

Ezek különböznek abban, ahogyan az egyes csatlakozó elemeket és / vagy megengedhető műveleteket. Dinamikus szerkezet lehet elfoglalni nem folyamatos részét RAM.

Dinamikus szerkezet széles körben használják a hatékonyabb működés az adatokat, amelyek méretét az ismert, különösen a megoldások válogatás feladatok.

Hívás sorban adatstruktúra, amelyre a műveletek a hozzáadása és eltávolítása alkatrészek és elemek, amelyek úgy vannak elrendezve, hogy eltávolításuk fogják elvégezni, pontosan ugyanabban a sorrendben, amelyben történt hozzáadásával.

A sort egy lineáris adatok listája, amely elérhető a „first-in, first-out” (néha rövidítve nevezik FIFO hozzáférési mód).

A mindennapi életben gyakran vannak sorba. Például a sorban a bankban, vagy minden kávézók gyors szolgáltatás egy sorban a fenti értelemben (kivéve azokat az eseteket, amikor egy személy próbál szolgáltatás elromlott!).

Programozottan, egy ilyen szerkezet is megvalósítható különböző módokon. A legegyszerűbb megvalósítása használ egy sor mutató és két. Az egyik mutató meghatározza a helyét a tömb, ahol az elem lesz hozzá, és az úgynevezett végén sor (CC). Tovább mutató a tömb meghatározza a hely, ahol az elem eltávolításra kerül, és az úgynevezett vezetője a sor (UN). A feltétel az elemek jelenlétét a sorban pointerek egyenlőtlenség VH és a CC. A sorrend a sorban van meghatározva, hogy egy elem alsó index írt korábban.

Például tegyük fel, hogy van mind a három elemet, B, C, amelybe került első eleme, akkor # 151; Az elem és az utolsó # 151; elem C. eltávolítása után az elem és az első elem az elem B. Ebben az esetben, a várakozási sor elem, és a fennmaradó a tömbben a helyén, de ez már nem a sorban, mint egy mutatót az elején a VH vonal jelzi a B elem, t. e. a következő eleme a tömb . Ha egy új elem, hogy a sorban D. kerülnek elhelyezésre a sorban vége által meghatározott mutatót a Btk. Az index értéke a Btk meg kell változtatni. Meg kell jegyezni, hogy annak érdekében, hogy távolítsa el egy elemet a sorból C, először el kell távolítani az elemet a B sorban, amelyben senki elem az úgynevezett üres. Ebben az esetben mind az index jelenik meg ugyanazon a helyen. Műveletek sor: Init # 151; Ez létrehoz egy üres hely; üres # 151; igazat ad vissza. Ha a sor üres, és egyébként pedig false; Insert # 151; Ez hozzáad egy elemet, hogy a végén a sorban; eltávolít # 151; eltávolít egy elemet a sorból.

Típus Queue = array [1..maxqueue] az egész;

Eljárás Init (var q: Queue;

var ingyen, First. integer);

Sorok használt programozási sok esetben, például, a szimuláció, a munka tervezését (PERT módszer vagy grafikus GATT), az input-output pufferelés.

Dinamikus adatszerkezetek

Fogjuk nevezni verem adatszerkezetet, amely a műveletek a hozzáadása és eltávolítása alkatrészek és elemek, amelyek úgy vannak elrendezve, hogy eltávolításuk lesz pontosan szemben a sorrendet, amelyben az adagolást végezzük.

Szervezése a verem egy bizonyos értelemben ellentéte sorban, mert az a hozzáférés elve az „utolsó ment, first-out” (ez a módszer a néha LIFO módszer). Képzeljünk el egy köteg lemezek. A fenéklemez e verem használják az utóbbi, és a felső lemez (ami jött létre, hogy az utolsó verem) fogják használni az első. Stacks széles körben használják a rendszer szoftver, beleértve a fordítók és tolmácsok.

Bemutatott verem itt tartalmaz 6 tag, ahol az elemek a kötegben kerültek a következő sorrendben: A, B, C, DEF letölteni ezeket csak rendelni FED C, B, A, azaz, hogy eltávolítsuk a verem elem .. C, először el kell távolítani az elemek E és F. D.

Manipulálni stack és az azok megvalósítását: Init # 151; Ez létrehoz egy üres verem; üres # 151; igazat ad vissza. ha a verem üres és hamis egyébként; lökés # 151; hozzáad egy elemet a verembe; pop # 151; eltávolít egy elemet a veremből. Történelmileg, a két alapvető műveleteket a köteg - a verem, és válassza ki a stack - nevezzük rendre „hogy álljon” és „kiugrik”.

Stack = Array [1..Maxstack] az egész;

Eljárás Init (var s: Stack; var tos egész szám.);

Hogy mi van a tetején a verem, adja meg a pont elég. Annak ellenére, hogy végrehajtja az aritmetikai műveletek egész számokkal csak, könnyen adaptálható lebegőpontos számok, a változó a verem adatok típusát és átalakítja az üzemeltető „div” a osztás lebegőpontos számokat.

2 2 2 * + 2 21 7 / * + 100 5 / + 12 -10 2 * + = 0

List fogják hívni elemek sorozatát kapcsolódó mutatókkal (referenciák).

A tételek listáját kapcsolódnak egymáshoz logikailag. A logikai elemek sorrendjét a listában alkalmazásával kerül meghatározásra mutatók. A logikai sorrendben a lista elemeit a következő eltérhet a fizikai sorrendjét azok helyét a számítógép memóriájában. Minden eleme a lista (gyakran nevezik egy csomópont) két részből áll. Az első rész tartalmazza a közvetlen adatok tartozó elem, és egy információs. A második rész egy mutatót tartalmaz, és egy hivatkozást. Index határozza meg, ahol a lista elem pozícióját társított az elem.

Láncolt listák használnak két fő módja. Először is, amikor létrehozza tömbök, hogy található RAM, és a mérete, amely nem ismert előre. Ha előre tudják, hogy milyen méretű memóriára van szükség, hogy megoldja a feladatot, akkor egy egyszerű tömböt. Ha azonban a tényleges mérete a lista nem tudod, akkor kell használni egy láncolt lista. Másodszor, láncolt listák használják az adatbázist a lemezen. A láncolt lista segítségével gyorsan beszúrni és az adatok törlése elemet nélkül átszervezése az egész lemezt fájlt. Ezen okok miatt a kapcsolt listák széles körben használják az adatbázis-kezelő programok.

Kapcsolódó listák lehetnek egyszeres vagy kettős kötés. Listát egy korlát elemeket tartalmaz, amelyek mindegyike összeköttetésben áll a következő adatok elem. A listában egy kettős kötéssel, minden elem egyaránt kapcsolatot a következő elemet, és az előző elem. Típus egy láncolt lista van kiválasztva a feladattól függően.

Kialakulását egy üres lista. Felállított emlékére kétdimenziós tömböt. A Sp [l. i] eltárolja az elemet a listán is, és az Sp [2, i] # 151; egy mutató a következő listaelem.

const maxspisok = 20;

Típus Spisok = tömb [1..2, l..maxspisok] az egész;

Eljárás NewSpisok (var Sp: Spisok; var US, UN: integer;);

i: = l Maxspisok-1 do Sp [2, i]: = i + 1;

Eljárás InsSpisok (var Sp: Spisok; var USA, ENSZ: integer;

var kód: integer; var x: integer);

var US2: integer;

2. A jobb oldali részfa

3. A gyökér a részfa

Direkt rendelés áthaladás bypass azt az irányt, fentről lefelé, amikor, miután látogatást tett a másik ág továbbra is folyik mélyen a fa, még nem telt el az összes leszármazottai a csomópont elérte. Emiatt a közvetlen parancsot áthaladás gyakran nevezik a felülről lefelé, vagy halad mélységben.

Endian a legtermészetesebb módon felsorolni azokat a facsomópontok formájában beágyazott zárójelben vagy teraszos listán. Ha kizárja tartószerkezeteket és a vessző, akkor a sorrend a csomópontok formájában beágyazott zárójelben megfelel a közvetlen sorrendben a folyosón a fa.

Padok egy lépésben felsorolt, ami bármilyen hierarchikus struktúra, is található a közvetlen sorrendben. A genealógiai szempontból a közvetlen parancsot áthaladását a fa tükrözi dinasztikus sorrendben egymás után, ha a címet át az idősebb utódok.

A szimmetrikus módon a fa keresztben balról jobbra, aminek egy rendezett csomópontok leksigraficheski kulcsokat. Emiatt a szimmetrikus rendjét áthaladás gyakran nevezik leksigraficheskim. A szimmetria a megrendelés tükrözi az a tény, hogy ha egy bináris fát, hogy az tükrözze a függőleges tengelyen, megfordítva a bal és a jobb elemek, a szimmetrikus rendjét átjáró helyébe a szemközti leksigrafichesky.

Ha az eljárás halad a végén, ez megfordul a fa alulról felfelé, amikor az idő látogató bármelyik csomópont összes utódai már elmúlt, és a gyökér a fa van a döntőben. Mivel ezt a funkciót, bypass, eljárást gyakran nevezik vége felfelé viszonyított direkt vagy fordított.

Amikor kiválasztunk egy adott sorrendben halad a kívánt funkcionális feldolgozását minden csomópont után történik a megfelelő bejegyzések számát benne. A megy felülről lefelé, minden egyes csomópont feldolgozása során az első forgalomba bele, egy szimmetrikus sorrendben az áthaladás - a második, és a alulról felfelé bejárás, amikor - a harmadik.

Egy másik lehetőség Bypass - szintek: első kijelző gyökér, akkor - az összes csomópont az első szinten, a számukra - egységek, a második szint, stb

Ez úgy történik, itt ezt az eljárást:

eljárás PrintByLevel (szint: integer; var példány: tömb TTree; számítanak: integer);

var i, NEW_COUNT: integer;

ha száma <> 0, akkor

i: = 0 a pred (count) do

start_x: = GetMaxX div 2;

print_node (Root, 1, 0, GetMaxX div 2, GetMaxX);

A bináris fák

Szervezése adatokat bináris fák gyakran jelentősen csökkenti a keresési időt a kívánt elemet. Keresés elem lineáris adatstruktúrák általában megvalósítható egymást követő keresési az összes elemét a szerkezetben. Fa keresés nem igényel iterációt keresztül minden elemét, így kevesebb időt vesz igénybe. A lépések maximális száma a keresést egy fa egyenlő a fa magasságát, vagyis a a szintek száma a hierarchikus szerkezetű.

A következő modul tartalmazza az alapvető funkciókat dolgozó bináris fák.

Balra, Jobbra: TTree;

eljárás beszúrása (var Root: TTree; X: T);

eljárás Távolítsuk el (var Root: TTree; X: T);

funkció Keresés (Root: TTree; X: T): TTree;

eljárás törlése (Root: TTree);

eljárás LeafsCount (Root: TTree; var k: Egész szám);

funkció GetNode (Root: TTree): T;

eljárás PrintDown (Root: TTree);

eljárás PrintLex (Root: TTree);

eljárás PrintUp (Root: TTree);

eljárás beszúrása (var Root: TTree; X: T);

eljárás CreateNode (var p: TTree; n: T);

Szerelési feldolgozásra szánt hidrokrakkolás vákuum gázolaj a hidrogén jelenlétében egy katalizátorral alyumonikelmolibdenovom újraadás feldolgozási keringetni (kocka frakcionáló oszlop maradék), hogy maximalizálja a termelés a dízel vagy kerozin.