Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




LISTE CIRCULARE SIMPLU INLANTUITE

c


LISTE CIRCULARE SIMPLU ĪNLĂNŢUITE

Continutul lucrarii



Īn lucrare sunt prezentate principalele operatii asupra listelor circulare simplu īnlantuite: crearea, inserarea unui nod, stergerea unui nod si stergerea listei.

Consideratii teoretice

Lista circulara simplu īnl 858i84i 9;ntuita este lista simplu īnlantuita a carei ultim element este legat de primul element; adica ultim -> urm = prim.


Īn cadrul listei circulare simplu īnlantuite nu exista capete. Pentru gestionarea ei se va folosi un pointer ptr_nod, care adreseaza un nod oarecare al listei, mai precis ultimul introdus(fig.2.1.).

Ca si la lista simplu īnlantuita, principalele operatii sunt:

crearea;

accesul la un nod;

inserarea unui nod;

stergerea unui nod,

stergerea listei.

Structura unui nod este urmatoarea:

typedef struct tip_nod TIP_NOD;

Crearea listei circulare simplu īnlantuite

Initial lista este vida:

ptr_nod = 0;

Introducerea īn lista a cāte unui nod se va face astfel:

/* crearea nodului */

n = sizeof(TIP_NOD); /* dimensiunea nodului */

p = (TIP_NOD *)malloc(n);     /* rezervarea memorie īn heap */

citire date īn nod la adresa p;

if (ptr_nod = = 0)

else

Accesul la un nod

Nodurile pot fi accesate secvential plecānd de la nodul de pointer ptr_nod:

p=ptr_nod;

if(p! = 0) /* lista nu este vida */

do

while (p! = ptr_nod);

sau cautānd un nod de cheie data key; īn acest caz o functie care va returna pointerul la nodul gasit va contine urmatoarea secventa de program:

p = ptr_nod;

if (p! = 0) /* lista nu este vida */

do

p = p -> urm;

while (p! = ptr_nod);

return 0;

Inserarea unui nod

Se pun urmatoarele probleme:

inserarea īnaintea unui nod de cheie data;

inserarea dupa un nod de cheie data.

Īn ambele cazuri se cauta nodul de cheie data avānd adresa q; daca exista un astfel de nod ,se creeaza nodul de inserat de adresa p si se fac legaturile corespunzatoare.

a)      Inserarea īnaintea unui nod de cheie data

se cauta nodul de cheie data (adresa sa va fi q):



TIP_NOD *p,*q,*q1;

q = ptr_nod;

do

while (q! = ptr_nod);

se insereaza nodul de adresa p;

if (q -> cheie == key)

b)      Inserarea dupa un nod de cheie data

se cauta nodul de cheie data:

TIP_NOD *p,*q;

q = ptr_nod;

do

while(q!=ptr_nod);

se insereaza nodul de adresa p :

if (q -> cheie == key)

stergerea unui nod de cheie data

stergerea unui nod de cheie data key se va face astfel:

se cauta nodul de cheie data:

q = ptr_nod;

do

while (q! = ptr_nod);

se sterge nodul, cu mentiunea ca daca se sterge nodul de pointer ptr_nod, atunci ptr_nod va pointa spre nodul precedent q1:

if (q-> cheie == key)

elib_nod(q);

stergerea listei

stergerea listei circulare simplu īnlantuite se va face astfel:

p = ptr_nod;

do

while (p! = ptr_nod);

ptr_nod = 0;

Mersul lucrarii

Sa se defineasca si sa se implementeze functiile pentru structura de date:

struct LISTA_CIRC

avānd modelul din fig. 3.1.

De la tastatura se citeste numarul n si numele a n copii. Sa se simuleze urmatorul joc: cei n copii stau īntr-un cerc. Īncepānd cu un anumit copil, se numara copiii īn sensul acelor de ceasornic. Fiecare al n-lea copil iese din cerc .Cāstiga ultimul copil ramas īn joc.

Sa se implementeze un buffer circular, care contine īnregistrari cu datele unui student si asupra caruia actioneaza principiul de sincronizare producator-consumator, care consta īn urmatoarele:

a)      īnregistrarile sunt preluate īn ordinea producerii lor;

b)      daca bufferul nu contine īnregistrari, consumatorul este īntārziat pāna cānd producatorul depune o īnregistrare;

c)      daca bufferul este plin, producatorul este īntārziat pāna cānd consumatorul a preluat o īnregistrare.





Document Info


Accesari: 7008
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )