LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite,...

26
Structuri de date alocate dinamic LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE LISTE CIRCULARE

Transcript of LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite,...

Page 1: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

Structuri de date

alocate dinamic

LISTE SIMPLU ÎNLĂNŢUITE

LISTE DUBLU ÎNLĂNŢUITE

LISTE CIRCULARE

Page 2: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

Sumar

1. Competenţe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2. Liste simplu înlănţuite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

3. Liste dublu înlănţuite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

4. Liste circulare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

5. Aplicaţii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

6. Bibliografie şi webografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

2

Page 3: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

1. Competenţe

Competenţe generale

• identificarea datelor care intervin într-o problemă şi aplicarea

algoritmilor fundamentali de prelucrare a acestora

Competenţe specifice

• descrierea operaţiilor specifice listelor simplu înlănţuite şi elaborarea

unor subprograme care să implementeze aceste operaţii

• analizarea în mod comparativ a avantajelor utilizării diferitelor metode

de structurare a datelor necesare pentru rezolvarea unei probleme

• aplicarea în mod creativ a algoritmilor fundamentali în rezolvarea unor

probleme concrete

3

Page 4: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

4

O listă simplu înlănţuită reprezintă o colecţie de noduri aflate într-o relaţie

de ordine.

O listă siplu înlănţuită este o structură de forma:

2. Liste simplu înlănţuite

info urm info urm info urm info NULL prim ultim

Page 5: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

5

Fiecare nod al listei conţine două informaţii: - info reprezintă informaţia proproiu-zisă (cheia nodului);

- urm reprezintă informaţia de legătură (adresa nodului următor din listă).

Pentru a parcurge nodurile listei trebuie cunoscută adresa primului element al listei (prim) şi adresa ultimului element din listă (ultim).

Ultimul element din listă nu are succesor, ca urmare în câmpul de adresă se memorează constanta NULL.

Liste simplu înlănţuite

info urm

adresă nod

cheie nod

Page 6: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

6

Definirea structurii unui nod struct nod

{

int info;

nod *urm;

};

Declarare variabile utile: nod *prim, *ultim, *nou;

int x;

unde: prim - adresa primului element al listei;

ultim - adresa ultimului element al listei;

nou - adresa nodului care va fi creat;

x - informaţia care va fi memorată în nod.

Liste simplu înlănţuite

Page 7: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

7

Alocare şi eliberare de memorie

Alocarea memoriei

Alocarea dinamică a spaţiului de memorie necesar pentru nodurile listei se face prin apelul operatorului new:

prim=new nod; //pentru primul nod

sau: nou=new nod; //pentru celelalte ndoduri

Liste simplu înlănţuite

Page 8: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

8

Eliberarea memoriei

Ştergerea listei din memorie, prin eliberarea spaţiului alocat nodurilor, se fece prin apelul operatorului delete:

delete prim;

delete ultim;

delete nou;

Liste simplu înlănţuite

Page 9: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

9

Crearea listei

- se creează primul nod al listei;

- celelalte noduri se adaugă la ultimul nod al listei.

Liste simplu înlănţuite

Page 10: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

10

a). crearea primului nod - se alocă memorie în HEAP pentru primul nod:

prim=new nod;

- se completează câmpul de informaţie utilă: prim->info=x;

- se completează adresa către nodul următor: prim->urm=NULL;

- se memorează în variabila pointer ultim adresa ultimului nod al liste:

ultim=prim;

Liste simplu înlănţuite

x NULL prim

ultim

Page 11: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

11

b). crearea celorlalte noduri - se alocă memorie în HEAP pentru noul nod:

nou=new nod;

- se completează câmpul de informaţie utilă: nou->info=x;

- se completează adresa către nodul următor: nou->urm=NULL;

- se stabileşte legătura între cele două noduri: ultim->urm=nou;

- se memorează în variabila pointer ultim adresa ultimului nod al liste:

ultim=nou;

Liste simplu înlănţuite

x prim

x NULL

nou

ultim

Page 12: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

12

Parcurgerea listei

- se utilizează un pointer care adresează primul nod al listei.

p=prim;

while(p!=NULL) //sau while(p)

{

<prelucrează element>

p=p->urm;

}

Liste simplu înlănţuite

Page 13: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

13

O listă dublu înlănţuită reprezintă o colecţie de noduri aflate într-o relaţie de

ordine.

O listă dublu înlănţuită este o structură de forma:

3. Liste dublu înlănţuite

NULL info prim

urm prec info urm prec info

ultim

NULL

Page 14: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

14

Fiecare nod al listei conţine trei informaţii: - info reprezintă informaţia proproiu-zisă (cheia nodului);

