Sunteți pe pagina 1din 49

STRUCTURI DE DATE

ALOCATE STATIC I DINAMIC

Scopul lucrrii

Prezentare

CUPRINSUL LUCRARII
Cap. I: Structuri de date
Cap. II: Structuri de date alocate static
Cap. III: Alocarea dinamic a memoriei
Cap. IV : Consideraii metodice privind predarea structurilor de date
Cap. V : Probleme propuse

back

CAPITOLUL I: STRUCTURI DE DATE


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 Mulimea
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. Reeaua.
I.5. Structuri dinamice externe
Cuprins

CAPITOLUL II: STRUCTURI DE DATE


ALOCATE STATIC
II.1.Structura memoriei la execuia unui program.
II.2.Variabile statice. Alocarea static a memoriei.
II.3.Reprezentarea secvenial a listelor liniare.
II.3.1 Stiva.
II.3.2 Coada.
II.3.3 Liste oarecare.
II.4.Reprezentarea nlnuit a listelor liniare.
II.4.1 Stiva
II.4.2 Coada
II.4.3 Lista simplu nlnuit
II.4.4 Lista circular
II.4.5 Lista dublu nlnuit
II.5.Comparaie ntre alocarea secvenial i alocarea nlnuit
Prezentare

Cuprins

CAPITOLUL III: ALOCAREA DINAMIC A MEMORIEI

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 nlnuit.
III.2.4 Lista circular.
III.2.5 Lista dublu nlnuit.
III.3. Comparaie ntre alocarea static i alocarea dinamic.

Cuprins

CAPITOLUL IV: CONSIDERAII METODICE PRIVIND


PREDAREA STRUCTURILOR DE DATE DE TIP
LIST, STIV, COAD
IV.1. Consideraii generale
IV.1.1. Principiile didactice
IV.1.2 Obiectivele majore ale studiului informaticii. Precizarea obiectivelor.
IV.1.3. Metode generale de nvare
IV.1.4. Instrumente(mijloace de predare)
IV.1.5. Metode de evaluare pentru atingerea obiectivelor
IV.2. Organizarea leciei de informatic
IV.2.1. Calitatea cunotinelor asimilate
IV.2.2. Formarea limbajului de specialitate
IV.2.3. Exprimarea fluent n limbajul de specialitate. Exerciiul oral.
IV.2.4. Repetarea materiei parcurse
IV.2.5. Evaluarea rezultatelor colare. Modele de teste i fie de evaluare.
IV.2.6. Aprecierea cunotinelor elevului
IV.3. Planificarea i pregtirea profesorului pentru lecie.
IV.3.1. Planificarea activitii didactice
IV.3.2. Etapele eseniale ale proiectrii demersului didactic
IV.3.3. Modele de proiecte de tehnologie didactic
Prezentare

Cuprins

ncepnd cu a doua jumtate a secolului al XX-lea, apariia i dezvoltarea


calculatoarelor electronice au declanat o nou revoluie n toate domeniile vieii
economice i sociale. La baza acestei revoluii stau cercetrile fundamentale din
domeniul matematicii i realizrile din domeniul microelectronicii.
Diversificarea spectaculoas a mijloacelor tehnice din domeniul
microelectronicii a dus la o dezvoltare continu a software-ului, necesitnd totodat
adecvarea structurilor de date la aplicaii din ce n ce mai complexe. Astfel au aprut
structurile de date dinamice, pe lng cele statice i semistatice, care permit o alocare
dinamic att n cadrul structurii ct i la nivelul ntregii structuri. Lista liniar ca
structur de date dinamic s-a dovedit a fi util ntr-o gam foarte variat de
aplicaii, unde se pot obine economie de timp i memorie, o minimizare a numrului
de operaii, ajungndu-se la algoritmi eficieni 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 ctorva modaliti de reprezentare, evideniindu-se avantajele fiecreia
n parte.

