Documente Academic
Documente Profesional
Documente Cultură
Tehnici de Programarelab4 PDF
Tehnici de Programarelab4 PDF
struct Lista_numere {
int numar; numar adr_urm
Lista_numere *adr_urm; (100) (110..10)
}
Lista_numere *list;
1
Programming Techniques Costin Badica
Dinamic Structures Cosmin Stoica Spahiu
ATENTIE:
Va trebui inclus header-ul malloc.h
Practic atunci când avem nevoie de o nouă variabilă, vom aloca spaţiu pentru
ea. Nu este necesar să avem declarate *list1, *list2… *listn pentru fiecare variabilă de
care avem nevoie, deoarece avem posibilitatea ca fiecare înregistrare să reţină adresa
unei alte înregistrări.
Dacă am avea o lista de 5 variabile, practic este necesar doar reţinerea primei
adrese deoarece adresa variabilei 2 o reţinem în adr_urm din prima variabilă, adresa
variabilei 3 o reţinem în adr_urm din cea de-a doua variabilă… etc.
Atunci când nu ne mai este necesară o variabilă, ea se şterge (se eliberează
memoria rezervată pentru ea) folosind funcţia free ( ).
free(list);
Observaţii:
list → se referă la adresa la care se găseşte variabila list
list–>numar → se referă la câmpul numeric (informaţia utilă) care are informaţia
memorată în variabila list
list–>adr_urm → se referă la adresa unei alte înregistrări
list–>adr_urm–>numar→ semnifică variabila numar care se găseşte în înregistrarea care are
adresa adr_urm al înregistrării cu adresa list.
2
Programming Techniques Costin Badica
Dinamic Structures Cosmin Stoica Spahiu
a) Crearea listei
Se va cere numărul n de înregistrări. Se creează o primă înregistrare având ca
informaţie utilă nr.1 Variabila prim, va reţine adresa primei înregistrări din listă.
Pentru fiecare i cuprins între 2 şi n se adaugă câte o nouă înregistrare listei. Variabila
ultim reţine adresa ultimei înregistrări din listă, pentru a-i completa câmpul adresă. Se
procedează astfel deoarece atunci când am creat o înregistrare, nu se cunoaşte adresa
înregistrării care urmează.
void function creare()
{ int i;
Lista_numere *temp;
}//end for
}
b) Listarea
Am precizat faptul că prim reţine adresa primei înregistrări. Pentru a nu
deteriora această valoare, o vom memora în variabila temp. Cât timp nu am ajuns la
3
Programming Techniques Costin Badica
Dinamic Structures Cosmin Stoica Spahiu
sfârşitul listei, vom tipări informaţia utilă şi încărcăm în temp adresa înregistrării
următoare
void function Listare()
{
Lista_numere *temp;
temp = prim;
while (temp != NULL)
//cat timp nu s-a ajuns la sfârşit
{
printf(”numarul este: %d ”,temp->numar;
temp = temp->adr_urm;
//temp devine înregistrarea următoare
}//end while
}
c) Adăugarea în listă
Se consideră că dorim să adăugăm o nouă înregistrare după înregistrarea nr 2.
Pentru aceasta va trebui să ne poziţionăm pe înregistrarea după care dorim să
facem adăugarea, alocarea spaţiului pentru noua înregistrare, completarea informaţiei
utile pentru ea, completarea adresei următoarei înregistrări după cea nou creată care
va fi adresa următoarei înregistrări după înregistrarea pe care suntem poziţionaţi,
câmpul adresă al înregistrării pe care suntem poziţionaţi va lua valoarea noii
înregistrări.
nr 1 adr_urm2 nr2 adr_urm3 nr3 adr_urm4 ….
prim adr2 adr3
nrx adr_urm3
înreg. nouă
adr_x
4
Programming Techniques Costin Badica
Dinamic Structures Cosmin Stoica Spahiu
5
Programming Techniques Costin Badica
Dinamic Structures Cosmin Stoica Spahiu
a) Crearea listei
Se va cere numărul n de înregistrări. Se creează o primă înregistrare având ca
informaţie utilă nr.1 Variabila prim, va reţine adresa primei înregistrări din listă.
Pentru fiecare i cuprins între 2 şi n se adaugă câte o nouă înregistrare listei. Variabila
ultim reţine adresa ultimei înregistrări din listă, pentru a-i completa câmpul adresă.
void function creare()
{
int i;
Lista_numere *temp;
6
Programming Techniques Costin Badica
Dinamic Structures Cosmin Stoica Spahiu
}//end for
}
Probleme propuse
1. Să se realizeze o listă simplu înlănţuită, unde funcţiile de creare, adăugare,
listare şi ştergere să fie implementate recursiv.
2. Să se implementeze pentru lista dublu înlănţuite operaţiile de adăugare(stânga,
dreapta), ştergere şi listare
3. Să se implementeze o listă circulară, dublu înlănţuită.
4. O listă se numeşte circulară, dacă ultima înregistrare va avea o legătură spre
prima, iar prima spre ultima, ca în figura:
adr_spate
adr1 adr2
nr
nr
adr_spate
next_adr3
adr5
adr3
next_ad adr_spat
nr adr4 nr
adr_spat next_ad