- prec reprezintă informaţia de legătură (adresa nodului precedent din

listă); - urm reprezintă informaţia de legătură (adresa nodului următor din listă).

Liste dublu înlănţuite

adresă nod

cheie nod

prec info urm

adresă nod

Page 15: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

15

Definirea structurii unui nod struct nod

{

int info;

nod *prec,*urm;

};

Declarare variabile utile: nod *prim, *ultim, *nou;

int x;

unde: prim - adresa primului element al listei;

ultim - adresa ultimului element al listei;

nou - adresa nodului care va fi creat;

x - informaţia care va fi memorată în nod.

Liste dublu înlănţuite

Page 16: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

16

Crearea listei

- se creează primul nod al listei;

- celelalte noduri se adaugă la ultimul nod al listei.

Liste dublu înlănţuite

Page 17: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

17

a). crearea primului nod - se alocă memorie în HEAP pentru primul nod:

prim=new nod;

- se completează câmpul de informaţie utilă: prim->info=x;

- se completează adresa către nodul precedent: prim->prec=NULL;

- se completează adresa către nodul următor: prim->urm=NULL;

- se memorează în variabila pointer ultim adresa ultimului nod al liste:

ultim=prim;

Liste dublu înlănţuite

x NULL prim

NULL ultim

Page 18: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

18

b). crearea celorlalte noduri - se alocă memorie în HEAP pentru noul nod:

nou=new nod;

- se completează câmpul de informaţie utilă: nou->info=x;

- se completează adresa către nodul precedent: nou->prec=ultim;

- se completează adresa către nodul următor: nou->urm=NULL;

- se stabileşte legătura între cele două noduri: ultim->urm=nou;

- se memorează în variabila pointer ultim adresa ultimului nod al liste:

ultim=nou;

Liste dublu înlănţuite

x urm NULL prim

x NULL prec

nou

ultim

Page 19: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

19

Parcurgerea listei de la primul nod la ultimul nod

- se utilizează un pointer către primul nod al listei.

p=prim;

while(p!=NULL) //sau while(p)

{

<prelucrează element>

p=p->urm;

}

Liste dublu înlănţuite

Page 20: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

20

Parcurgerea listei de la ultimul nod la primul nod

- se utilizează un pointer către ultimul nod al listei.

q=ultim;

while(q!=NULL) //sau while(q)

{

<prelucrează element>

q=q->prec;

}

Liste dublu înlănţuite

Page 21: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

21

O listă circulară reprezintă o listă simplu înlănţuită în care ultimul element al listei reţine în loc de valoarea NULL adresa primului element al listei.

O listă circulară este o structură de forma:

4. Liste circulare

info urm info urm info urm info prim ultim

Page 22: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

22

Fiecare nod al listei conţine două informaţii: - info reprezintă informaţia proproiu-zisă (cheia nodului);

- urm reprezintă informaţia de legătură (adresa nodului următor din listă).

Pentru a parcurge nodurile listei trebuie cunoscută adresa primului element al listei (prim).

Liste circulare

info urm

adresă nod

cheie nod

Page 23: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

23

Crearea listei

- se realizează în mod similar listelor simplu înlănţuite, cu deosebirea că la

sfârşitul creării listei se realizează legătura între primul nod şi ultimul nod al listei:

ultim->urm=prim;

Liste circulare

Page 24: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

24

Parcurgerea listei

- se utilizează un pointer către primul nod al listei.

p=prim;

q=prim;

do

{

<prelucrează element>

p=p->urm;

} while(p!=q);

Liste circulare

Page 25: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

25

Fişe de lucru

• Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare

• Aplicaţii liste simplu înlănţuite, liste dublu înlănţuite, liste circulare

6. Aplicaţii

Page 26: LISTE SIMPLU ÎNLĂNŢUITE LISTE DUBLU ÎNLĂNŢUITE · •Întrebări liste simplu înlănţuite, liste dublu înlănţuite, liste circulare •Aplicaţii liste simplu înlănţuite,

26

1. Miloşecsu M., Informatica. Manual pentru clasa a X, Editura Didactică

şi Pedagogică, Bucureşti, 2005

2. Mateescu G, Moraru P., Informatica. Manual pentru clasa a X, Editura

Donaris, Sibiu, 2006

3. Popescu C., Culegere de probleme de informatică, Editura Donaris-

Info, Sibiu, 2002

4. http://en.wikipedia.org/wiki/Pointer_(computer_programming)

5. http://www.cplusplus.com/articles/EN3hAqkS/

6. http://www.cplusplus.com/doc/tutorial/dynamic/

7. http://www.cplusplus.com/articles/G6vU7k9E/

7. Bibliografie şi webografie