STRUCTURI DE DATE ALOCATE STATIC ŞI DINAMIC

49
STRUCTURI DE DATE ALOCATE STATIC ŞI DINAMIC Prezentare Scopul lucrării

description

STRUCTURI DE DATE ALOCATE STATIC ŞI DINAMIC. Scopul lucrării. Prezentare. CUPRINSUL LUCRARII. Cap. I: Structuri de date. Cap. II: Structuri de date alocate static. Cap. III: Alocarea dinamică a memoriei. Cap. IV : Consideraţii metodice privind predarea structurilor de date. - PowerPoint PPT Presentation

Transcript of STRUCTURI DE DATE ALOCATE STATIC ŞI DINAMIC

Page 1: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

STRUCTURI DE DATE

ALOCATE STATIC ŞI DINAMIC

PrezentareScopul lucrării

Page 2: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

CUPRINSUL LUCRARII

Cap. I: Structuri de date

Cap. II: Structuri de date alocate static

Cap. III: Alocarea dinamică a memoriei

Cap. IV : Consideraţii metodice privind predarea structurilor de date

Cap. V : Probleme propuse

back

Page 3: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

I.1. Conceptul de structură de date. Clasificarea structurilor de date. I.2. Structuri statice.

I.2.1. Articolul I.2.2. Tabloul I.2.3 Mulţimea

I.3. Structuri semistatice I.3.1 Stiva. I.3.2 Coada. I.3.3 Tabela de dispersie.

I.4. Structuri dinamice. I.4.1 Lista liniară. I.4.2 Arborele. I.4.3. Reţeaua.

I.5. Structuri dinamice externe

CAPITOLUL I: STRUCTURI DE DATE

Cuprins

Page 4: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

II.1.Structura memoriei la execuţia unui program. II.2.Variabile statice. Alocarea statică a memoriei. II.3.Reprezentarea secvenţială a listelor liniare.

II.3.1 Stiva. II.3.2 Coada. II.3.3 Liste oarecare.

II.4.Reprezentarea înlănţuită a listelor liniare. II.4.1 StivaII.4.2 CoadaII.4.3 Lista simplu înlănţuităII.4.4 Lista circularăII.4.5 Lista dublu înlănţuită

II.5.Comparaţie între alocarea secvenţială şi alocarea înlănţuită

CAPITOLUL II: STRUCTURI DE DATE ALOCATE STATIC

CuprinsPrezentare

Page 5: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

III.1.Variabile dinamice. Tipul reper.III.2.Structuri dinamice de date.

III.2.1 Stiva.III.2.2 Coada.III.2.3 Lista simplu înlănţuită.III.2.4 Lista circulară.III.2.5 Lista dublu înlănţuită.

III.3. Comparaţie între alocarea statică şi alocarea dinamică.

CAPITOLUL III: ALOCAREA DINAMICĂ A MEMORIEI

Cuprins

Page 6: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

IV.1. Consideraţii generaleIV.1.1. Principiile didacticeIV.1.2 Obiectivele majore ale studiului informaticii. Precizarea obiectivelor.IV.1.3. Metode generale de învăţareIV.1.4. Instrumente(mijloace de predare)IV.1.5. Metode de evaluare pentru atingerea obiectivelor

IV.2. Organizarea lecţiei de informaticăIV.2.1. Calitatea cunoştinţelor asimilateIV.2.2. Formarea limbajului de specialitateIV.2.3. Exprimarea fluentă în limbajul de specialitate. Exerciţiul oral.IV.2.4. Repetarea materiei parcurseIV.2.5. Evaluarea rezultatelor şcolare. Modele de teste şi fişe de evaluare.IV.2.6. Aprecierea cunoştinţelor elevului

IV.3. Planificarea şi pregătirea profesorului pentru lecţie.IV.3.1. Planificarea activităţii didacticeIV.3.2. Etapele esenţiale ale proiectării demersului didacticIV.3.3. Modele de proiecte de tehnologie didactică

CAPITOLUL IV: CONSIDERAŢII METODICE PRIVIND PREDAREA STRUCTURILOR DE DATE

DE TIP LISTĂ, STIVĂ, COADĂ

CuprinsPrezentare

Page 7: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Începând cu a doua jumătate a secolului al XX-lea, apariţia şi dezvoltarea calculatoarelor electronice au declanşat o nouă revoluţie în toate domeniile vieţii economice şi sociale. La baza acestei revoluţii stau cercetările fundamentale din domeniul matematicii şi realizările din domeniul microelectronicii.

