L3b

3
Structuri de Date (1CC) L A B O R A T O R 3b Stive si cozi ca liste inlantuite 1. Functia recursiva uratoare realizeaza u!lerea !rin inundare a unei su!ra"ete dre!tun#$iulare %a%. &atricea de caractere (a) si diensiunea ei (n) sunt de"inite ca variabile e'terne. Functia %inside% veri"ica daca un !unct de coordonate (r c) este in interiorul conturului (in atrice). daca !unctul (r c) este in interiorul ariei *+ n,1 + n,1- int inside (int r int c) i" ( r/+ 00 r 2n 00 c/+ 00 c 2n ) return + else return 1 4 u!lere recursiva void "ill (int r int c) i" (inside(r c)55 a*r-*c-22+) daca (r c) interior si necolorat a*r-*c-2u66 atunci coloreaza (r c) "ill (r c,1) continua la stan#a "ill (r,1 c) in sus "ill (r c61) la drea!ta "ill (r61 c) in 7os 4 4 Sa se scrie8 , Functia %s$o9% care a"iseaza continutul atricei. , O "unctie %ain% care a!eleaza "unctia %"ill% cu un !unct interior (: :) si a!oi a!eleaza "unctia %s$o9%. ;ariabile e'terne "unctiilor8 int n2< c$ar a*<-*<-2 +4 c$ar u2=a= Sa se observe ordinea de u!lere (de odi"icare a eleentelor din atrice) du!a secventa de litere a b c ... din atrice. Se va a"isa nuarul total de a!eluri ale "unctiei %"ill% "olosind o variabila e'terna increentata la ince!utul "unctiei %"ill% si a"isata in %ain%. :. Sa se odi"ice diensiunile atricei la *>++ >++- si sa se areasca valoarea lui n (ince!and de la :++) !ana cand "unctia %"ill% se bloc$eaza inainte de u!lerea co!leta datorita de!asirii stivei "olosite de co!ilator. 3. Sa se scrie "unctii !entru o!eratii cu o stiva de structuri %cell% realizata ca lista inlantuita cu santinela si sa se veri"ice aceste "unctii cu !ro#raul urator8 t?!ede" struct int r c 4 cell celula din linia r si coloana c int ain () stac@ s cell ' initS (s)

description

l3b

Transcript of L3b

Structuri de Date (1CC)

L A B O R A T O R 3b

Stive si cozi ca liste inlantuite

1. Functia recursiva urmatoare realizeaza umplerea prin inundare a unei suprafete dreptunghiulare "a". Matricea de caractere (a) si dimensiunea ei (n)sunt definite ca variabile externe. Functia "inside" verifica daca un punct de coordonate (r,c) este in interiorul conturului (in matrice).

// daca punctul (r,c) este in interiorul ariei [0,n-1,0,n-1]int inside (int r,int c) { if ( r=n || c=n ) return 0; else return 1 ;} // umplere recursivavoid fill (int r,int c) { if (inside(r,c)&& a[r][c]==0) { // daca (r,c) interior si necolorat a[r][c]=u++; // atunci coloreaza (r,c) fill (r,c-1); // continua la stanga fill (r-1,c); // in sus fill (r,c+1); // la dreapta fill (r+1,c); // in jos }}

Sa se scrie:- Functia "show", care afiseaza continutul matricei. - O functie "main" care apeleaza functia "fill" cu un punct interior (2,2) si apoiapeleaza functia "show". Variabile externe functiilor: int n=5; char a[5][5]={0}; char u='a';Sa se observe ordinea de umplere (de modificare a elementelor din matrice) dupasecventa de litere a,b,c,... din matrice. Se va afisa numarul total de apeluri ale functiei "fill" folosind o variabilaexterna incrementata la inceputul functiei "fill" si afisata in "main".

2. Sa se modifice dimensiunile matricei la [400,400] si sa se mareascavaloarea lui n (incepand de la 200) pana cand functia "fill" se blocheaza inainte de umplerea completa datorita depasirii stivei folosite de compilator.

3. Sa se scrie functii pentru operatii cu o stiva de structuri "cell" realizata ca lista inlantuita cu santinela si sa se verifice aceste functii cu programul urmator:

typedef struct { int r,c;} cell; // celula din linia r si coloana cint main () { stack s; cell x; initS (s); for (int i=1;i