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.

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.