Diversificarea spectaculoasă a mijloacelor tehnice din domeniul microelectronicii a dus la o dezvoltare continuă a software-ului, necesitând totodată adecvarea structurilor de date la aplicaţii din ce în ce mai complexe. Astfel au apărut structurile de date dinamice, pe lângă cele statice şi semistatice, care permit o alocare dinamică atât în cadrul structurii cât şi la nivelul întregii structuri. Lista liniară ca structură de date dinamică s-a dovedit a fi utilă într-o gamă foarte variată de aplicaţii, unde se pot obţine economie de timp şi memorie, o minimizare a numărului de operaţii, ajungându-se la algoritmi eficienţi şi, implicit, la programe fiabile, performante.

Foarte multe produse software care utilizează un volum mare de date folosesc structuri de date dinamice.

O primă problemă ce apare în prelucrarea structurilor de date este legată de reprezentarea în memoria internă şi pe suporturile externe. Lucrarea are drept scop prezentarea câtorva modalităţi de reprezentare, evidenţiindu-se avantajele fiecăreia în parte.

back

Page 8: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Tipurile de date de care avem nevoie în rezolvarea diferitelor probleme fie există ca atare în limbajul de programare ales, fie se pot declara cu ajutorul tipurilor de date elementare. În organizarea datelor, conform logicii algoritmului de rezolvare, datele de diferite tipuri se grupează în structuri, denumite structuri de date.

O structură de date poate ocupa în memorie o zonă de dimensiune constantă, în care elementele componente ocupă tot timpul execuţiei programului acelaşi loc. O astfel de structură se numeşte statică. Alocarea de memorie făcută pentru o structură statică este o alocare statică atât la nivelul întregii structuri, cât şi pentru fiecare componentă în parte.

Dacă o structură de date ocupă o zonă de dimensiune constantă, dar elementele componente ocupă un loc variabil în timpul execuţiei programului atunci o astfel de structură se numeşte semistatică. Pentru o structură semistatică alocarea este statică la nivelul structurii şi dinamică la nivelul componentelor,

Dacă o structură de date ocupă în memoria internă o zonă care se alocă în timpul execuţiei programului pe măsura nevoii de prelucrare, fără a avea o dimensiune constantă, atunci structura este dinamică. Pentru o structură dinamică alocarea este dinamică atât la nivelul componentelor cât şi la nivelul întregii structuri.

back

Page 9: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Toate variabilele declarate într-o secţiune var sunt alocate static şi se

numesc variabile statice. O variabilă statică este declarată într-o secţiune var a

unui bloc sub un anumit nume, prin intermediul căruia va fi referită în cadrul

acestuia, alocându-i-se memorie la activarea blocului. Variabila va exista(va

ocupa memoria alocată ei) atâta timp cât blocul în care a fost declarată este activ.

În urma declarării, compilatorul Pascal rezervă automat pentru fiecare

variabilă statică o zonă fixă în memoria internă RAM, alcătuită din locaţii

succesive de memorie. Mărimea acestei zone depinde de tipul variabilei: 2 octeţi

pentru integer , 6 pentru real, 1 octet pentru char etc.

Spaţiul de memorie aferent unor astfel de date se defineşte şi se rezervă

la dimensiune maximă, prestabilită, ca spaţiu propriu care nu poate fi

disponibilizat şi nici împărţit cu alte date, chiar dacă, în momentul diverselor

execuţii ale programului, nu este în întregime utilizat (rezervare statică sau la

momentul compilării).

Există două moduri de alocare a acestor structuri de date:

alocare secvenţială şi alocare înlănţuită back

Page 10: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Elementele listei vor fi stocate într-un tablou de înregistrări. Câmpurile unei înregistrări vor conţine în mod specific informaţiile pe care dorim să le reprezentăm în listă. Memorarea listei liniare în memoria calculatorului se va realiza prin memorarea elementelor listei în locaţii succesive de memorie, nod după nod. Se va folosi un tablou în care vor fi reţinute elementele listei, tabloul având dimensiunea max.const nmax=20;type element=record

câmp1:tip_info_1; câmp2:tip2_info_2; ………….. end;

lista=array[1..nmax] of element;var l:lista; PRIM,ULTIM:integer;Variabilele cu ajutorul cărora vom manipula elementele listei sunt :PRIM şi ULTIM care identifică primul, respective ultimul element al listei. back

Page 11: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

În cazul reprezentării înlănţuite, elementele listei nu sunt aşezate

succesiv, fiind nevoie să precizăm în mod suplimentar ordinea lor reală.

Fiecare element al listei trebuie să indice unde se află elementul

următor(anterior). În acest caz va trebui să ştim unde se află primul

element al listei, pentru a avea acces apoi, pe baza înlănţuirilor, şi la

elementele următoare ale listei. De asemenea, este necesar să ştim când

nu mai există succesor(este vorba de ultimul element).

Implementarea alocării înlănţuite se realizează cu ajutorul vectorilor.

Lista va fi un vector care va conţine informaţia ataşată nodului(de

exemplu, un număr întreg) şi adresa nodului următor. Ultimul element