back

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 execuiei
programului acelai loc. O astfel de structur se numete static. Alocarea de
memorie fcut pentru o structur static este o alocare static att la nivelul
ntregii structuri, ct 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 execuiei programului
atunci o astfel de structur se numete 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 execuiei programului pe msura nevoii de prelucrare, fr a avea o
dimensiune constant, atunci structura este dinamic. Pentru o structur
dinamic alocarea este dinamic att la nivelul componentelor ct i la nivelul
ntregii structuri.

back

Toate variabilele declarate ntr-o seciune var sunt alocate static i se


numesc variabile statice. O variabil static este declarat ntr-o seciune var a
unui bloc sub un anumit nume, prin intermediul cruia va fi referit n cadrul
acestuia, alocndu-i-se memorie la activarea blocului. Variabila va exista(va
ocupa memoria alocat ei) atta timp ct blocul n care a fost declarat este activ.
n urma declarrii, compilatorul Pascal rezerv automat pentru fiecare
variabil static o zon fix n memoria intern RAM, alctuit din locaii
succesive de memorie. Mrimea acestei zone depinde de tipul variabilei: 2 octei
pentru integer , 6 pentru real, 1 octet pentru char etc.
Spaiul de memorie aferent unor astfel de date se definete i se rezerv
la dimensiune maxim, prestabilit, ca spaiu propriu care nu poate fi
disponibilizat i nici mprit cu alte date, chiar dac, n momentul diverselor
execuii ale programului, nu este n ntregime utilizat (rezervare static sau la
momentul compilrii).
Exist dou moduri de alocare a acestor structuri de date: alocare
secvenial i alocare nlnuit

back

Elementele listei vor fi stocate ntr-un tablou de nregistrri. Cmpurile unei


nregistrri vor conine n mod specific informaiile pe care dorim s le
reprezentm n list.
Memorarea listei liniare n memoria calculatorului se va realiza prin
memorarea elementelor listei n locaii succesive de memorie, nod dup nod. Se
va folosi un tablou n care vor fi reinute elementele listei, tabloul avnd
dimensiunea max.
const nmax=20;
type element=record
cmp1:tip_info_1;
cmp2:tip2_info_2;
..
end;
lista=array[1..nmax] of element;
var l:lista;
PRIM,ULTIM:integer;
Variabilele cu ajutorul crora vom manipula elementele listei sunt :PRIM i
ULTIM care identific primul, respective ultimul element al listei.

back

n cazul reprezentrii nlnuite, elementele listei nu sunt aezate


succesiv, fiind nevoie s precizm n mod suplimentar ordinea lor real.
Fiecare element al listei trebuie s indice unde se afl elementul
urmtor(anterior). n acest caz va trebui s tim unde se afl primul
element al listei, pentru a avea acces apoi, pe baza nlnuirilor, i la
elementele urmtoare ale listei. De asemenea, este necesar s tim cnd
nu mai exist succesor(este vorba de ultimul element).
Implementarea alocrii nlnuite se realizeaz cu ajutorul vectorilor.
Lista va fi un vector care va conine informaia ataat nodului(de

exemplu, un numr ntreg) i adresa nodului urmtor. 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 informaia de adres, care este tot de tip integer, i restul
informaiei memorate, vom reboteza tipul integer.

next

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; - reine 1 dac componenta corespunztoare 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

Alocarea nlnuit necesit spaiu suplimentar de memorie pentru gestionarea


locaiilor libere/ocupate.
Extragerea unui nod dintr-o list liniar alocat nlnuit se realizeaz mult
mai uor dect extragerea unui nod dintr-o list liniar alocat secvenial.
Pentru alocarea secvenial o asemenea tergere implic n general deplasarea
unei pri din list n locaii diferite. O concluzie similar se obine n cazul
inserrii unui nod n cadrul unei liste liniare.
Accesul la diferite pri din list este mult mai rapid n cazul alocrii
secveniale. Aa cum am vzut, locaia nodului k din list n cazul alocrii
secveniale este o funcie liniar de k, deci pentru a obine accesul la acest nod
se consum un timp constant. n cazul alocrii nlnuite acest acces necesit k
iteraii urmrind referinele a k-1 noduri. Astfel utilizarea memoriei nlnuite
este mai eficient cnd parcurgerea listei se face secvenial i nu aleatoriu.

