Sunteți pe pagina 1din 5

STRUCTURURI DE DATE ALOCATE STATIC Def.

- se numeste structura de date o colectie de date inzestrata cu informatii structurale care permit identificarea si selectia componentelor - componentele pot fi identificate si selectate fie prin numele lor, fie prin intermediul relatiilor structurale - cea mai simpla relatie structurala este pozitia fiecarei componente in cadrul structurii Tipuri de operatii asupra unei structuri de date 1) 2) 3) 4) vizualizarea elementelor structurii sub diverse forme actualizarea (adaugarea, modificarea, stergerea unor componente) imbogatire structurala (prin adaugarea unor informatii de legatura) sortare (aranjarea componentelor intr-o anumita ordine stabilita de un anumit criteriu de ordonare)

Clasificare a) b) din punct de vedere al continutului omogene (toate componentele de acelasi tip) neomogene (componente diferite) din punct de vedere al modului in care sunt memorate structuri interne create in memoria interna RAM, au caracter volatil: vector, matrice, record, stiva, coada, lista structuri externe depozitate pe suport de memorie extern, hard, floppy : fisierul text

Alocarea statica a memoriei - memoria RAM este impartita in locatii de memorie, fiecare locatie memorand un octet (8 biti) si avand o adresa - variabilele limbajului Pascal pot fi statice si dinamice -variabilele statice trebuie declarate in zona de declaratii a programului, precizandu-le numele si tipul lor; - in urma declararii, compilatorul Pascal rezerva automat pentru fiecare variabila statica o zona fixa de memorie, memoria acestei zone depinzand de tipul variabilei (var de tip integer 2 octeti ; de tip real 6 octeti ; de tip char 1 octet) - acest mod de memorare a variabilelor se numeste alocare statica a memoriei - adresa de memorie a unei variabile statice este adresa primei locatii de memorie rezervata STIVA Def: - Stiva este o succesiune ordonata de elemente, delimitate prin doua capete, in care adaugarea si eliminarea elementelor se poate face pe la un singur capat, numit varful stivei Obs. o stiva care nu contine nici un element se numeste stiva vida putem scoate din stiva numai elementul care a fost introdus ultimul stiva functioneaza dupa principiul LIFO ("Last In First Out" = "Ultimul Intrat Primul Iesit") cel mai simplu mod de a implementa o stiva este cu ajutorul unui vector, pe care-l vom nota st trebuie stabilit dimensiunea maxima a stivei notata cu Nmax. pozitia unui element in vectorul-stiva se numeste nivel al stivei

Ex: const Nmax=25; var st: array[1..Nmax] of integer;

Operatii a) Adaugarea unui nou element in stiva - se poate realize numai daca stiva nu este deja plina (n < Nmax) - operatia se realizeaza astfel: se incrementeaza cu o unitate varful stivei, prin atribuirea n:=n+1 (realizam o noua locatie pe stiva), apoi se memoreaza o valoare pe noua pozitie st[n]. b) Eliminarea (extragerea) unui element din stiva - se poate realiza doar daca stiva nu este goala (n>=1) - consta in renuntarea la elementul aflat in varful stivei, adica varful stivei scade cu o unitate prin atribuirea n:=n-1. c) Stergerea unui element din stiva - pentru a sterge un element oarecare (v[q]) din interiorul unei stive cu n nivele se procedeaza astfel: 1. eliminam temporar toate elementele aflate in stiva deasupra celui pe care dorim sa-l stergem, adica elementele v[q+1],,v[n]; varful stivei va deveni acum q 2. stergem elementul v[q], operatie prin care varful stivei coboara cu inca un nivel 3. restauram pe stiva, in ordine inversa, elementele care au fost eliminate temporar 4. stiva obtinuta va avea n-1 nivele Aplicatie : program pentru_stive ; const Nmax=20 ; type stiva=array[1..Nmax] of integer ; var st :stiva n,i : integer ; procedure adaugare (var st ;stiva ;var n :integer) ; begin if n=Nmax then writeln (Stiva este plina ) else begin n :=n+1 ; readln(st[n]) ; end ;end ; procedure eliminare (var st ;stiva ;var n :integer) ; begin if n=0 then writeln (Stiva este vida !) else n :=n-1 ; end ; procedure afisare (st ;stiva ; n :integer) ; begin for i := 1 to n do writeln(st[i]) ;end ; begin write (n=) ; readln(n) ; for i := 1 to n do begin write(st[,i,]=) ; readln (st[i]) ;end ; adaugare ; eliminare ; eliminare ; afisare ; end.

COADA Def: Coada este o succesiune ordonata de elemente, in care adaugarea elementelor se face pe la un capat, numit capat de introducere, iar eliminarea elementelor se realizeaza pe la celalalt capat, numit capat de extragere. in orice moment putem scoate din coada numai elementul aflat la capatul de extragere elementele ies din coada in ordinea in care au fost introduse datorita acestei proprietati, coada va functiona dupa principiul FIFO ("First In First Out"= "Primul Intrat Primul Iesit") coada poate fi implementata cu ajutorul unui vector ca si stiva se noteaza cu: a) pi= pozitia capatului pe la care se introduc elementele in coada; b) ps= pozitia capatului pe la care se extrag elementele din coada; c) Nmax= numarul maxim de elemente din coada; coada vida este o coada in care nu exista elemente (pi=ps=0) coada plina este o coada in care nu se mai pot adauga elemente (ps=Max)