nu are nici un succesor; ca urmare, vom declara o constantă, numită

NUL, care va indica o intrare fictivă a tabloului. Pentru a nu face

confuzie între informaţia de adresă, care este tot de tip integer, şi restul

informaţiei memorate, vom „reboteza” tipul integer. next

Page 12: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Const nmax=100;

nul=0;

Type adresa=integer;

nod=record

inf:integer;

urm:adresa;

end;

Pentru memorarea listei folosim un vector care are componente de tip nod,

descris mai jos:

lista=array[1..nmax] of nod;

ocupat= array[1..nmax] of 0..1; - reţine 1 dacă componenta corespunzătoare

din L memorează un nod, sau 0 în caz contrar.

var L:lista;

Exemplu:

Vectorul L: ((7,3),( , ),(5,4),(1,5),(4,0),( , ))

Vectorul o:(1,0,1,1,1,0)

Lista este: 7, 5, 1, 4. back

Page 13: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

back

•Alocarea înlănţuită necesită spaţiu suplimentar de memorie pentru gestionarea locaţiilor libere/ocupate.

•Extragerea unui nod dintr-o listă liniară alocată înlănţuit se realizează mult mai uşor decât extragerea unui nod dintr-o listă liniară alocată secvenţial. Pentru alocarea secvenţială o asemenea ştergere implică în general deplasarea unei părţi din listă în locaţii diferite. O concluzie similară se obţine în cazul inserării unui nod în cadrul unei liste liniare.

•Accesul la diferite părţi din listă este mult mai rapid în cazul alocării secvenţiale. Aşa cum am văzut, locaţia nodului k din listă în cazul alocării secvenţiale este o funcţie liniară de k, deci pentru a obţine accesul la acest nod se consumă un timp constant. În cazul alocării înlănţuite acest acces necesită k iteraţii urmărind referinţele a k-1 noduri. Astfel utilizarea memoriei înlănţuite este mai eficientă când parcurgerea listei se face secvenţial şi nu aleatoriu.

•Alocarea înlănţuită permite o mai mare flexibilitate în ceea ce priveşte reunirea a două sau mai multor liste într-o singură listă sau desfacerea unei liste în mai multe părţi.

Page 14: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Spre deosebire de variabilele statice, variabilele dinamice se alocă şi se distrug la cererea utilizatorului; ele nu sunt declarate într-o secţiune var, deci nu se pot identifica prin nume şi nici nu există pe toată durata activării blocului în care s-au creat. Din acest motiv, variabilele dinamice prezintă un mare avantaj comparativ cu cele statice, şi anume posibilitatea utilizării mult mai eficiente a memoriei.

Variabilele dinamice se alocă dinamic într-o zonă specială, numită HEAP care este eliberată la „distrugerea” variabilei dinamice. Neavând nume, variabilele dinamice trebuie referite prin intermediul altor variabile, numite din acest motiv variabile reper(sau variabile referinţă).

Zona HEAP cuprinde, de obicei, memoria liberă rămasă în momentul executării unui program. Dimensiunea zonei STACK şi/sau dimensiunea minimă şi maximă a zonei HEAP pot fi specificate prin comanda MEMORY SIZES din meniul OPTIONS sau prin directiva de compilare $M. Dimensiunea minimă implicită a zonei HEAP este 0, iar cea maximă 640 KB.

Variabilele reper sunt alocate static şi au ca valori adrese ale unor variabile dinamice de un anumit tip.

back

Page 15: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Liste. Noţiuni introductive

Lista simplu înlănţuităDefinireOperaţii specifice

Lista dublu înlănţuită

DefinireOperaţii specifice

Page 16: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

O listă este o structură de date dinamică în care atâtadăugarea cât şi extragerea unui element se poate face depe orice poziţie.

Există mai multe tipuri de liste:

Definiţie :

•Liste simplu înlănţuite•Liste dublu înlănţuite•Liste circulare•Stive, cozi(cazuri particulare de liste)

next

Page 17: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Nodurile unei liste simplu înlănţuite prezintă două zone :informaţia

utilăadresă de legătură

Inf urmInf urm

Lista simplu înlănţuită este o structură de forma:

Pentru a gestiona lista se folosesc două variabile reper :

•prim care conţine adresa primului element din listă ;•ultim care conţine adresa ultimului element din listă;

type adresa=^ nod ;

nod= record

inf :tip_informaţie;

urm : adresă;

end;

Var prim ,ultim :adresă

Observaţie : Ultimul element al listei (cel aflat la adresa ultim) conţine ca informaţie de legătură valoarea constantei predefinite nil, cu semnificaţia că după acest element nu mai există în listă nici un alt element .

inf urm ......................

inf urm inf nil inf urm

primprim ultimultim

Page 18: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

I.Crearea primului nod

II.Adăugare de noduri :

adăugare la sfârşitul listeiadăugare la începutul listeiadăugare după un nod precizat prin adresăadăugare în faţa unui nod precizat prin adresă

III.Ştergerea unui nod din listăştergerea primului nod din listăştergerea ultimului nod din listăştergerea unui nod precizat prin valoare sau adresă

IV.Parcurgerea listei

V.Căutarea unui nod în listă

Page 19: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Crearea primului nod

Adăugare de noduri : adăugare la sfârşitul listeiadăugare la începutul listei

adăugare după un nod precizat prin adresăadăugare în faţa unui nod precizat prin adresă

Ştergerea unui nod din listăştergerea primului nod din listăştergerea ultimului nod din listăştergerea unui nod precizat prin adresă

Parcurgerea listei

Căutarea unui nod în listă

Page 20: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

prim

inf urm

Lista are un singur nod. Se folosesc doi pointeri care-i memorează adresa.

Observaţie :

Procedure creare_prim (var prim,ultim:adresa); begin new (prim) ; write (‘dati informatia :’) ; readln (prim ^.inf) ; prim ^.urm:=nil ; ultim:=prim; end;

inf nil2. se completează informaţia utilă din noul nod

write (‘dati informatia :’) ;

readln (prim^.inf) ;

1.se alocă spaţiu de memorie pentru noul nod

new (prim);

3. se completează zona de legătură cu nilprim^.urm:=nil;

se memorează adresa nodului prim în pointerul ultim

ultim:=prim

4.

ultim

Page 21: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

se alocă spaţiu in heap pentru noul nod new(p); completarea informaţiei utile din nodul p write(‘dati valoarea: ‘); readln(p^.inf); se va completa zona de legătură a nodului p cu valoarea constantei nill p^.urm:=nil; se leagă nodul p la lista ultim^.urm:=p; se actualizează valoarea variabilei ultim cu adresa lui p ultim:=p;

inf urm

nilnilinf

inf urminf urm

infinf urm

inf urm

. . . . . . . . . . . . inf urm

prim

inf nil urm

ultim

1.

2.

3.

4.

5.

p

procedure adaugare_sfarsit(var ultim:adresa);var p:adresa;begin new(p); write(‘dati informatia:’); readln(p^.inf); p^. urm:=nil; ultim ^.urm:=p; ultim:=p;end;

Page 22: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

se alocă spaţiu în heap pentru un nou nod notat p new(p);se completează informaţia utilă write(‘dati valoarea:’); read(p^.inf);se completează zona de legătură a nodului p cu adresa primului nod din lista p ^.urm :=prim;se reactualizează adresa primului nod din lista cu valoarea nodului p prim:=p ;

infinf

inf urminf urm

infinf urm

ultim

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

inf urm

inf urm nil

inf urm

p

urminf

procedure adaugare_inceput(var prim:adresa); var p:adresa;begin new(p); write(‘dati informatia:’); readln(p^. inf); p ^.urm:=prim; prim:=p;end;

prim

1.

2.

3.

4.

Page 23: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

inf urm . . . . . . . . . . . . inf urm urm inf

p

q

p^.urminf urm

se alocă spaţiu în heap pentru noul nod new(q);

se leagă noul nod la listă q^.urm:=p^.urm; p^.urm:=q;

se completează zona inf pentru noul nod writeln(‘dati informatia:’); readln(q^.inf);

. . . . .. . . . .

urminf

q^.urm

procedure adauga_dupa(p:adresa);var q:adresa;begin new(q); writeln(‘dati informatia:’); readln(q^.inf); q^.urm:=p^.urm; p^.urm:=q;end;

inf urminf urminf urm

1.

3.

2.

Page 24: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

inf urm . . . . . . . . . . . . inf urm urm

inf

p

q

p^.urminf urm

. . . . .. . . . .

urm

q^.urm

se alocă spaţiu pentru noul nod q new(q );se copie informaţia din nodul p în nodul q q^.inf:=p^.inf;se citeşte noua informaţie în p write(‘dati informatia: ’); readln(p^.inf);se leagă nodul q la listă q^.urm:=p^.urm;se leagă nodul p de nodul q p^.urm:=q;

procedure adauga_in_fata(p:adresa); var q:adresa; begin new(q); q^.inf:=p^.inf; write(‘dati informatia:’); readln(p^.inf); q^.urm:=p^.urm; p^.urm:=q;end;

inf urminf urminf urm

1.

2.

3.

4.

5.

infinf

Page 25: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

se parcurge lista pentru a afla adresa penultimului nod, adresă pe care o vom memora în pointerul q q:= prim; while q^.urm<>ultim do q:=q^.urm; penultimul nod va deveni ultimul după ştergere, deci legătura sa următoare devine nil q^.urm:=nil; se şterge fizic ultimul nod dispose(ultim); se reactualizează valoarea pointerului ultim ultim:=q;