Alocarea nlnuit permite o mai mare flexibilitate n ceea ce privete reunirea


a dou sau mai multor liste ntr-o singur list sau desfacerea unei liste n mai
multe pri.
back

Spre deosebire de variabilele statice, variabilele dinamice se aloc i se


distrug la cererea utilizatorului; ele nu sunt declarate ntr-o seciune var, deci
nu se pot identifica prin nume i nici nu exist pe toat durata activrii blocului
n care s-au creat. Din acest motiv, variabilele dinamice prezint un mare
avantaj comparativ cu cele statice, i anume posibilitatea utilizrii mult mai
eficiente a memoriei.
Variabilele dinamice se aloc dinamic ntr-o zon special, numit
HEAP care este eliberat la distrugerea variabilei dinamice. Neavnd 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 rmas n momentul
executrii 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

Liste. Noiuni introductive


Lista simplu nlnuit
Definire
Operaii specifice
Lista dublu nlnuit

Definire
Operaii specifice

Definiie :
O list este o structur de date dinamic n care att
adugarea ct i extragerea unui element se poate face de
pe orice poziie.

Exist mai multe tipuri de liste:


Liste simplu nlnuite
Liste dublu nlnuite
Liste circulare
Stive, cozi(cazuri particulare de liste)
next

Lista simplu nlnuit este o structur de forma:


inf

urm

inf

urm

inf

urm

...........

inf

nil

ultim

prim

Nodurile unei liste simplu nlnuite prezint dou zone :


informaia
util

Inf

adres de
legtur

urm

type adresa=^ nod ;


nod= record
inf :tip_informaie;
urm : adres;
end;
Var prim ,ultim :adres

Observaie :
Ultimul element al listei (cel aflat la adresa
ultim) conine ca informaie de legtur valoarea
constantei predefinite nil, cu semnificaia c dup
acest element nu mai exist n list nici un alt
element .

Pentru a gestiona lista se folosesc dou variabile reper :


prim care conine adresa primului element din list ;
ultim care conine adresa ultimului element din list;

I.Crearea primului nod


II.Adugare de noduri :
adugare la sfritul listei
adugare la nceputul listei
adugare dup un nod precizat prin adres
adugare n faa 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.Cutarea unui nod n list

Crearea primului nod


Adugare de noduri :
adugare la sfritul listei
adugare la nceputul listei
adugare dup un nod precizat prin adres
adugare n faa 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
Cutarea unui nod n list

1. se aloc spaiu de memorie pentru noul nod


new (prim);

inf

urm

2. se completeaz informaia util din noul nod


inf nil
write (dati informatia :) ;
readln (prim^.inf) ;
prim
3. se completeaz zona de legtur cu nil
ultim
prim^.urm:=nil;
4. se memoreaz adresa nodului prim n pointerul ultim
ultim:=prim

Procedure creare_prim (var prim,ultim:adresa);


begin
new (prim) ;
write (dati informatia :) ;
readln (prim ^.inf) ;
prim ^.urm:=nil ;
ultim:=prim;
end;

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

inf

urm

inf

urm

......

inf

urm

inf

urm

inf

urm

inf

urm

inf
inf

urm
nil

inf

nil

prim

1. se aloc spaiu in heap pentru noul nod


new(p);
2. completarea informaiei utile din nodul p
write(dati valoarea: );
readln(p^.inf);
3. se va completa zona de legtur a nodului
p cu valoarea constantei nill
p^.urm:=nil;
4. se leag nodul p la lista
ultim^.urm:=p;
5. se actualizeaz valoarea variabilei ultim cu
adresa lui p
ultim:=p;

ultim

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;

inf

urm

inf

urm

inf urm

inf urm

prim

inf

......

1. se aloc spaiu n heap pentru un nou nod

notat p
new(p);
2. se completeaz informaia util
write(dati valoarea:);
read(p^.inf);
3. se completeaz zona de legtur a nodului p
cu adresa primului nod din lista
p ^.urm :=prim;
4.
se reactualizeaz adresa primului nod din lista
cu valoarea nodului p
prim:=p ;

