Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri liniare Liste. Stive. Cozi - Inserare, cautare, stergere -
Lectii de pregatire pentru Admitere
! " # " $%&
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri liniare 'Liste. Stive. Cozi)
Cuprins Liste 'simple, du(le, circulare) Stive, Cozi 'simple, speciale)
Su(iectele vor fi a(ordate atat din perspectiva alocarii Su(iectele statice cat si a alocarii dinamice.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri liniare 'Liste. Stive. Cozi)
Cuprins Liste 'simple, du(le, circulare) Stive, Cozi 'simple, speciale)
Su(iectele vor fi a(ordate atat din perspectiva alocarii Su(iectele statice cat si a alocarii dinamice.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri liniare 'Liste. Stive. Cozi) Structura liniara
- relatie de ordine totala pe multimea elementelor (fiecare (fiecare element element are un singur element precedent si un singur element succesor). Exemple de structuri liniare – liste, stive, cozi Exemple de structuri neliniare - arbori - elemente aflate in relatie de adiacenta data de o matrice
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri liniare 'Liste. Stive. Cozi) Clasificare
!upa tipul de alocare" # $tructuri liniare %n alocare statica (vectori) # $tructuri liniare %n alocare dinamica (liste %nlantuite) !upa modul de efectuare al operatiilor de intrare (inserarile) si de iesire (stergerile)" # $tructuri liniare fara restrictii de intrare&iesire # $tructuri liniare cu restrictii de intrare&iesire (stive si cozi)
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri liniare - Liste *peratii de (aza +raversarea - operatia care acceseaza fiecare element al structurii, o singura data, in vederea procesarii ( vizitarea elementului). Cautarea - se cauta un element cu ceie data in structura ( cu sau fara
succes) " consta dintr-o traversare - eventual incompleta a structurii, in care vizitarea revine la comparatia cu elementul cautat. Inserarea - adaugarea unui nou element, cu pastrarea tipului structurii. Stergerea - extragerea unui element al structurii (eventual in vederea
unei procesari), cu pastrarea tipului structurii pe elementele ramase.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri liniare - Liste Liste liniare alocate secvential odurile in pozitii succesive de memorie Avanta acces direct la orice nod /ezavanta multe deplasari la operatiile de inserare si stergere
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri liniare - Liste Liste liniare alocate secvential odurile in pozitii succesive de memorie Avanta acces direct la orice nod /ezavanta multe deplasari la operatiile de inserare si stergere 01emple
- lista de numere intregi - lista de numere reale
3
-12
10
7
1
+
1
2
3
0.3
-1.2
10
5.7
8.7
0.2
-1.5
*
+
@
c
- lista de caractere
A
&
1
M
#
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri liniare - Liste Liste liniare alocate secvential
- lista de numere intregi - lista de numere reale - lista de caractere
3
-12
10
7
1
+
1
2
3
0.3
-1.2
10
5.7
8.7
A
&
*
+
@
C " C22
0.2
c
-1.5
M
1
#
3ascal /eclarare
int a2+/ double b3+/ car c23/
var a " arra0 1..2+ of integer/ var b " arra0 1..3+ of double/ var c " arra0 1..23 of car/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste liniare alocate secvential C " C22
3ascal +raversare ( complexitate *'n) )
for i" 1 to n do 5 viziteaza ai/6
for (i +/ in/ i44) && viziteaza ai/
Cautare ( liniara – complexitate *'n) )
int t +/ for (i +/ in/ i44) if (aix) t 1/ if (t+) && cautare fara succes
var t " boolean/ t " false/ for i" 1 to n do if (ai x) ten t " true/ if (t true) ten 7rite(8cautare fara succes8)/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste liniare alocate secvential Cautare liniara 'componenta marca) C " C22
3ascal
var val, poz" integer/ poz " 1/
int poz +, val/ an val/ 7ile (apoz : val) 5 poz44/ 6 if (poz n) && cautare fara succes
7ile (apoz 9 val) do poz " poz 4 1/ if (poz n 4 1) ten 5 cautare cu succes6
umarul de comparatii n 2 % 2 %
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste liniare alocate secvential Cautare (inara '4 pe vector ordonat) C " C22
int l +, r n-1, m, poz -1/ m (l4r) & 2/ 7ile ((l r) ;; (val : am)) 5 if (valam) r m-1/ else l m41/ m (l4r) & 2/ 6 if (amval) poz m/ else poz -1/
3ascal
var l, r, m, poz" integer/ l " 1/ r " n/ poz"+/ m " (l4r) div 2/ 7ile (l r) and (val 9 am) do begin if (valam) ten r " m-1 else l " m41/ m"(l4r) div 2/ end/ if (amval) ten poz"m else poz"+/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste liniare alocate secvential Cautare (inara '4 pe vector ordonat) Comple1itate
- dupa o comparatie – cautarea se face pe un vector de lungime in=umatatita - in final avem un segment de un element 2<(n) 9 n 9 2<(n)-1 9 <(n) log 2n 419 C'n) 5 *'log$n)
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste liniare alocate secvential C " C22
3ascal Inserare (valoare val pe pozitia poz)
n44/ for (i n-1/ i 9 poz/ i--) ai41 ai/ apoz val/
n " n41/ for i" n do7nto poz do ai41 " ai/ apoz"val/ Stergere (valoare de pe pozitia poz)
for (i poz/ in-1/ i44) ai ai41/ n--/
for i " poz to n-1 do ai " ai41/ n"n-1/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii . Aplica6ie standard 7 8osep9us - n copii asezati in cerc sunt numarati din m in m plecand de la copilul >. - fiecare al m 7 lea copil numarat iese din cerc. for 'i 5 %: i;5n: i22) a
: cout;;a n--: @9ile 'n) i 5 i2 m-%: if 'in55) i 5 n: "" situatie speciala in cazul numerotarii %..n else if 'i n) i 5 i n: cout;;a
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri lineare cu restrictii la i"o Stiva 'LIF*) si Coada 'FIF*) Aplicatii %. 01emplificare mecanisme Se dau structurile o stiva S si doua cozi C% si C$, ce contin caractere. Cele trei structuri se considera de capacitate infinita, si initial vide. Se considera urmatoarele operatii E1 se introduce caracterul 1 in S: % daca S e nevida, se e1trage un element si se introduce in C%, altfel nu se face nimic: $ daca C% e nevida, se e1trage un element si se introduce in C$, altfel nu se face nimic: # daca C$ e nevida, se e1trage un element si se introduce in S, altfel nu se face nimic. 'a) Sa se scrie continutul stivei S si al cozilor C% si C$, dupa e1ecutarea urmatoarelor secvente de operatii G%C%H%$$S0AG+%%00$$$%%$$### '() Sa se scrie o secventa de operatii in urma careia stiva S sa contina cuvantul BUBBL0, coada C% sa fie vida, iar coada C$ sa contina cuvantul S*G+.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri lineare cu restrictii la i"o Stiva 'LIF*)
•
>?@A ( >ast ?n @irst Aut )" ultimul introdus este primul extras
•
locul unic pt. ins.&stergeri" varf ( Top)
•
Push (Val) - inserarea valorii Val in stiva Stack *verflo@ 'supradepasire) - inserare in stiva plina •
•
Pop(X) - stergerea&extragerea din stiva Stack a unei valori care se depune in X Underflo@ 'su(depasire) - extragere din stiva goala •
Facultatea de Matematica si Informatica Universitatea Bucuresti
Stiva in alocare statica C " C22
3ascal /eclarare stiva
locaţii libere
Stack
1 2 Fig.2.2.1. Stiva
Bdefine CD 1++ int $tacFCD/ int Gop/
Top Stack cu
Max
alocare secvenţială.
var CD" integer/ $tacF " arra0 1..1++ of integer/ Gop"integer/ CD " 1++/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Stiva in alocare statica C " C22
3ascal Inserare stiva
locaţii libere
Stack
1 2
void Hus (int Ial) Fig.2.2.1. Stiva 5 if (Gop Cax) "" *verflo@
else 5 Gop44/ $tacFGop Ial/ 6 6
Top
Max
Stack cu alocare secvenţială. procedure Hus
(Ial " integer)/
begin if (Gop Cax) ten "" *verflo@
else begin Gop " Gop 4 1/ $tacFGop " Ial/ end/ end/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Stiva in alocare statica C " C22
3ascal Stergere stiva
locaţii libere
Stack
1 2
void Hop (int ;) Fig.2.2.1. Stiva 5 if (Gop +) "" Underflo@
else 5 $tacFGop/ Gop--/
6 6
Top
Max
procedure Hop (var Stack cu alocare secvenţială.
"integer)/
begin if (Gop +) ten "" Underflo@
else begin " $tacFGop/ Gop " Gop - 1/ end/ end/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii $. 01emplificarea mecanismului G0CUGSII+A+II Ji ordinea efectuarii operatiilor
int f (int a) 5 coutJ?n functie a J a J la adresa J ;a endl/ if (a 1) return 1/ else return a 4 f(a-1)/ 6 int main() 5 int a '/ coutJ?n Cain" ;a J ;a J/ f(a) Jf(a)/ 6
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii $. 01emplificarea mecanismului G0CUGSII+A+II Ji ordinea efectuarii operatiilor
>a executie" ?n functie a ' la adresa +x*fff2'+e* bc ?n functie a la adresa +x*fff2'+e* c ?n functie a 3 la adresa +x*fff2'+e* 'c ?n functie a 2 la adresa +x*fff2'+e* 2c ?n functie a 1 la adresa +x*fff2'+efc ?n Cain" a ' si f(a) 1' *(s4 *rdinea efectuarii apelurilor in afisarea pe ecran4 cout;;?In Main Ka 5 ? ;; Ka ;;?: f'a) 5 ?;;f'a):
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii #. 3arantezarea corecta
!at un sir s s 1s2 ... sn de caractere 8(8 si 8)8 sa se verifice daca acest sir este corect parantezat (i.e., pentru orice subsir s 1s2 ... si avem ca numarul de caractere 8(8 este mai mare sau egal cu numarul de caractere 8)8). ?n caz ca s nu este parantezat corect, se va indica pozitia primei paranteze 8)8 care nu are corespondent.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii
#. 3arantezarea corecta C " C22
bool oFtrue/ for(int i+/ istrlen(s)/ i44) 5if(empt'S) ) && $tiva e vida 5 if(vi8)8) 5 oFfalse/ breaF/6 pus9'v'S)) pus9'v
3ascal
var oF"boolean/ oF"true/ for i"+ to lengt(s) do begin if(empt'S) true) ten && $tiva vida begin if (vi 8)8 ) ten begin oFfalse/ breaF/ end/ pus9'v'S)) ten pus9'v
else pop'S)/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii !. Conectarea pinilor
$e da o suprafata circulara cu un numar n de pini pe margini (numerotati de la 1 la n), impreuna cu o lista de pereci de pini ce trebuie conectati cu fire metalice. Hroblema cere sa determinati in timp *'n) daca pentru o configuratie ca mai sus, pinii perece pot fi conectati, fara ca acestea sa se intersecteze.
Configuratie valida
Configuratie invalida
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii C " C22
3ascal 5 citire vector perece6
&& citire vector perece for(int i+/ in/ i44) 5 if(empt'S)) && $tiv $tiva a e vid vida a pus9'perec9e
for i"+ to lengt(s) do begin if'empt'S)5true) ten && $tiva vida
else
pus9'perec9e
if(perecei peeF($))
else if(perecei pee>'S)) ten pop'S)/ else
pop'S):
else pus9'perec9e
pus9'perec9e
6 if (empt'S)) coutJ
end/ if (empt'S) 5 true) 7rite(8
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii . 0valuarea unei e1presii Nn notatie postfi1ata
Exemplu
(1+ 4 2+ & ') - (3 - L *) in notatie postfixata" 1+ 2+ ' & 4 3 * L - Stiva, dupa fiecare pas
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii
Algoritm ( rezolvare completa" fisier atasat)
Has +. - postfi1 - sirul de caractere introdus Has 1. - se considera adresa primului caracter && car Lp ;postfix+/ Has 2. - se cauta primul caracter nenul (intre operanzi & operatori " 8 8, sau 8Mt8) 7ile(Lp) 5 if(isdigit(Lp)) N Has 3. else N Has . p44/ && se trece la urmatorul caracter 6 Has '. - rezultatul este singura valoare aflata in stiva && result pop(;)/ Has 3. - daca este numar se introduce in stiva && numar intreg cod D$? caracter - (codul caracterului 8+8) Has . - daca este operand, atunci se extrag din stiva ultimele valori inserate, se aplica operandul si noua valoare se reintroduce in stiva. &L op1 pop(;)/ op2 pop(;)/ - se aplica operandul pus(;,ne7node)/ && se reintroduce in stiva rezultatul operatiei L&
Facultatea de Matematica si Informatica Universitatea Bucuresti
Structuri lineare cu restrictii la i"o Coada
'FIF*)
•
@?@A ( @irst ?n @irst Aut )" primul introdus este primul extras
•
capat pt. ?nserari" sfirsit ( Rear)
•
capat pt. stergeri" inceput ( Front)
•
Insert (Val) - inserarea *verflo@ 'supradepasire) - inserare in coada plina •
•
Delete(X) - stergerea&extragerea Underflo@ 'su(depasire) - extragere din coada goala •
Facultatea de Matematica si Informatica Universitatea Bucuresti
Coada in alocare statica C " C22
3ascal /eclarare
Bdefine CD 1++ int OueueCD/ int @ront, Pear/
var CD" integer/ Oueue " arra0 1..1++ of integer/ @ront, Pear "integer/ CD " 1++/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Coada in alocare statica C " C22
3ascal Inserare
void Hus (int Ial) 5 if (Pear Cax) "" *verflo@
else 5if (Pear +) &&coada initial vida @ront44/ Pear44/ OueuePear Ial/6 6
procedure Hus (Ial " integer)/ begin if (Pear Cax) ten "" *verflo@
else begin if (Pear +) ten && coada initial vida @ront " @ront 4 1/ Pear " Pear 4 1/ OueuePear " Ial/ end/ end/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Coada in alocare statica C " C22
3ascal Stergere
void Hop (int ;) 5 if (@ront Cax) "" Underflo@
else 5 if (@ront Pear) Pear44/ Oueue@ront/ @ront44/6 6
procedure Hop (var "integer)/ begin if (@ront CD) ten "" Underflo@
else begin if (@ront Pear) ten Pear " Pear 4 1/ " Oueue@ront/ @ront " @ront 4 1/ end/ end/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Alte tipuri de cozi Coada circulara 'in alocare statica) Max
!ear
1 2
.
. . .
.
. .
O
. .
!ear după inserarea unui nou eleent
Front
Front
!ear
Fig.2.2.4. Coadă circulară cu alocare
He coada circulara" aritmetica (mod Cax) la incrementarea indicilor secvenţială. Inserarea unui nou eleent.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Alte tipuri de cozi Coada cu prioritPQi - 3riorit Rueues
Elementele au, pe lRngQ ceie Si o prioritate" - cea mai %naltQ prioritate este 1, urmatQ de 2, etc. *rdinea liniarP este datP de regulile
- elementele cu aceeaSi prioritate sunt extrase (Si procesate) %n ordinea intrQrii/ - toate elementele cu prioritate i se aflQ %naintea celor cu prioritate i"# (Si deci vor fi extrase %naintea lor). Extragerile se fac dintr-un singur capQt. Ca sP se poatP aplica regulile de mai sus la e1tragere, inserarea unui nou element cu prioritate i se va face la sfrTitul listei ce conQine toate elementele cu prioritate i .
Facultatea de Matematica si Informatica Universitatea Bucuresti
Alte tipuri de cozi /0RU0 - /ou(le 0nded Rueue
- structurQ liniarQ %n care inserQrile Si Stergerile se pot face la oricare din cele douQ capete, dar %n nici un alt loc din coadQ. Tn anumite tipuri de aplicaUii sau %n modelarea anumitor probleme pot apare structuri de cozi cu restricUii de tipul" - inserQrile se pot face la un singur capQt Si extragerile la amRndouQ.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii 'teoretic). MUL+I - tas>ing, multi-user, ... . 3arcurgerea unui ar(ore pe nivele 'Breadt9 First) %
BF 'Latime) %, $, #, !, , , &, V
#
$
!
&
V
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii . 3arcurgerea unui ar(ore pe nivele 'Breadt9 First) C " C22
3ascal
int @ront 1,Pear 1/ && O - coada && a – matricea de adiacenta cin99nod/ && de inceput O@rontnod/ viznod1/
@ront " 1/ Pear " 1/ read(nod)/ && de inceput O@ront " nod/ viznod " 1/
7ile(@ront Pear) 5 for(i1/in/i44) if( aO@ronti1 ;; vizi:1 ) 5 Pear44/ OPear i/ vizi 1/ 6 @ront44/ 6
7ile (@ront Pear) do begin for i " 1 to n do if (aO@ronti1) and (vizi:1) ten begin Pear " Pear 4 1/ OPear " i/ vizi " 1/ end/ @ront " @ront 4 1/ end/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii &. /epou feroviar
Vn depou feroviar consta dintr-o linie ferata de intrare, F linii auxiliare de depozitare, si o linie de iesire. @iecare linie opereaza pe un sistem de coada (@?@A). ?n plus, vagoanele se pot deplasa doar dinspre linia de intrare spre linia se iesire. $a se scrie un program care, dat un sir de vagoane pe linia de intrare (numerotate de la 1 la n si aran=ate in orice ordine), descrie o strategie de a obtine pe linia de iesire sirul de vagoane n/ n - 1/.../ 2/ 1, folosind liniile de depozitare. ?n caz ca nu exista o astfel de strategie, se va afisa acest lucru.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii &. /epou feroviar
01emplu de depou feroviar cu # linii de depozitare
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii
Algoritm ( rezolvare partiala) "" Se e1trage primul element din CI si se introduce pe prima linie au1iliara CC<%= 5 %: pus9'1,CC<=): for'i5$:i;5n:i22) 5 pop'CI) "" e1trag elemente din CI >% 5 %: "" caut locul de inserat @9ile'>% ;5 KK CC<>%=%22: "" am cozi ocupate si conditie if '>% ;5 ) pus9',CC<>%=): "" gasesc o coada nevida unde pot sa inserez else 22: pus9',CC<=): "" inserez pe o coada noua D for 'i5%: i ;5 n: i22) int min,p, > 5 %: "" caut minimul varfurilor cozilor au1iliare nevide @9ile '>;5 KK CC<>= 55 ULL) >22: if '> ;5 ) min 5 CC<>=:D "" se introduce in coada finala for'>% 5 %: >% ;5 : >%22) if 'c<>%=45ULL KK CC<>%=%=%:D pop'CC
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste liniare inlantuite - alocate static si dinamic odul contine informatia si indicele 'adresa) urmatorului nod Avanta operatiile de adaugare sau stergere sunt rapide /ezavanta - Accesul la un nod se face prin parcurgerea nodurilor precedente - Indicele 'adresa) nodului urmator ocupa memorie suplimentara
Facultatea de Matematica si Informatica Universitatea Bucuresti
C " C22
Liste liniare inlantuite alocate static 3ascal /eclarare
struct nod 5 int inf, urm/ 6/ nod a1++/ int n, prim, ultim/ int oc1++/ && + – liber, 1-ocupat
nod record inf" integer/ urm" integer/ end/ var a" arra01..1++ of nod/ n, prim, ultim" integer/ oc" arra01..1++ of integer/ 5+ – liber, 1-ocupat6
Facultatea de Matematica si Informatica Universitatea Bucuresti
C " C22
Liste liniare inlantuite alocate static 3ascal Alocare
i +/ 7ile ((oci : +) ;; (i1++)) i44/
i " +/ 7ile (oci9+) and (i1++) do i " i41/
oci 1/ n44/
oci " 1/ n " n41/ 0li(erare
void elib (int x) 5 ocx +/ n--/ 6
procedure elib(x"integer)/ begin ocx"+/ n"n-1/ end/
Facultatea de Matematica si Informatica Universitatea Bucuresti
C " C22
Liste liniare inlantuite alocate static 3ascal Inserare
anou.urm apoz.urm/
anou.urm " apoz.urm/
apoz.urm nou/
apoz.urm " nou/
anou.inf val/
anou.inf " val/
Inserare nod de indice nou dupa nodul de indice poz
Facultatea de Matematica si Informatica Universitatea Bucuresti
C " C22
Liste liniare inlantuite alocate static 3ascal Stergere
n apoz.urm/
n " apoz.urm/
ocn -1/ && pozitie eliberata
ocn " +/ 5pozitie eliberata6
apoz.urm an.urm/
apoz.urm " an.urm/
Stergerea nodului aflat dupa nodul de indice poz
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste liniare inlantuite alocate dinamic
- fiecare nod conUine" (1) un cRmp, pe care se reprezintQ un element al mulUimii/ Nn algoritmii care urmeazP putem presupune cP elementul ocupP un singur cmp, info:
(2) un pointer cQtre nodul urmQtor, ne't .
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste simplu inlantuite C " C22
3ascal /eclarare
struct nod5 int info/ nod Lnext/ 6/
t0pe pnod Xnod/ nod record inf "integer/ next "pnod/ end/
+raversare
nod Lp/ p $tart/ 7ile (p : WV>>) 5 && prelucrare p N info p p N next/ 6
var p" pnod/ p " $tart/ 7ile (p 9 nil) do begin 5prelucrare pX.info6 p " pX.next/ end
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste simplu inlantuite C " C22
3ascal Cautare
nod Lp/ int x/
var p" pnod/ int x/
p $tart/ 7ile (p : WV>> ;; x : pNinfo) p p N next/
p " $tart/ 7ile (p 9 nil) and (x 9 pX.info) do p " pX.next/
if (p WV>>) && negasit/ else && gasit in p
if (p nil) ten 5negasit6 else 5gasit in p6
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste simplu inlantuite C " C22
Inserare
3ascal
nod LY, Loldp, Lp/ Y ne7 nod/ && prelucrare Y N info/
var Y, oldp, p" pnod/ ne7 (Y)/ && prelucrare YX.info/
Y N next p/
YX.next " p/
if (oldp : WV>>) oldp N next Y/ else $tart Y/
if (oldp 9 nil) ten oldpX.next " Y else $tart " Y/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste simplu inlantuite C " C22
Stergere
3ascal
locaţie eliberată
Start .
.
.
.
.
.
noua legătură
Pefacerea structurii de lista simplu inlantuita pe nodurile ramase Eventual dealocare de spatiu pentru nodul extras (sau alte operatii cu el)
Facultatea de Matematica si Informatica Universitatea Bucuresti
Liste simplu inlantuite C " C22
Stergere
nod Ltemp p/ if (oldp : WV>>) oldp N next p N next/ else $tart p N next/ && prelucrare temp & temp N info delete (temp)/
3ascal
temp " pnod/ temp " p/ if (oldp 9 nil) ten oldpX.next " pX.next else $tart pX.next/ 5 prelucrare temp & tempX.info 6 dispose (temp)/
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii V. Geprezentarea vectorilor rari
- are cel putin +Z dintre elemente egale cu+. - reprezentare eficienta N liste simplu inlantuite alocate dinamic - fiecare nod din lista retine" - valoarea - indicele din vector Cerinte" adunarea, respectiv, produsul scalar a doi vectori rari.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii
V. Geprezentarea vectorilor rari - Implementare void adauga'nod WKprim, nod WKultim, int a, int ()
5 nod LY ne7 nod/ Y-9vala/ Y-9pozb/ Y-9nextWV>>/ if(primWV>>) 5 prim Y/ ultim prim/6 else 5 ultim -9 next Y/ ultim Y/ 6 6
struct nod 5 int poz, val/ nodLnext/ 6/
void creareXvector'int Kn, nod WKp, nod WKu)
5 int i,a,b/ cin99n/ for(i1/in/i44) 5cin99a99b/ adauga'p, u, a, ():
6 6
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii
V.Geprezentarea vectorilor rari - Implementare void suma 'nod Wprim%, nod Wprim$, nod WKprim#, nod WKultim#)
5 nod Lp1, Lp2/ for (p1 prim1/ p1: WV>>/ p1 p1 -9 next) adauga'prim#, ultim#, p% - val, p% - poz):
for (p2 prim2/ p2: WV>>/ p2 p2 -9 next) 5 int oF +/ for (p1 prim3/ p1: WV>>/ p1 p1 -9 next) if (p2 -9 poz p1 -9 poz) 5p1 -9 val 4 p2 -9 val/ oF 1/6 if (oF +) adauga'prim#, ultim#, p$ - val, p$ - poz): 6 6
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii
V. Geprezentarea vectorilor rari - Implementare
int prodXscalar'nod Wprim%, nod Wprim$)
5 int prod +/ nod Lp1, Lp2/ for (p2 prim2/ p2: WV>>/ p2 p2 -9 next) for (p1 prim1/ p1: WV>>/ p1 p1 -9 next) if (p2 -9 poz p1 -9 poz) prod 4 p1 -9 val L p2 -9 val/ return prod/ 6
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii Y. Geprezentarea polinoamelor rare Start "
1
42" # exp coe$ next
Fig.2.1.%. !epre&entarea polinoaelor rare.
Cerinte"
- evaluarea intr-un punct - suma si produsul a doua polinoame.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii
Y. Geprezentarea polinoamelor rare - Implementare void produs'nod Wprim%, nod Wprim$, nod WKprim#, nod WKultim#)
5 nod Lp1, Lp2/ for (p1 prim1/ p1: WV>>/ p1 p1 -9 next) for (p2 prim2/ p2: WV>>/ p2 p2 -9 next) 5 int a p1 -9 coef L p2 -9 coef/ int b p1 -9 exp 4 p2 -9 exp/ int oF +/ for (nodL p3 prim3/ p3: WV>>/ p3 p3 -9 next) if (p3 -9 exp b) 5p3 -9 coef 4 a/ oF 1/6 if (oF +) adauga(prim3, ultim3, a,b)/ 6 6
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii
Y. Geprezentarea polinoamelor rare - Implementare int eval'nod Wprim, int 1)
5 && evaluarea unui polinom intr-un punct int prod +/ nod Lp/ for (nod Lp prim/ p: WV>>/ p p -9 next) prod 4 p2 -9 coef L po7(x,p -9 exp)/ return prod/ 6
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii %. Geprezentarea matricelor rare
nlin lin ai' ncol
'
i col
Fig.2.1.(. !epre&entarea unui nod )ntr*o atrice rară.
Cerinte"
- suma a doua matrice - determinantul si inversa unei matrice patratice
Facultatea de Matematica si Informatica Universitatea Bucuresti
Alte tipuri de liste prev
# cu nod marca= # circulare
next
Fig.2.1.,. -od )ntr*o listă dublu )nlănţuită.
# dublu inlantuite # alte inlantuiri (liste de liste, masive, etc. ) Start .
.
.
Fig.2.1.4. +istă circulară cu nod arca'.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Stiva in alocare dinamica C " C22
3ascal
.
.
.
↑ To Stiva Top cu alocare )nlănţuită. struct nodFig.2.2.2. 5
int info/ nod Lnext/ 6/ nod L Gop WV>>/
t0pe pnod Xnod/ nod record inf "integer/ next "pnod/ end/ var Gop " pnod/ Gop " nil/
Se refac operatiile de adaugare si stergere de la liste simplu inlantuite, respectand restrictiile4
Facultatea de Matematica si Informatica Universitatea Bucuresti
Coada in alocare dinamica
.
↑ Front
.
.
↑ !ear
Inserari 7 Rear Stergeri - Front Coada vidP
Front = Rear = NULL.
Coada cu un singur element
Rear = Front != NULL.
%%. Aplica6ie standard pe cozi circulare 7 8osep9us - n copii asezati in cerc sunt numarati din m in m plecand de la copilul >. - fiecare al m 7 lea copil numarat iese din cerc.
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii %%. Aplica6ie standard pe cozi circulare 7 8osep9us struct nod int info: nod Wurm: D:
/eclarare si citire lista circulara
void inserare'nod WKprim, nod WKultim, int 1) nod W p 5 ne@ nod: p - info 5 1: p - urm 5 ULL: if 'prim 55 ULL) prim 5 ultim 5 p: D else ultim - urm 5 p: ultim 5 p: D D "" creare for'i5%: i;5n: i22) inserare'prim,ultim,i): ultim-urm 5 prim:
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii %%. Aplica6ie standard pe cozi circulare 7 8osep9us if '> 55 %) cout;;prim-info;;? ?: nod Wt 5 prim: prim 5 prim-urm: ultim-urm 5 prim: delete t: p 5 prim: D
else p 5 prim: for 'i 5 %: i ;5 >-%: i22) Z 5 p: p 5 p-urm: D Z-urm 5 p-urm: cout;;p-info;;? ?: delete p: p 5 Z-urm:
Afisarea si stergerea elementului de pe pozitia de inceput D
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii %%. Aplica6ie standard pe cozi circulare 7 8osep9us Afisarea informatiei si stergerea elementelor din m in m @9ile 'p-urm 45 p) for 'i 5 %: i ; m: i22) Z 5 p: p 5 p-urm: D Z-urm 5 p-urm: cout;;p-info;;? ?: delete p: p 5 Z-urm: D
Facultatea de Matematica si Informatica Universitatea Bucuresti
Aplicatii %$. Aplica6ie Cozi 7 su(iect /L Info $%# 'su(punct ()