Escolar Documentos
Profissional Documentos
Cultura Documentos
1 --
E.Kalisz - Structuri de date
Colectii cu disciplina de prelucrare
dictata de ordinea inserarii elementelor
Coada: primul venit primul servit
(First In First Out FIFO)
Analogii: cereri rezolvate in ordinea inregistrarii
Inceput
- extragere
< Coada <
Sfarsit
- introducere
-- 7. 2 --
E.Kalisz - Structuri de date
Stiva: ultimul venit primul servit
(Last In First Out LIFO)
Analogii: tub de medicamente, dosare puse
teanc in ordinea primirii si parcurse la finalul
zilei in ordinea in care sunt asezate etc.
Varf
- introducere
- extragere
Stiva
Baza
Colectii cu disciplina de prelucrare
dictata de ordinea inserarii elementelor
-- 7. 3 --
E.Kalisz - Structuri de date
Coada Operatie Stiva
< 1, 2 , 3 < E | 1, 2 , 3 :
< 2, 3 < I4 | 1, 2 :
< 2, 3, 4 < I8 | 1, 2, 4 :
< 2, 3, 4, 8 < E | 1, 2, 4, 8 :
< 3, 4, 8 < I5 | 1, 2, 4 :
< 3, 4, 8, 5 < E | 1, 2, 4, 5 :
< 4, 8, 5 < E | 1, 2, 4 :
< 8, 5 < | 1, 2 :
Efectul operatiilor de Inserare / Extragere
-- 7. 4 --
E.Kalisz - Structuri de date
Pentru ca intr-o aplicatie sa se poata lucra cu
mai multe cozi si/sau stive, ale caror elemente sunt
de tipuri diferite, este necesar ca acestea sa fie
definite ca tipuri generice (coada / stiva de orice).
Deoarece, asa cum vom discuta mai tarziu, exista
diverse variante de implementare pentru aceste
tipuri de date, este indicat sa definim operatiile
specifice independent de implementarea aleasa
pentru o anumita aplicatie.
In acest context, pentru a lucra cu o coada/ stiva
vom utiliza un pointer generic (void*), reprezentand
adresa structurii care incapsuleaza elemente de un
anumit tip.
Coada si Stiva generice
-- 7. 5 --
E.Kalisz - Structuri de date
Inserare / extragere element
(void*)
(void*)
structura
generica
element de
dimensiune d
Coada si Stiva generice
-- 7. 6 --
E.Kalisz - Structuri de date
Initializare structura cu elemente de dimensiune d:
void* InitQ(size_t d,...);
void* InitS(size_t d,...);
Rezultat: NULL sau adresa structura
Inserare:
int IntrQ(void* a, void* ae);
int Push(void* a, void* ae);
Rezultat: 1 succes / 0 - esec
Coada si Stiva generice - operatii standard
-- 7. 7 --
E.Kalisz - Structuri de date
Extragere
int ExtrQ(void* a, void* ae);
int Pop(void* a, void* ae);
Rezultat: 1 succes / 0 - esec
Eliberarea intregului spatiu ocupat de structura:
void DistrQ(void** aa);
void DistrS(void** aa);
Test structura vida:
int VidaQ(void* a);
int VidaS(void* a);
Coada si Stiva generice - operatii standard
-- 7. 8 --
E.Kalisz - Structuri de date
Copiere element accesibil:
int PrimQ(void* a, void* ae);
int Top(void* a, void* ae);
Numar elemente:
size_t NrEQ(void* a);
size_t NrES(void* a);
Dimensiune elemente:
size_t DimEQ(void* a);
size_t DimES(void* a);
Coada si Stiva generice - operatii standard
-- 7. 9 --
E.Kalisz - Structuri de date
Transformare in structura vida:
void ResetQ(void* a);
void ResetS(void* a);
Coada si Stiva generice alte operatii
-- 7. 10 --
E.Kalisz - Structuri de date
Coada: int MutaQ(void* ad, void* as);
Destinatie Sursa
< 1, 2, 3 < < 20, 13, 8, 5 <
| 1, 2, 3, 5 : | 20, 13, 8 :
Echivalenta cu extragere urmata de introducere.
Mutarea unui element
-- 7. 11 --
E.Kalisz - Structuri de date
Concatenare cozi
int ConcatQ(void* ad, void* as);
Destinatie Sursa
< 1, 2, 3 < < 13, 8, 5 <