Sunteți pe pagina 1din 3

Modulul I.

Structuri de date liniare

Capitolul 3. Cozi

O coada este o lista liniara in care stergerea si accesarea unui element se pot
face numai pe la un capat al cozii, numit front, iar inserarea se face la celalalt capat al
cozii, numit rear. Se poate face o analogie intre o coada folosita in programare si, de
exemplu, o coada pentru tiparirea mai multor fisiere text. Pentru tiparirea unui nou
fisier va trebui sa asteptam pana cand toate fisierele sunt tiparite in ordinea in care
comenzile de tiparire au fost efectuate.
stergere
front

...

rear
inserare
Cozile se mai numesc si liste FIFO (first in/first out) deoarece primul element
care este extras din coada este primul introdus.
Vom nota inserarea unui element a intr-o coada C: a  C, iar stergerea unui
element a dintr-o coada C: C  a.

3.1 Alocarea secventiala

In alocarea secventiala, presupunand ca avem o coada definita


T x[N];
unde N este o constanta suficient de mare, T este un tip de date definit anterior
(eventual printr-o definitie de tipul typedef), iar elementele cozii sunt in ordine x[R],
x[R+1], ..., x[F], cu indicii 0  R  F  N – 1,
x[R] x[R+1] x[F]
... ... ...

atunci operatia de inserare elem_nou  C se poate descrie astfel:


if R = 0 and F = N - 1 then OVERFLOW
else if R > 0 then x[R – 1] = elem_nou
R = R –1
else for i = F, R, -1
x[i+1] = x[i]
endfor
x[0] = elem_nou
F = F +1
endif
endif
iar operatia de stergere C  elem_sters se poate descrie astfel:
if R > F then UNDERFLOW
else elem_sters = x[F]

1
F = F -1
endif

3.2 Alocarea inlantuita

In alocarea inlantuita, folosim aceeasi structura ca si in cazul listei liniare


struct nod
{
T info;
struct nod *link;
};
typedef struct nod NOD;
unde T este presupus definit anterior (eventual printr-o definitie typedef) si notam cu
front, si respectiv rear, pointerul la primul nod al cozii, si respectiv la ultimul nod.
NOD *front, rear;
Cu aceste notatii, operatiile cu cozi se pot descrie astfel:

 inserarea unui nod nou:  stergerea/accesarea unui nod:


Algoritm: Folosim variabilele info_nou Algoritm:
ce contine valoarea informatiei nodului if front = NULL then UNDERFLOW
ce trebuie introdus in lista si p pointer la else elem_sters = front -> info
front = front -> link
un nod. endif
Aloca memorie pentru un nod nou.
Returneaza p, un pointer la noul nod.
if p  NULL then
p -> link = NULL front
info
p -> info = info_nou
rear -> link = p
rear = p
else OVERFLOW
endif

front

.............

...........
rear
NULL
rear

info_nou
p
NULL

Scrieti un program care implementeaza algoritmii de mai sus


Lab 4
pentru o coada.
1

2
3