Procedure sterge_ultim(var ultim:adresa);var q:adresa;begin q:=prim; while q^.urm<>ultim do q:=q^.urm; q^.urm:=nil; dispose(ultim); ultim:=q;end;

inf

inf urm

inf nil

ultim

inf urm

1.

2.

3.

4.

inf urm

prim

inf urm

q

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

q q

inf urm

inf urm

q q

urmnil

ultim

Page 26: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

se memorează adresa celui de-al doilea noddin listă în pointerul p, operatie necesară întrucât după ştergere al doilea nod va deveni primul p:=prim^.urm;se şterge fizic primul nod dispose(prim);se reactualizează valoarea pointerului prim prim:=p;

Procedure sterge_prim(var prim:adresa);var p:adresa;begin p:=prim^.urm; dispose(prim); prim:=p;end;

inf urm

p

inf urm .............

inf urminf urm

inf urm

prim

inf urm

1.

2.

3.

prim

Page 27: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

inf urm

inf urm

p

inf urm

prim

inf urm

q

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

se parcurge lista pentru a afla adresa nodului aflat înaintea cheii de adresă p; adresa ovom memora în pointerul q q:= prim; while q^.urm<>p do q:=q^.urm;adresa memorată în zona urm a nodului p va fi reţinută în zona urm a nodului q q^.urm:=p^.urmse şterge fizic nodul p dispose(p);

Procedure sterge_dupa(p:adresa);var q:adresa;begin q:=prim; while q^.urm<>p do q:=q^.urm q^.urm:=p^.urm; dispose(p);end;

inf urminf urm

1.

2.

3.

qp^.urm

inf nil

inf urm

Page 28: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

inf urm

prim

inf urm

p

inf nil

ultim

............... inf urm

Parcurgem nodurile liste cu ajutorul unui pointer p care, plecând de la primul nod va referi pe rând fiecare nod al listei : prelucrăm informaţia din nodul p, mutăm p la următorul nod şi prelucrarea continuă.

Cât timp pointerul p nu a ajuns la sfârşitul listei {p<>nil}: - prelucrăm informaţia din nodul p (p^.inf) - mutăm pointerul p la nodul următor {p:=p^.urm}

Procedure parcurgere(prim:adresa);var p:adresa;begin p:=prim; while p<>nil do begin {prelucrarea informatiei din nodul p} p:=p^.urm; end;end;

inf urminf urminf urminf urm

Page 29: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Funcţia returnează : - nil, dacă valoarea x nu a fost găsită în listă; - adresa nodului ce are completată zona inf cu valoarea memorată în variabila x;

Cât timp pointerul p nu a ajuns la sfârşitul listei {p<>nil} şi informaţia memorată în zona inf a nodului curent este diferită de x : - mutăm pointerul p la nodul următor

Function cauta(prim:adresa;x:byte):adresa;var p:adresabegin p:=prim; while (p^.inf<>x) and (p<>nil) do p:=p^.urm; cauta:=p;end;

Page 30: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

prim

ultim

se alocă spaţiu pentru nodul prim new(prim);completarea zonei inf pentru noul nod write(‘dati informatia:’); readln(prim^.inf);se va completa zona de legătură urm cu constanta nil prim^.urm:=nil;se va completa zona de legătură ant cu valoarea constantei nil prin^.ant:=nil;pointerul ultim memoreaza adresa nodului prim ultim:=prim

Procedure creare_prim(var prim,ultim:adresa);begin new(prim); write(‘dati informatia:’); readln(prim^.inf); prim^.urm:=nil; prim^.ant:=nil; ultim:=prim; end;

1.

2.

3.

4.

inf nilnil

5.

Page 31: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

se alocă spaţiu pentru noul nod p new(p);se completează zona inf cu informaţia utilă write(‘dati informatia’); readln(p^.inf);completarea zonei urm cu constanta nil p^.urm:=nil;completarea zonei de legătură ant a nodului p cu adresa ultimului nod din listă p^.ant:=ultim;se leagă nodul p de nodul ultim ultim^.urm:=p;se actualizează valoarea variabilei ultim cu adresa lui p ultim:=p;

ant inf ..............

ant inf nil

ultim

Procedure adaugare_sfarsit(var ultim:adresa);var p:adresa;begin new(p); write(‘dati informatia:’); readln(p^.inf); p^.urm:=nil; p^.ant:=ultim; ultim^.urm:=p; ultim:=p;end;

p

1.

2.

3.

4.

5.

6.

ultim

urmnil

ant inf urm ant inf urm

Page 32: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

inf urm ..............nil inf urm

alocarea spaţiului în heap pentru noul nod notat p new(p); completarea zonei inf cu informaţia utilă write(‘Dati informatia:’); readln(p^.inf); completarea zonei de legătură ant a nodului p cu constanta nil p^.ant:=nil; se leagă nodul p de nodul prim prim^.ant:=p; p^.urm:=prim; se actualizează adresa primului nod din listă cu valoarea nodului p prim:=p;

