Structuri de date dinamice

Structuri de date dinamice

Dacă înainte de a începe lucrul cu datele pe care le este imposibil să se determine cât de multă memorie este necesară pentru stocare, memorie ar trebui să fie alocate în timpul rulării, în conformitate cu unități individuale. Blocurile de a comunica între ele prin indicii. Acest mod de organizare a structurii de date nazyvaetsyadinamicheskoy de date. pentru că se află în memoria dinamică și dimensiunea sa este schimbat în timpul execuției programului.

A structurilor dinamice în programele folosite cel mai frecvent liste liniare, stive, cozi și copaci binare. Acestea sunt moduri diferite de a lega elementele individuale și operațiunile admise. Structura dinamică, spre deosebire de matrice sau înregistrarea poate să ocupe porțiuni neînvecinate de RAM.

Structura dinamică este utilizat pe scară largă pentru funcționarea mai eficientă cu dimensiunea datelor care este cunoscut, în special pentru soluții de sortare sarcini.

Elementul oricărei structuri dinamice constă din două părți: informația, precum și pentru stocarea unei structuri și indicii generate, furnizând elemente de legătură unele cu altele.

element de structură dinamică este descrisă ca o înregistrare, de exemplu:

NOTĂ

Luați în considerare modul de a lucra cu structurile de bază dinamice.

liste liniare

Într-o listă liniară, fiecare element este asociat cu următorul, și probabil cu precedentul. În primul caz, lista este numit pur și simplu conectat în al doilea - conectat de două ori. În cazul în care ultimul element pentru a lega pointer la primul inel lista de voință.

Fiecare intrare conține o cheie care identifică acest element. Cheia este de obicei, fie un număr întreg sau un șir de caractere și este o parte a câmpului de date. Ca o cheie pentru procesul de lucru cu lista poate servi diferite părți ale câmpului de date. Cheile de diferite elemente ale listei sunt aceleași.

Următoarele operații pot fi efectuate pe listă:

  • formarea inițială a listei (crearea primului element);
  • adăugarea unui element la sfârșitul listei;
  • elementul cu o cheie de lectură predeterminată;
  • inserarea unui element în lista specificat locul (fie înainte, fie după elementul cheie specificat);
  • îndepărtarea elementului cu cheia dată;
  • ordonarea listei de chei.


Pentru a lucra cu lista programului pe care doriți să definiți un pointer la începutul său. Pentru a face mai ușor pentru a adăuga noi elemente la sfârșitul listei, este de asemenea posibil să aibă un pointer la sfârșitul listei.

Luați în considerare un program care generează o listă individual legată de cinci elemente care cuprind numere și reprezentare text și apoi efectuează introducerea și înlăturarea elementului specificat. Numărul folosit ca tasta.

elementafind funcția de căutare returnează true. Dacă elementul dorit este găsit, și false în caz contrar. Din cauza faptului de a găsi un element este insuficientă, funcția returnează, de asemenea, prin lista parametrilor de două indicii: element de găsit p și p precedent. Ultima este necesară atunci când un element este șters din listă.

O stivă este o structură dinamică simplă. Adăugarea elementelor stivei și probei sunt efectuate de la un capăt, numit vârful stivei. Alte operațiuni stiva nu sunt definite. Atunci când elementul de probă este scos din stivă.

Ei spun că stiva implementează principiul serviciului LIFO (ultimul în - mai întâi, ultimul în - primul ieșit). Apropo, segmentul de stiva este numit astfel deoarece memoria pentru variabilele locale sunt alocate pe baza LIFO. Stivele sunt utilizate pe scară largă în software-ul de sistem, compilatoare, diferite de algoritmi recursive.

Coadă - o structură de date dinamice, adaugand elemente care se efectuează într-un capăt și o mostră - de la celălalt capăt. Alte tranzacții cu coada nu este definită. Atunci când unitatea de probă este exclus din coadă. Se spune că toate principiul FIFO serviciu pune în aplicare (în primul - mai întâi, primul venit - primul servit). În programarea linie foarte larg utilizate - de exemplu, atunci când modelare, de intrare-ieșire tamponată sau probleme de programare în sistemul de operare.

arbori binari

Un exemplu de arbore binar este prezentat în Fig. 5.9 (rădăcină de obicei, descris mai sus). Nodul nu are nici un subarbore, numit o frunză. Unități de ieșire sunt numite strămoși. de intrare - descendenți. Înălțimea arborelui este determinată de numărul de niveluri la care sunt amplasate noduri.

În cazul în care arborele este organizat în așa fel încât fiecare nod toate cheile subarborele sale stânga este mai mică decât această cheie nod și toate cheile subarborele sale dreapta - mai mult, este numit un copac de căutare. Aceleași chei nu sunt permise. În arborele de căutare pot fi găsite pe un element-cheie, se deplasează de la rădăcină și se deplasează spre subarborele stânga sau la dreapta, în funcție de valorile-cheie în fiecare nod. Căutarea este mult mai eficient de căutare prin lista ca timpul de căutare este determinată de înălțimea copacului, și este proporțională cu logaritmul binar al numărului de noduri.

O structură de date arbore este recursiv, deoarece fiecare subarbore, de asemenea, un copac. Acțiuni astfel de structuri sleeker descrisă mai sus, folosind algoritmi recursive. De exemplu, o procedura de bypass toate nodurile din arborele poate fi descrisă, în general, după cum urmează:

Funcția de tabelă vă permite să obțineți o secvență de chei, sortate în ordine crescătoare:

Astfel, arborii de căutare pot fi utilizate pentru sortarea valorilor. Traversarea nodurile de copac nu sunt eliminate.

operațiunile sunt definite pentru un arbore binar:

  • comutare nod din arbore;
  • căutare copac;
  • elementul cu o cheie de lectură predeterminată;
  • traversarea;