Ex: const Max=50; var c: array[1..Max] of integer; Operatii a) Adaugarea unui element se poate face numai in cazul in care coada nu este plina (ps<Max) adaugarea unui elementse realizeazaprin cresterea lui pi cu o unitate si memorarea elementului pe noua pozitie pi b) Extragerea unui element se poate face numai in cazul in care coada nu este vida (pi<>ps) se realizeaza prin cresterea lui ps cu o unitate

Aplicatie Evolutia unei cozi 1) presupunem ca in coada initial vida, introducem elementul 2 pi=ps=1
2

2) pe la acelasi capat introducem elementul 5 ps=1 pi=2


2 5

3) adaugam elementul -1
2 5 -1

4) extragem un element (adica pe 2)


5 -1

prin introducerea si extragerea din coada, aceasta se va muta catre dreapta se poate ajunge la situatia in care pi=ps=Nmax, ceea ce inseamna o coada vida, dar in care totusi nu mai putem introduce elemente (caz particular care se va discuta mai tarziu)

LISTA Def: Lista este o structura de date de tip secvential, alcatuita dintr-o succesiune de elemente de acelasi tip careia i se pot aplica o serie de operatii specifice. Obs: - lista are caracter secvential (elementele sale sunt legate intre ele) - fiecare element cu exceptia primului are un predecessor - fiecare element cu exceptia ultimului are un successor Inlantuirea elementelor se face in doua moduri: - elementele sunt memorate succesiv (unul dupa altul) - elementele sunt memorate aleator (in zone diferite de memorie) Operatii 1) crearea listei 2) afisarea elementelor listei 3) inserarea (adaugarea) unui element in lista 4) stergerea unui element din lista 5) accesarea unui element oarecare din lista 6) cautarea unui element care indeplineste o anumita conditie 7) ordonarea elementelor listei dupa un anumit criteriu 8) concatenarea a doua liste 9) descompunerea unei liste date in doua sau mai multe liste 10) combinarea a doua sau mai multe liste date intr-una singura. 1). Crearea unei liste - pentru a crea efectiv lista este suficient sa dam valori elementelor sale - aceasta se poate face prin citire (de la tastatura sau dintr-un fisier text) write('n='); readln (n); for i := 1 to n do begin write ('L[', i, ']='); readln (L[i]); end. 2). Afisarea unei liste for i := 1 to n do write (L[i], ' '); writeln; 3). Inserarea (adaugarea) unui element in lista a) Inserarea unui element in interiorul listei se insereaza un element x pe pozitia p pentru aceasta trebuie sa deplasam cu o pozitie la dreapta toate elementele de la pozitia x pana la sfarsitul vectorului vom efectua deplasarile in ordine inversa

Ex: write ('Pozitia pe care o inseram '); readln(p); write ('Elementul pe care il inseram '); readln(x); for i := n downto p do L[i+1]:=L[i]; L[p]:=x; n:=n+1;

b) Inserarea unui element la inceputul listei (pe prima pozitie) - pentru a insera un element nou pe prima pozitie in lista, se poate folosi algoritmul de mai sus, cu singura particularizare ca in loc de citirea de la tastatura a pozitiei p, vom face atribuirea p:=1. c) Inserarea unui element la sfarsitul listei (dupa ultimul element) - noul element va fi adaugat dupa toate elementele existente, urmand a ocupa pozitia n+1, fara a mai fi necesara vreo deplasare. Se fac doi pasi : - numarul de elemente n (care indica si pozitia ultimului element) va creste cu o unitate, prin atribuirea n:=n+1 - pe noua pozitie n creata vom memora valoarea x pe care trebuie sa o inseram (L[n]:=x) 4). Stergerea unui element din lista a) Stergerea unui element din interiorul listei Ex: write('Pozitia de pe care stergem '); readln(p); for i:=p+1 to n do L[i-1]=L[i]; n:=n+1; b) Stergerea primului element al listei - putem folosi algoritmul precedent, cu particularizarea p:=1 c) Stergerea ultimului element al listei - este suficient sa ignoram prezenta ultimului element, considerand ca lista are numai n-1 elemente (n :=n-1). 5). Concatenarea a doua liste Def: Concatenarea a doua liste date inseamna "lipirea" celei de-a doua la sfarsitul primeia. Daca avem lista L1 cu n1 elemente si lista L2 cu n2 elemente, dupa concatenarea lor obtinem o lista cu n1+n2 elemente, pe care le memoram in L1. Ex: for i :=1 to n2 do L1[n1+i]:=L2[i];

S-ar putea să vă placă și