Procedure adauga_in_fata(var prim:adresa);var p:adresa;begin new(p); write(‘dati informatia:’); readln(p^.inf); p^.ant:=nil; prim^.ant:=p; p^.urm:=prim; prim:=p;end;

p prim

1.

2.

3.

5.

4.

nilant

ant inf urm ant inf urm

Page 33: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

ant inf urm

p^.urm

ant inf urmant inf urm ant inf urm

q^.urm

ant urm

q

se alocă spaţiu pentru noul nod q new(q );se copie informaţia din nodul p în nodul q q^.inf:=p^.inf;se citeşte noua informaţie în p write(‘dati informatia: ’); readln(p^.inf);se leagă nodul q la listă q^.urm:=p^.urm; p^.urm^.ant:=q; p^.urm:=q; q^.ant:=p;

Procedure adauga_in_fata(var p:adresa);var q:adresa;begin new(q); q^.inf:=p^.inf; write(‘dati informatia:’); readln(p^.inf); q^.urm:=p^.urm; q^.urm^.ant:=q; p^.urm:=q; p^.ant:=p;end;

1.

2.

3.

4.

inf

p

... ...

Page 34: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

ant inf urm

ant inf urm

ant inf urmant inf urm

se alocă spaţiu pentru noul nod q new(q );se citeşte noua informaţie în q write(‘dati informatia: ’); readln(q^.inf);se leagă nodul q la listă q^.urm:=p^.urm; p^.urm^.ant:=q; p^.urm:=q; q^.ant:=p;

... ...

1.

2.

3.

Procedure adauga_după(var p:adresa);var q:adresa;begin new(q); write(‘dati informatia:’); readln(q^.inf); q^.urm:=p^.urm; q^.urm^.ant:=q; p^.urm:=q; p^.ant:=p;end;

q

p^.urmq^.urmp

Page 35: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

nil inf urm

prim p

inf urm ..............

memorăm adresa celui de-al doilea nod din listă în pointerul p,operaţie necesară întrucât după ştergere al doilea nod va deveni primul p:=prim^.urm;se completează zona de legătură ant a pointerului p cu valoarea constantei nil p^.ant:=nil;se şterge fizic primul nod dispose(prim);se reactualizează valoarea pointerului prim prim:=p;

Procedure sterge_primul(var prim:adresa);var p:adresa;begin p:=prim^.urm; p^.ant:=nil; dispose(prim); prim:=p;end;

1.

2.

3.

4.

antnil

prim

Page 36: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Procedure sterge_nod(p:adresa);begin p^.ant^.urm:=p^.urm; p^.urm^.ant:=p^.ant; dispose(p);end;

deoarece nodul p se şterge din listă este necesară crearea unor noi legături între: nodul din faţa nodului p şi nodul de după nodul p p^.ant^.urm:=p^.urm; p^.urm^.ant:=p^.ant;se şterge fizic nodul p dispose(p);

..............p

ant inf urmant inf urm

p^.ant p^.urm

ant inf urm....

1.

2.

p^.ant^.urm

Page 37: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Procedure parcurgere(prim:adresa);var p:adresa;begin p:=prim; writeln; write(‘rezultatul este:’); while p<>nil do begin {prelucrarea informatiei din nodul p } p:=p^.urm; end; writeln;end;

Parcurgem nodurile liste cu ajutorul unui pointer p care, plecând de la primul nod va referi pe rând fiecare nod al listei : prelucrăm informaţia din nodul p,mutăm p la următorul nod şi prelucrarea continuă.

Cât timp pointerul p nu a ajuns la sfârşitul listei {p<>nil}: - prelucrăm informaţia din nodul p (p^.inf) - mutăm pointerul p la nodul următor {p:=p^.urm}

Page 38: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Funcţia returnează : - nil, dacă valoarea x nu a fost găsită în listă; - adresa nodului a cărui zonă inf este completată cu valoarea memorată în variabila x;

Cât timp pointerul p nu a ajuns la sfârşitul listei {p<>nil} şi informaţia memorată în zona inf a nodului curent este diferită de x : - mutăm pointerul p la nodul următor

Function cauta(prim:adresa;x:byte):adresa;var p:adresa;begin p:=prim; while( p<>nil) and (p^.inf<>x) do p:=p^.urm; cauta:=p;end;

Page 39: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

ant inf nil

ultim

se memorează adresa penultimului nod din listă în nodul p p:=ultim^.ant;se completează zona urm a nodului p cu valoarea constantei nil deoarece nodul p va deveni ultimul nod din listă p^.urm:=nil;se şterge fizic ultimul nod din listă dispose(ultim);se reactualizează valoarea pointerului ultim ultim:=p;

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

