Structura de date este o colectie de date inzestrata cu informatii structurale care permit identificarea si selectia componentelor.
Componentele unei structuri de date pot fi identificate si selectate fie prin numele, fie prin intermediul relatiilor structurale. Cea mai simpla relatie structurala este pozitia fiecarei componente in cadrul structurii.
Asupra unei structuri de date se pot aplica mai multe tipuri de operatii :vizualizarea elementelor structurii sub diferite forme, actualizarea(adaugarea, modificarea sau stergerea unei componente), imbogatirea structurala(prin adaugarea unor informatii de legatura) sortare(aranjarea componentelor intr-o anumita ordine stabilita de un anumit criteriu de ordonare.
Din punct de vedere al continutului, structurile pot fi:
-omogene(toate componentele structurii sunt de acelasi tip)
-neomogene(componentele structurii sunt de tipuri diferite)
in functie de modul in care sunt memorate structurile de date se impart in doua mari categorii:
-Structuri interne, sunt create in memoria interna RAM a sistemului, si au un caracter temporar, datorita faptului ca memoria interna este volatila.
-Structuri externe, sunt depozitate pe un suport de memorie externa (hard-disk.floppy-disk), avand astfel un caracter permanent.
TABLOURI
Un sir de elemente de acelasi tip, in care conteaza ordinea elementelor, se numeste vector sau tablou unidimensional.
Un tablou(array) este o structura formata dintr-un numar fixat de componente de acelasi tip, numit tip de baza. Numarul de componente este determinat de numarul de valori ale indicilor, care sunt obligatoriu tipuri ordinale. Pozitia unui element se mai numeste si indicele sau rangul elementului, iar elementele se mai numesc si componente ale vectorului. Sintaxa declararii tipului tablou este :
type_nume=array[tip_ordinal1, tip_ordinaln] of tip_oarecare
unde:
n-reprezinta dimensiunea tabloului
tip_ordinal1, tip_ordinaln reprezinta tipul indicilor tabloului
tip_oarecare reprezinta tipul componentelor tabloului
!Obervatii.In cazul in care tip_ordinal este unul din tipurile intregi,este obligatoriu sa folosim subdomeniile lui
Exemplu: type vector=array[1..100] of integer;
var v:vector;
variabila v este un tablou de dimensiune 1 cu 100 componente intregi identificate prin indici din subdomeniul 1..100.
Aici tipul ordinal este subdomeniu al tipului integer, iar tipul oarecare este ineger. Componentele unui tablou sunt memorate pe zone de memorii consecutive. Adresarea unei componente a tabloului se face prin indice (o valoare a tipului ordinal) care se specifica dupa numele tabloului, intre paranteze drepte.
Tipul tablou array[tip_ordinal] of tip poate ramane si anonim. Astfel, putem scrie ceva de genul type vector=array si var x:vector pe scurt prin var x:array Adica, tipul tablou ramane anonim, nu trebuie neaparat sa primeasca un nume(aici cel de vector).
tip_ordinal si tip pot fi atat tipuri anonime, cat si identifictori de tip.
Limbajul Turbo Pascal nu ne permite sa declaram o variabila de tip array cu un numar variabil de componente. De multe ori nu stim cate componente vor fi necesare pentru o anumita rulare a programului. Orice problema in care se lucreaza cu variabila de tip array si in care se cere prelucrare a n componente constituie un exemplu in acest sens .In acest caz ideea este sa rezervam un numar maxim de componente, atat cat este necesar pentru rulare atunci cand n este maxim. la fiecare rulare a programului se cere numarul de componente. De cele mai multe ori o parte dintre cele rezervate raman neutilizate.
Prin declararea unui vector vom intelege numarul maxim de elementele acestuia. Numarul elementelor efective folosite, care difera de la o executie la alta se numeste numar real (efectiv de elemente).
"Vizualizarea " tuturor elementelor pe rand si prelucrare acestora se numeste parcurgere. Parcurgerea intr-un ciclu pozitiile elementelor din vector i=1,2,3, ,n si pentru fiecare valoare a lui i, "vizitam " si prelucram elementul v[i], adica elementul aflat pe pozitia i: secventa de program
for i:=1 to n d0
urmarirea ciclului pas cu pas
Pasul 1:i:=1,prelucreza v[1]
Pasul 2:i:=2,prelucreza v[2]
-------- ----- ------ ----
Pasul n:i:=n,prelucreza v[n]
OPERATII CU VECTORI
O variabila de tip tablou nu poate fi citita sau scrisa in intregime. In Turbo Pascal7.0 Se pot face atribuiri intre variabile de acelasi tablou. Dar, e preferabil sa se lucreze pe componente .Cu componentele unui tablou Se pot face toate operatiile ce Se pot face cu orice variabila de acel tip (afisare, citire, atribuire etc)
1.citirea unui vector
Aceasta inseamna citirea numarului n de componente, intr-un ciclu for, de pilda. De fapt avem de citit componenta numarului i, cu i de la 1 la n. Deci putem scrie:
for i:= 1 to n do
begin
write( 'dati x[ ',x, ']= ');
readln(x[i]);
end;
2.Srierea unui vector
cand trebuie sa afisam vectorul, adica toate componentele sale efective numarul acestora este cunoscut. Afisarea se realizeaza ciclic si poate fi astfel:
-fiecare element pe un rand(folosita mai ales cand avem vectori si siruri de caractere)
for i:1to n do
writeln(x[i]);
-toate elementele pe acelasi rand, despartite de virgula si/sau spatii(in cazul valorilor numerice)
for i:=1 to n do
write(x[i], ', ');
writeln;
3.inversarea unui vector in alt vector
vom inversa vectorul x in vectorul y, de acelasi tip cu x, deci vom pune in componenta y[1] pe x[n],in componenta y[2] pe x[n-1] ,im componenta y[n] pe x[1]
for i :=1 to n do
y[i]:=x[n+1-i]