urm

inf

urm

inf urm
inf

inf
inf

nil

ultim

procedure adaugare_inceput(var prim:adresa);


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

.....

inf

urm

inf

urm

inf

urm

inf

urm

inf urm

inf

urm

inf

urm

......

q^.urm
p^.urm

inf urm

1. se aloc spaiu n heap pentru noul nod

new(q);
2. se completeaz zona inf pentru noul nod
writeln(dati informatia:);
readln(q^.inf);
3. se leag noul nod la list
q^.urm:=p^.urm;
p^.urm:=q;

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

.....

urm

inf urm

inf

urm

inf

inf urm

inf

inf

urm

inf

urm

urm

urm

......

p^.urm
q^.urm

q
1. se aloc spaiu pentru noul nod q
new(q );
2. se copie informaia din nodul p n
nodul q
q^.inf:=p^.inf;
3. se citete noua informaie n p
write(dati informatia: );
readln(p^.inf);
4. se leag nodul q la list
q^.urm:=p^.urm;
5. 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

urm

inf urm

prim
q

inf

inf urm

inf

urm

.................
q

1. 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;
2. penultimul nod va deveni ultimul dup
tergere, deci legtura sa urmtoare
devine nil
q^.urm:=nil;
3. se terge fizic ultimul nod
dispose(ultim);
4. se reactualizeaz valoarea pointerului
ultim
ultim:=q;

urm

inf

urm

nil
inf urm

inf

nil

ultim

ultim

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

urm

urm

inf

urm

inf urm

inf urm

inf

urm

prim

p
prim

inf

1. se memoreaz adresa celui de-al doilea nod


din list n pointerul p, operatie necesar
ntruct dup tergere al doilea nod va deveni
primul
p:=prim^.urm;
2. se terge fizic primul nod
dispose(prim);
3. 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

inf urm

prim
q

urm

inf

urm

inf

urm

inf urm

inf

urm

inf

nil

inf

.........
q

1. se parcurge lista pentru a afla adresa nodului


aflat naintea cheii de adres p; adresa o
vom memora n pointerul q
q:= prim;
while q^.urm<>p do
q:=q^.urm;
2. adresa memorat n zona urm a nodului p va
fi reinut n zona urm a nodului q
q^.urm:=p^.urm
3. se terge fizic nodul p
dispose(p);

.........

p^.urm

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

urm

inf urm

inf

inf

urm

inf urm

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

prim

urm

inf

urm

inf urm

inf

nil

ultim

Parcurgem nodurile liste cu ajutorul unui pointer p care, plecnd de la primul nod
va referi pe rnd fiecare nod al listei : prelucrm informaia din nodul p, mutm p la
urmtorul nod i prelucrarea continu.

Ct timp pointerul p nu a ajuns la sfritul