ultim^.ant

ant inf urmurminfant

1.

2.

3.

4.

p

nil

ultim

Procedure sterge_ultim(var ultim:adresa);var p:adresa;begin p:=ultim^.ant; p^.urm:=nil; dispose(ultim); ultim:=p;end

Page 40: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Nodurile unei liste dublu înlănţuite prezintă trei zone :

type adresa=^ nod ;

nod= record

inf :tip_informatie;

urm,ant : adresa;

end;

Var prim ,ultim :adresă

Pentru a gestiona lista se folosesc două variabile reper :

•prim care conţine adresa primului element din listă ;•ultim care conţine adresa ultimului element din listă;

Adresa de legătură cu nodul următor

Informaţiautilă

Adresa de legătură cu nodul anterior

ant inf urm

Observaţie : Ultimul element al listei (cel aflat la adresa ultim) conţine ca informaţie de legăturăcu nodul următor valoarea constantei predefinite nil, cu semnificaţia că după acest element nu mai există în listă nici un alt element .Primul element al listei (cel aflat la adresa prim) conţine ca informaţie de legătură cu nodul anterior valoarea constantei nil, cu semnificaţia că înaintea acestui nod nu mai există nici un alt element.

nil inf urm

prim

inf urm.....…ant ant inf nil

ultim

Lista dublu înlănţuită este o structură de forma

Page 41: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Planificare calendaristica

Unitate de invatare

Proiect de

tehnologie didactica

Page 42: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Şcoala………………………... Profesor……………………………Disciplina……………………. Clasa/nr. ore pe săpt./anul………

Planificare calendaristică

Unităţi deînvăţare

Obiective de referinţă/Competenţe specifice

Conţinuturi Numărorealocate

Săptămâna Obs.

•Unităţile de învăţare se indică prin titlurile temelor stabilite de către profesor.•În rubrica Obiective de referinţă/Competenţe specifice se trec numerele obiectivelor de referinţă/competenţelor specifice din programa şcolară.•Conţinuturile selectate sunt cele extrase din lista de conţinuturi a programei.•Numărul de ore alocate se stabileşte de către profesor în funcţie de experienţa acestuia şi de nivelul clasei.Întregul cuprins al planificării are valoare orientativă, eventualele modificări determinate de aplicarea efectivă la clasă putând fi consemnate în rubrica Observaţii.

Page 43: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

În rubrica referitoare la Conţinuturi apar inclusiv detalieri de conţinut necesare în explicitarea anumitor parcursuri, respectiv în cuplarea lor la baza proprie de cunoaştere a elevilor.În rubrica Obiective de referinţă/Competenţe specifice se trec numerele obiectivelor de referinţă/competenţelor specifice din programa şcolară.Activităţile de învăţare pot fi cele din programa şcolară, completate, modificate sau chiar înlocuite de altele, pe care profesorul le consideră adecvate pentru atingerea obiectivelor propuse. Activităţile de învăţare se construiesc prin corelarea obiectivelor de referinţă la conţinuturi şi presupun orientarea către un anumit scop, redat prin tema activităţii. În momentul propunerii lor spre rezolvare elevilor, activităţile de învăţare vor fi transpuse într-o anumită formă de comunicare inteligibilă nivelului de vârstă. Rubrica Resurse cuprinde specificări de timp, de loc, forme de organizare a clasei, material didactic folosit etc.În rubrica Evaluare se menţionează instrumentele sau modalităţile de evaluare aplicate la clasă.

Şcoala………………………... Clasa/nr. ore pe săpt...…………………Disciplina……………………. Săptămâna/anul…………………………

Proiectul unităţii de învăţareUnitatea de învăţare……………………Nr. ore alocate…………………………

Conţinuturi Obiective de referinţă/Competenţe specifice

Activităţi de învăţare

Resurse Evaluare

Page 44: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Data: Obiectul: InformaticăClasa: a XI-a - profil matematică-informatică Tema: Liste simplu înlănţuite.Tipul lecţiei: Lecţie de fixare şi sistematizare.Durata lecţiei: 50 minute Obiectivul funadamental: Recapitularea şi fixarea cunoştinţelor privind modul de declarare şi de

utilzare a listelor simplu înlănţuite alocate static.Competenţe specifice: C1.Elevii vor şti să definească structura de date de tip listăC2. Elevii vor şti cum se implementează o listă simplu înlănţuită;C3. Elevii vor şti care sunt operaţiile elementare ce se pot efectua la

nivelul unei liste simplu înlănţuite;C4. Elevii vor cunoaşte modul de selectare a unui element, precum şi cum

se realizează crearea, respectiv afişarea informaţiilor dintr-o listă simplu înlănţuită;

C5. Elevii vor fi capabili să rezolve probleme ce necesită folosirea listelor simplu înlănţuite;

