Lista,Stiva,Coada

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;

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

var c: array[1. b) ps= pozitia capatului pe la care se extrag elementele din coada. 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. 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. c) Nmax= numarul maxim de elemente din coada. ceea ce inseamna o coada vida. numit capat de introducere. aceasta se va muta catre « dreapta » se poate ajunge la situatia in care pi=ps=Nmax. 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. 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. numit capat de extragere.Max] of integer.. dar in care totusi nu mai putem introduce elemente (caz particular care se va discuta mai tarziu) . in care adaugarea elementelor se face pe la un capat. iar eliminarea elementelor se realizeaza pe la celalalt capat.COADA Def: Coada este o succesiune ordonata de elemente. 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.

2). . writeln.fiecare element cu exceptia primului are un predecessor .fiecare element cu exceptia ultimului are un successor Inlantuirea elementelor se face in doua moduri: . 1). 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 '). for i := n downto p do L[i+1]:=L[i]. readln (L[i]). readln(x). i. alcatuita dintr-o succesiune de elemente de acelasi tip careia i se pot aplica o serie de operatii specifice.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.LISTA Def: Lista este o structura de date de tip secvential. L[p]:=x. for i := 1 to n do begin write ('L['. end. n:=n+1. write ('Elementul pe care il inseram '). 3).lista are caracter secvential (elementele sale sunt legate intre ele) . readln(p).elementele sunt memorate succesiv (unul dupa altul) .pentru a crea efectiv lista este suficient sa dam valori elementelor sale . Crearea unei liste . Obs: . readln (n).aceasta se poate face prin citire (de la tastatura sau dintr-un fisier text) write('n='). Afisarea unei liste for i := 1 to n do write (L[i]. ']='). ' ').

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

Sign up to vote on this title
UsefulNot useful