listei {p<>nil}:
- prelucrm informaia din nodul p (p^.inf)
- mutm pointerul p la nodul urmtor
{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;

Ct timp pointerul p nu a ajuns la sfritul listei {p<>nil} i informaia memorat


n zona inf a nodului curent este diferit de x :
- mutm pointerul p la nodul urmtor

Funcia returneaz :
- nil, dac valoarea x nu a fost gsit n list;
- adresa nodului ce are completat zona inf
cu valoarea memorat n variabila x;

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

1. se aloc spaiu pentru nodul prim


new(prim);
2. completarea zonei inf pentru noul nod
write(dati informatia:);
readln(prim^.inf);
nil inf nil
3. se va completa zona de legtur urm
cu constanta nil
prim
prim^.urm:=nil;
ultim
4. se va completa zona de legtur ant
cu valoarea constantei nil
Procedure creare_prim(var prim,ultim:adresa);
prin^.ant:=nil;
begin
5. pointerul ultim memoreaza adresa
new(prim);
nodului prim
write(dati informatia:);
ultim:=prim
readln(prim^.inf);
prim^.urm:=nil;
prim^.ant:=nil;
ultim:=prim;
end;

ant

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

ant

inf
inf

urm
nil
urm

ultim
1. se aloc spaiu pentru noul nod p
new(p);
2. se completeaz zona inf cu informaia util
write(dati informatia);
readln(p^.inf);
3. completarea zonei urm cu constanta nil
p^.urm:=nil;
4. completarea zonei de legtur ant a
nodului p cu adresa ultimului nod din list
p^.ant:=ultim;
5. se leag nodul p de nodul ultim
ultim^.urm:=p;
6. se actualizeaz valoarea variabilei ultim
cu adresa lui p
ultim:=p;

ant inf

urm

ant

nil

inf

p
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;

ant

inf urm

ant inf

urm

nil

inf

ant
nil inf

urm

urm

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

prim

1. alocarea spaiului n heap pentru noul nod


notat p
new(p);
2. completarea zonei inf cu informaia util
write(Dati informatia:);
readln(p^.inf);
3. completarea zonei de legtur ant a nodului
p cu constanta nil
p^.ant:=nil;
4. se leag nodul p de nodul prim
prim^.ant:=p;
p^.urm:=prim;
5. 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;

...

ant

inf

urm

ant inf

ant

urm

inf

urm

...

q^.urm
p^.urm

p
ant

urm

q
1. se aloc spaiu pentru noul nod q
new(q );
2. se copie informaia din nodul p n
nodul q
q^.inf:=p^.inf;
3. se citete noua informaie n p
write(dati informatia: );
readln(p^.inf);
4. 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;

...

ant

inf

urm

ant

inf

urm

ant

inf

urm

...

q^.urm
p^.urm

p
ant

inf

urm

q
1. se aloc spaiu pentru noul nod q
new(q );
2. se citete noua informaie n q
write(dati informatia: );
readln(q^.inf);
3. se leag nodul q la list
q^.urm:=p^.urm;
p^.urm^.ant:=q;
p^.urm:=q;
q^.ant:=p;

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;

nil
prim

inf

urm

nil inf
ant

urm

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

p
prim

1. memorm adresa celui de-al doilea nod din


list n pointerul p,operaie necesar
ntruct dup tergere al doilea nod va
deveni primul
p:=prim^.urm;
2. se completeaz zona de legtur ant a
pointerului p cu valoarea constantei nil
p^.ant:=nil;
3. se terge fizic primul nod
dispose(prim);
4. 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;

....

ant

inf

p^.ant

urm

ant

inf

urm

1. deoarece nodul p se terge din list este necesar


crearea unor noi legturi ntre: nodul din faa nodului
p i nodul de dup nodul p
p^.ant^.urm:=p^.urm;
p^.urm^.ant:=p^.ant;
2. se terge fizic nodul p
dispose(p);

ant

inf

urm

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

p^.urm
p^.ant^.urm

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

Parcurgem nodurile liste cu ajutorul unui pointer p care, plecnd de la primul


nod va referi pe rnd fiecare nod al listei : prelucrm informaia din nodul p,mutm
p la urmtorul nod i prelucrarea continu.

Ct timp pointerul p nu a ajuns la sfritul


listei {p<>nil}:
- prelucrm informaia din nodul p (p^.inf)
- mutm pointerul p la nodul urmtor
{p:=p^.urm}

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;

Ct timp pointerul p nu a ajuns la sfritul listei {p<>nil} i informaia memorat


n zona inf a nodului curent este diferit de x :
- mutm pointerul p la nodul urmtor
Funcia returneaz :
- nil, dac valoarea x nu a fost gsit n list;
- adresa nodului a crui zon inf este completat
cu valoarea memorat n variabila x;
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;

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

ant

inf

urm

ant

inf

urm
nil

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

ant

inf

nil

ultim

Procedure sterge_ultim(var ultim:adresa);


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

Lista dublu nlnuit este o structur de forma

nil

inf

urm

ant inf

urm

.....

ant

inf

nil

ultim

prim

Nodurile unei liste dublu nlnuite prezint trei zone :


Adresa de
legtur cu
nodul anterior

ant

Adresa de

Informaia legtur cu
util
nodul urmtor

inf

urm

type adresa=^ nod ;


nod= record
inf :tip_informatie;
urm,ant : adresa;
end;
Var prim ,ultim :adres

Observaie :
Ultimul element al listei (cel aflat la adresa
ultim) conine ca informaie de legturcu nodul
urmtor valoarea constantei predefinite nil, cu
semnificaia c dup acest element nu mai exist
n list nici un alt element .Primul element al listei
(cel aflat la adresa prim) conine ca informaie de
legtur cu nodul anterior valoarea constantei nil,
cu semnificaia c naintea acestui nod nu mai
exist nici un alt element.

Pentru a gestiona lista se folosesc dou variabile reper :


prim care conine adresa primului element din list ;
ultim care conine adresa ultimului element din list;

Planificare
calendaristica
Proiect
de
tehnologie didactica

Unitate de
invatare

coala...
Profesor
Disciplina.
Clasa/nr. ore pe spt./anul
Planificare calendaristic
Uniti de
nvare

Obiective de
referin/
Competene
specifice

Coninuturi

Numr
ore
alocate

Sptmna

Obs.

Unitile de nvare se indic prin titlurile temelor stabilite de ctre profesor.


n rubrica Obiective de referin/Competene specifice se trec numerele
obiectivelor de referin/competenelor specifice din programa colar.
Coninuturile selectate sunt cele extrase din lista de coninuturi a programei.
Numrul de ore alocate se stabilete de ctre profesor n funcie de experiena
acestuia i de nivelul clasei.
ntregul cuprins al planificrii are valoare orientativ, eventualele modificri
determinate de aplicarea efectiv la clas putnd fi consemnate n rubrica Observaii.

coala...
Disciplina.

Clasa/nr. ore pe spt...


Sptmna/anul

Proiectul unitii de nvare


Unitatea de nvare
Nr. ore alocate
Coninuturi

Obiective de
referin/
Competene
specifice

Activiti de
nvare

Resurse

Evaluare

n rubrica referitoare la Coninuturi apar inclusiv detalieri de coninut necesare n explicitarea anumitor
parcursuri, respectiv n cuplarea lor la baza proprie de cunoatere a elevilor.
n rubrica Obiective de referin/Competene specifice se trec numerele obiectivelor de
referin/competenelor specifice din programa colar.
Activitile de nvare pot fi cele din programa colar, completate, modificate sau chiar nlocuite de
altele, pe care profesorul le consider adecvate pentru atingerea obiectivelor propuse. Activitile de
nvare se construiesc prin corelarea obiectivelor de referin la coninuturi i presupun orientarea ctre
un anumit scop, redat prin tema activitii. n momentul propunerii lor spre rezolvare elevilor, activitile
de nvare vor fi transpuse ntr-o anumit form de comunicare inteligibil nivelului de vrst.
Rubrica Resurse cuprinde specificri de timp, de loc, forme de organizare a clasei, material didactic
folosit etc.
n rubrica Evaluare se menioneaz instrumentele sau modalitile de evaluare aplicate la clas.

PROIECT DE TEHNOLOGIE DIDACTIC


Data:
Obiectul: Informatic
Clasa: a XI-a - profil matematic-informatic
Tema: Liste simplu nlnuite.
Tipul leciei: Lecie de fixare i sistematizare.
Durata leciei: 50 minute
Obiectivul funadamental:
Recapitularea i fixarea cunotinelor privind modul de declarare i de
utilzare a listelor simplu nlnuite alocate static.

Competene specifice:
C1.Elevii vor ti s defineasc structura de date de tip list
C2. Elevii vor ti cum se implementeaz o list simplu nlnuit;
C3. Elevii vor ti care sunt operaiile elementare ce se pot efectua la
nivelul unei liste simplu nlnuite;
C4. Elevii vor cunoate modul de selectare a unui element, precum i cum
se realizeaz crearea, respectiv afiarea informaiilor dintr-o list simplu
nlnuit;
C5. Elevii vor fi capabili s rezolve probleme ce necesit folosirea listelor
simplu nlnuite;

Metode i procedee didactice:


Explicaia, conversaia, exerciiul, demonstraia.
Mijloace de nvmnt:

Calculatorul, manualul;
Mediul de instruire:
Laboratorul de informatic;
Forme de organizare:
Activitate frontal
Resurse:
- pedagogice:cursuri de informatic, metodica predrii informaticii

- oficiale:

programa colar

- temporale:

50 minute

- psihologice:

cunotinele dobndite de ctre elevi la disciplina

informatic

SUCCESIUNEA I DESFURAREA MOMENTELOR LECIEI


I.Moment organizatoric:
obiective urmrite: crearea unei atmosfere specifice bunei desfurri a
activitii didactice;
activitatea profesorului: verificarea prezenei, asigurarea c elevii sunt
pregtii pentru nceperea leciei;
activitatea elevului: pregtirea caietului;
metode i procedee didactice: metoda conversaiei, explicaia;
II. Captarea ateniei i trezirea interesului pentru lecie
activitatea profesorului: se va preciza elevilor c urmeaz a fi recapitulat
structura de tip list simplu nlnuit i vor fi rezolvate probleme ce necesit
folosirea acestei structuri de date .
activitatea elevului: ascult i noteaz cele prezentate sau notate pe tabl de
ctre profesor i pune ntrebri cu care s poat lmuri contextul n care se va
desfura lecia;
metode i procedee didactice: metoda conversaiei, metoda problematizrii,
modelarea;

III.Anunarea leciei
Se poart un dialog pe tema: Lista simplu nlnuit.
activitatea profesorului: sunt adresate clasei urmtoarele ntrebri:
Care este definiia unei liste simplu nlnuite?
Ce alte structuri de date cunoatei?
Cum se implementeaz structura de date de tip list simplu nlnuit?
Care sunt principalele operaii ce se pot efectua la nivelul unei liste simplu
nlnuite?
dup care se va propune elevilor spre rezolvare urmtoarea problem:
Fiind dat o matrice rar (spunem c o matrice este rar dac cel puin dou treimi
din elementele mulimii sunt nule) s se alctuiasc o list nlnuit 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;
determinai suma i produsul a dou astfel de matrici;
Datele de intrare se citesc din fiierul text date.txt.
activitatea elevului: rspunde la ntrebrile adresate i este atent la completrile
aduse de ctre profesor dup care trece la rezolvarea problemei propuse;
metode i procedee didactice: metoda conversaiei, a demonstraiei, a
problematizrii i a modelrii;

IV.Asigurarea conexiunii inverse


-activitatea profesorului: profesorul propune precizarea coninutului listei pentru
matricea:
-activitatea elevului: elevii rezolv pe caiete noile cerine.
0002100

0010000
0000900

V. Evaluarea cunotinelor dobndite


-activitatea profesorului: profesorul verific corectitudinea soluiilor scrise de
elevi. Elevii care nu au neles modul de memorare a matricei cu ajutorul listelor,
sunt solicitai s ias la tabl, fiind urmrii i ajutai de colegii lor din banc(care
au rezolvat corect)
-activitatea elevului: elevii rein i noteaz observaiile fcute
-metode i procedee: metoda conversaiei, verificarea frontal

VI. Prezentarea temei pentru acas


-activitatea profesorului:li se propun elevilor spre rezolvare urmtoarele
probleme:
Considernd polinoamele cu coeficieni reali(nenuli), ca fiind reprezentate
sub forma unor liste nlnuite 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 fiierul
date.txt iar valoarea lui x se va introduce de la tastatur.
Exemplu:
Pentru fiierul:
5 0 6 4 8 12
polinomul corespunztor este:
p=5+6*x4-8*x12
S se determine suma a dou astfel de polinoame.
ntr-o list simplu nlnuit se memoreaz n persoane. S se verifice dac,
pentru o persoan dat p, exist n list o persoan cu acelai nume ca i p.
Dac nu, s se insereze n poziia k n list noua persoan p. Discuie dup
valoarea lui k.
-activitatea elevului: noteaz tema n caiet precum i indicaiile date de
profesor
-metode i procedee folosite: metoda conversaiei

S-ar putea să vă placă și