PROIECT DE TEHNOLOGIE DIDACTICĂ

Page 45: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

Metode şi procedee didactice:

Explicaţia, conversaţia, exerciţiul, demonstraţia.

Mijloace de învăţământ:

Calculatorul, manualul;

Mediul de instruire:

Laboratorul de informatică;

Forme de organizare:

Activitate frontală

Resurse:

- pedagogice:cursuri de informatică, metodica predării informaticii

- oficiale: programa şcolară

- temporale: 50 minute

- psihologice: cunoştinţele dobândite de către elevi la disciplina

informatică

Page 46: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

SUCCESIUNEA ŞI DESFĂŞURAREA MOMENTELOR LECŢIEI I.Moment organizatoric:•obiective urmărite: crearea unei atmosfere specifice bunei desfăşurări a

activităţii didactice;•activitatea profesorului: verificarea prezenţei, asigurarea că elevii sunt

pregătiţi pentru începerea lecţiei;•activitatea elevului: pregătirea caietului;•metode şi procedee didactice: metoda conversaţiei, explicaţia;

II. Captarea atenţiei şi trezirea interesului pentru lecţie•activitatea profesorului: se va preciza elevilor că urmează a fi recapitulată

structura de tip listă simplu înlănţuită şi vor fi rezolvate probleme ce necesită

folosirea acestei structuri de date . •activitatea elevului: ascultă şi notează cele prezentate sau notate pe tablă de

către profesor şi pune întrebări cu care să poată lămuri contextul în care se va

desfăşura lecţia;•metode şi procedee didactice: metoda conversaţiei, metoda problematizării,

modelarea;

Page 47: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

III.Anunţarea lecţieiSe poartă un dialog pe tema: “Lista simplu înlănţuită”.activitatea profesorului: sunt adresate clasei următoarele întrebări:Care este definiţia unei liste simplu înlănţuite?Ce alte structuri de date cunoaşteţi?Cum se implementează structura de date de tip listă simplu înlănţuită?Care sunt principalele operaţii ce se pot efectua la nivelul unei liste simplu înlănţuite? după care se va propune elevilor spre rezolvare următoarea problemă:Fiind dată o matrice rară (spunem că o matrice este rară dacă cel puţin două treimi din elementele mulţimii sunt nule) să se alcătuiască o listă înlănţuită în care elementele au forma (linia, coloana, valoarea) şi valoarea ≠0.să se listeze elementele aflate pe diagonala principală;să se determine elementul minim de pe diagonala principală;să elimine elementul de valoare maximă;determinaţi suma şi produsul a două astfel de matrici;Datele de intrare se citesc din fişierul text date.txt.activitatea elevului: răspunde la întrebările adresate şi este atent la completările aduse de către profesor după care trece la rezolvarea problemei propuse;metode şi procedee didactice: metoda conversaţiei, a demonstraţiei, a problematizării şi a modelării;

Page 48: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

IV.Asigurarea conexiunii inverse-activitatea profesorului: profesorul propune precizarea conţinutului listei pentru matricea:-activitatea elevului: elevii rezolvă pe caiete noile cerinţe.

0000900

0010000

0002100

V. Evaluarea cunoştinţelor dobândite-activitatea profesorului: profesorul verifică corectitudinea soluţiilor scrise de elevi. Elevii care nu au înţeles modul de memorare a matricei cu ajutorul listelor, sunt solicitaţi să iasă la tablă, fiind urmăriţi şi ajutaţi de colegii lor din bancă(care au rezolvat corect)-activitatea elevului: elevii reţin şi notează observaţiile făcute-metode şi procedee: metoda conversaţiei, verificarea frontală

Page 49: STRUCTURI DE DATE  ALOCATE STATIC  ŞI DINAMIC

VI. Prezentarea temei pentru acasă-activitatea profesorului:li se propun elevilor spre rezolvare următoarele probleme:Considerând polinoamele cu coeficienţi reali(nenuli), ca fiind reprezentate sub forma unor liste înlănţuite în care un element reprezintă un monom caracterizat prin rangul şi valoarea coeficientului să se determine valoarea unui astfel de polinom într-un punct dat X. Polinomul se va citi din fişierul date.txt iar valoarea lui x se va introduce de la tastatură.Exemplu: Pentru fişierul:5 0 6 4 –8 12polinomul corespunzător este:p=5+6*x4-8*x12 Să se determine suma a două astfel de polinoame.Într-o listă simplu înlănţuită se memorează n persoane. Să se verifice dacă, pentru o persoană dată p, există în listă o persoană cu acelaşi nume ca şi p. Dacă nu, să se insereze în poziţia k în listă noua persoană p. Discuţie după valoarea lui k. -activitatea elevului: notează tema în caiet precum şi indicaţiile date de profesor-metode şi procedee folosite: metoda conversaţiei