Sunteți pe pagina 1din 23

Universitatea Tehnic din Moldova

Catedra Calculatoare
TEZ DE AN
la disciplina: Structuri de Date i Algoriti
!arianta "#$
%i&liotec SDA Mul'ie
A ele&orat studentul grupei C(#)#: Ce&an Duitru
A veri*icat con*+ Univ+ : ,te*an Marin
Chiinu -$#.
Sarcina lucrrii:
Aplicaia Bibliotec SDA Mulime pe care sunt de*ini'i operatorii uniune i caut+
/plientare cu ta&louri0 liste 1nln'uite0 ar&ori 2optial cu copriarea druului3+ DEM4:
E5eple de utili6are+ 7ro*il per*oran'+ !i6uali6are+
Analiza succint a domeniului:
Structuri de Date i Algoriti 2SDA3 8 sunt instruentele de &a6 a *iecrui prograator+
E*ident cunotin'ele i 1n'elegerea acestui doeniu de*inete e*icien'a prograelor ela&orate de
prograator+
Noi interac'ion cu structurile de date tot tipul0 iar odul cu noi o salv0 sort0
organi6 este *oarte iportant+ S lu ceva e5eple din via' unde organi6are in*ora'ie 1n
structuri de date ne a9ut enor:
S cut cuvintul necesar 1ntr(un dic'ionar:
;r'ile con'in in*ora'ia geogra*ic su& *or de structuri de date organi6ate geoetric:
%onul de plat organi6ea6 datele despre cuprturi 1n *or de ta&el:
Deci SDA estet odul prin care salv i organi6 in*ora'ia 1ntr(un calculator de unde
poate *i utili6at e*icient+
Descrierea principiilor:
7entru a salva i organi6a in*ora'ia 1n calculator noi pute s *olosi ta&louri0 liste i
derivatele ei0 ar&ori0 *isiere+ Aa cu pentru noi ai nou sunt listele cu derivatele ei0 ar&orii i *iierele0
1n continuare vo vor&i despre ele+
Liste 8 la *el ca ta&lourile0 listele sunt structuri de date liniare+ <n copara'ie cu ta&lourile0
eleentele listei sunt pointeri spre &locuri de eorie unde este salvat in*ora'ia+
Avanta9ele listelor asupra ta&lourile este 1n alocarea dinaic a eoriei0 inserarea i tergerea
este ai uoar0 se pot salva tipuri di*erite de in*ora'ii+ =epre6entarea listelor 1n li&a9ul de
prograare C se *ace prin pointeri la nodurile ce apar'in listei+ 7riul nod este nuit capul listei+
>iecare nod este copus din cel putin - cipuri: valoare i pointer spre urtorul nod+ <n C noi pute
repre6enta un nod *olosind struct+ Mai 9os este un e5eplu de nod care are un cip de valoare 1ntreg+
struct node
{
int data;
struct node *next;
};
capul coada
List simplu nlnuit
Structura unui nod
int *next
void introdu(int x)
{struct noduri *temporar=malloc(sizeof(*temporar));
temporar->valoarea=x;
/* Cind lista este vida, si se insereaza la inceput
temporar->urmatorul=NULL; virf_radacina=temporar;*/
/* Cind lista este plina si se insereaza la inceput
if(virf_radacina!=NULL) {temporar->urmatorul=virf_radacina;}
virf_radacina=temporar;
void inserare(int* x)
{
/* BLOCUL DE CREARE A NODURILOR TEMPORARE */
NOD *tmp=malloc(sizeof(*tmp));
NOD *tmpp=malloc(sizeof(*tmpp));
/* BLOCUL DE ATRIBUIREA VALORII*/
tmp->val=*x;
/* BLOCUL DE INSERARE */
if(root!=NULL)//verificam daca lista e vida
{
tmpp=root;
while(tmpp->urm!=NULL)
{
tmpp=tmpp->urm;
}
tmpp->urm=tmp;
printf(" %d",tmp->val);
}
else //se insereaza la sfirsitul listei
{
tmp->urm=NULL;
root=tmp;
printf(" %d",tmp->val);
return;
}
}
Inserare la nceput
Inserare la sfrit
245 cap 2 147 x NULL
245 147
147
2 147 x 245
245 147
cap
void elemmij(struct nod *cap)
{
struct node *lent_ptr = cap;
struct node *rapid_ptr = cap;
if (cap!=NULL)
{
while (rapid_ptr != NULL && rapid_ptr->next != NULL)
{
rapid_ptr = rapid_ptr->next->next;
lent_ptr = lent_ptr->next;
}
printf("Elementul mijlociu este [%d]\n\n", rapid_ptr->data);
}
}
void inversare(struct node** cap)
{
struct node* precedent = NULL;
struct node* curent = *cap;
struct node* urmator;
while (curent != NULL)
{
urmator = curent->next;
curent->urmatorul = precedent;
prev = curent;
curent = urmator;
}
*cap = precedent;
}
void stergeLista(struct node** head_ref)
{
struct node* current = *head_ref;
struct node* next;
while (current != NULL)
{
next = current->next;
free(current);
current = next;
}
*head_ref = NULL;
}
Alfm elementul mijlociu
Inversarea Listei
tergerea Listei
Stiva 8 o structur de date liniare 1n care se respect regula ?/>4@>/?4 a&ele au acelai
re6ultat+ ?/>4 2?AST /N >/=ST 4UT A ultiul intrat priul ieit30 >/?4 2>/=ST /N ?AST
4UTApriul intrat ultiul ieit3+
/plientarea se poate *ace su& - etode prin ta&lou@vector sau list+
FOLOSIND TABLOU
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
// O structur care reprezint stiva
struct Stack
{
int top;
unsigned capacity;
int* array;
};
struct Stack* createStack(unsigned capacity)
{
struct Stack* stack = (struct Stack*) malloc(sizeof(struct Stack));
stack->capacity = capacity;
stack->top = -1;
stack->array = (int*) malloc(stack->capacity * sizeof(int));
return stack;
}
// Stiva e plina cind virful este egal cu ultimul indice
int isFull(struct Stack* stack)
{ return stack->top == stack->capacity - 1; }
// Stiva este vid cnd elementul din virf este egal cu -1
int isEmpty(struct Stack* stack)
{ return stack->top == -1; }
// Functia de a adauga un element in stiva. Mare te vrful cu o unitate
void push(struct Stack* stack, int item)
{
if (isFull(stack))
return;
stack->array[++stack->top] = item;
printf("%d pushed to stack\n", item);
}
// Functia de a sterge un element din stiva. Descreste cu o unitate
int pop(struct Stack* stack)
{
if (isEmpty(stack))
return INT_MIN;
return stack->array[stack->top--];
}
// Functia preia elementul din virf
int peek(struct Stack* stack)
{
if (isEmpty(stack))
return INT_MIN;
return stack->array[stack->top];
}
int main()
{
struct Stack* stack = createStack(100);
push(stack, 10);
push(stack, 20);
push(stack, 30);
printf("%d eliminat din stiva\n", pop(stack));
printf("elementul din virf %d\n", peek(stack));
return 0;
}
7ro: Uor de iplientat+ Meoria este salvata ca pointeri+
Contra: Nu este dinaic+ Nu va crete@icora 1n depende' de situa'ie
IMPIMNTA!A P!IN LIST"
Binclude Cstdio+hD
Binclude Cstdli&+hD
Binclude Cliits+hD
struct StacENode
F
int data:
struct StacENodeG ne5t:
H:
struct StacENodeG neINode2int data3
F
struct StacENodeG stacENode A
2struct StacENodeG3 alloc2si6eo*2struct StacENode33:
stacENode(Ddata A data:
stacENode(Dne5t A NU??:
return stacENode:
H
int isEptJ2struct StacENode Groot3
F
return Kroot:H
void push2struct StacENodeGG root0 int data3
F
struct StacENodeG stacENode A neINode2data3:
stacENode(Dne5t A Groot:
Groot A stacENode:
print*2LMd pushed to stacENnL0 data3:
H
int pop2struct StacENodeGG root3
F
i* 2isEptJ2Groot33
return /NTOM/N:
struct StacENodeG tep A Groot:
Groot A 2Groot3(Dne5t:
int popped A tep(Ddata:
*ree2tep3:
return popped:
H
int peeE2struct StacENodeG root3
F
i* 2isEptJ2root33
return /NTOM/N:
return root(Ddata:
H
int ain23
F
struct StacENodeG root A NU??:
push2Proot0 #$3:
push2Proot0 -$3:
push2Proot0 )$3:
print*2LMd sters din stivNnL0 pop2Proot33:
print*2LEleentul din v1r* MdNnL0 peeE2root33:
return $:
H
7ro: Utili61nd liste noi pute ri i icora lista
Contra: Necesit eorie e5tra pentru pointeri
Aplicaii cu stiv: echili&ru de caractere0 convertirea locurilor in lista0 anularea ultii ac'iuni 1n di*erse
prograe 2&roIser0 editoare di*erite0 etc3+
Coada 8 este siilar cu stiva0 adic la *el este o structur de date liniar dar *unc'ionea6 dup
regula >/>4 2>irst /n >irst 4utA7riul intrat0 priul ieit3+
Coada este *olosit spre e5eplu la C7U0 unde este nevoie ca coanda care a *ost dat pria0 s se
e5ecute0 dup care celelalte+
Binclude Cstdli&+hD
Binclude Cstdio+hD
struct QNode
F
int EeJ:
struct QNode Gne5t:
H:
struct Queue
F
struct QNode G*ront0 Grear:
H:
struct QNodeG neINode2int E3
F
struct QNode Gtep A 2struct QNodeG3alloc2si6eo*2struct QNode33:
tep(DEeJ A E:
tep(Dne5t A NU??:
H
struct Queue GcreateQueue23
F
struct Queue GR A 2struct QueueG3alloc2si6eo*2struct Queue33:
R(D*ront A R(Drear A NU??:
return R:
H
@@ >unctia de a adauga eticheta E in R
void enQueue2struct Queue GR0 int E3
F
@@ Crearea unui nou nod
struct QNode Gtep A neINode2E3:
i* 2R(Drear AA NU??3
F
R(D*ront A R(Drear A tep:
return:
H
@@ Adauga un eleent la s*irtsit
R(Drear(Dne5t A tep:
R(Drear A tep:
H
@@ >unctia de a sterge eticheta E din coada R
struct QNode GdeQueue2struct Queue GR3
F
i* 2R(D*ront AA NU??3
return NU??:
struct QNode Gtep A R(D*ront:
R(D*ront A R(D*ront(Dne5t:
i* 2R(D*ront AA NU??3
R(Drear A NU??:
return tep:
H
int ain23
F
struct Queue GR A createQueue23:
enQueue2R0 #$3:
enQueue2R0 -$3:
deQueue2R3:
deQueue2R3:
enQueue2R0 )$3:
enQueue2R0 .$3:
enQueue2R0 S$3:
struct QNode Gn A deQueue2R3:
i* 2n KA NU??3
print*2LEleentele sunt MdL0 n(DEeJ3:
return $:
H
Arbori 8 <n copara'ie cu listele si derivatele ei 2stiva i coada3 care sunt structuri de date
liniare0 ar&orii sunt structuri de date ierarhice+
Se nueste Ar&ore cu radacina A gra* neorientat cone5 *ara cicluri in care unul din noduri este
desenat ca radacina+ Nodurile pot *i ase6ate pe niveluri incepand cu radacina care este plasata pe
nivelul #+
=adacina ( Nod special care generea6a ase6area unui ar&ore pe niveluri+ Aceasta operatie se
e*ectuea6a in *unctie de lungiea lanturilor prin care celelalte noduri sunt legate de radacina+
Descendent ( intr(un ar&ore cu radacina nodul J este descendentul nodului 5 daca este situat pe
un nivel ai are decat nivelul lui 5 si e5ista un lant care le uneste si nu trece prin radacina+
Descendent direct @ *iu ( intr(un ar&ore cu radacina nodul J este *iul 2descendentul direct3
nodului 5 daca este situat pe nivelul iediat urator nivelului lui 5 si e5ista uchie intre 5 si J+
Ascendent A intr(un ar&ore cu radacina nodul 5 este ascendentul nodului J daca este situat pe un
nivel ai ic decat nivelul lui J si e5ista un lant care le uneste si nu trece prin radacina+
Ascendent direct @ parinte ( intr(un ar&ore cu radacina nodul 5 este parintele 2ascendentul direct3
nodului J daca este situat pe nivelul iediat superior 2cu nuar de ordine ai ic3 nivelului lui
J si e5ista uchie intre 5 si J+
>rati ( intr(un ar&ore cu radacina nodul 5 este *ratele nodului J daca au acelasi parinte+
>run6a ( intr(un ar&ore cu radacina nodul 5 este *run6a daca nu are nici un descendent direct
Cu un ar&ore este un ca6 particular de gra* neorientat inseana ca poate *i repre6entat ca un gra*+ De
aici re6ulta ca pentru repre6entarea unui ar&ore se pot utili6a:
Metode speci*ice gra*urilor:
Metode speci*ice ar&orilor
<ntr(o structur de tip ar&ore0 eleentele sunt structurate pe nivele : pe priul nivel0 nuit nivel $0
e5ist un singur eleent nuit rdcin0 de care sunt legate ai ulte eleente nuite *ii care
*orea6 nivelul #0 de acestea sunt legate eleentele de pe nivelul - T+ a+ + d+
Un e5eplu unde a putea *olosit structura ar&orescenta a structurilor de date cu *olos ar *i un sistea
de care ne *olosi 6ilnic+
(((((((((((
@ C(( root
@ N
+++ hoe
@ N
te6a cursuri
@ @ U N
+++ cs#$# cs##- cs##)
S cree priul ar&ore siplu cu . noduri+
tree
((((
# C(( root
@ N
- )
@
.
struct node
F
int data:
struct node Gle*t:
struct node Gright:
H:
struct nodeG neINode2int data3
F
@@ Aloca eorie pentru noul nod
struct nodeG node A 2struct nodeG3alloc2si6eo*2struct node33:
@@ atri&ui in*oatia nodului
node(Ddata A data:
@@ Seta *iul drept si sting ca NU??
node(Dle*t A NU??:
node(Dright A NU??:
return2node3:
H
int ain23
F
@Gcrea radacinaG@
struct node Groot A neINode2#3:
@G ar&orele la oentul dat
#
@ N
NU?? NU??
G@

root(Dle*t A neINode2-3:
root(Dright A neINode2)3:
@G - si ) devin valorile *iilor drept si sting
#
@ N
- )
@ N @ N
NU?? NU?? NU?? NU??
G@
root(Dle*t(Dle*t A neINode2.3:
@G . devine *iul sting al lui -
#
@ N
- )
@ N @ N
. NU?? NU?? NU??
@ N
NU?? NU??
G@
getchar23:
return $:H
void stergere_arbore(TIP_NOD *rad)
{
if (rad !=0) //este asemanator cu if(rad!=NULL)
{
stergere_arbore (rad->stg);
stergere_arbore (rad->dr);
free (rad);
}
}
Binclude Cstdli&+hD
Binclude Cstdio+hD
Binclude Lconio+hL
struct &st F
int in*oratia:
struct &st Gdreapta0 Gstinga:
H:
tJpede* struct &st nod:
void insert2nod GGar&ore0 int valoare3
F
nod Gtep A NU??:
i*2K2Gar&ore33
F
tep A 2nod G3alloc2si6eo*2nod33:
tep(Dstinga A tep(Ddreapta A NU??:
tep(Din*oratia A valoare:
Gar&ore A tep:
return:
H
i*2valoare C 2Gar&ore3(Din*oratia3
F
insert2P2Gar&ore3(Dstinga0 valoare3:
H
else i*2valoare D 2Gar&ore3(Din*oratia3
F
insert2P2Gar&ore3(Ddreapta0 valoare3:
H
H
void a*isea6aOpreordine2nod Gar&ore3
F
i* 2ar&ore3
F
print*2LM)dL0ar&ore(Din*oratia3:
a*isea6aOpreordine2ar&ore(Dstinga3:
a*isea6aOpreordine2ar&ore(Ddreapta3:
H
H
void a*isea6aOinordine2nod G copac3
F
i* 2copac3
F
a*isea6aOinordine2copac(Dstinga3:
print*2LM)dL0copac(Din*oratia3:
a*isea6aOinordine2copac(Ddreapta3:
H
H
void a*isea6aOpostordine2nod G copac3
F
i* 2copac3
F
a*isea6aOpostordine2copac(Dstinga3:
a*isea6aOpostordine2copac(Ddreapta3:
print*2LM)dL0copac(Din*oratia3:
H
H
void deleteOcopac2nod G copac3
F
i* 2copac3
F
deleteOcopac2copac(Dstinga3:
deleteOcopac2copac(Ddreapta3:
*ree2copac3:
H
H
nodG search2nod GG copac0 int valoare3
F
i*2K2Gcopac33
F
return NU??:
H
i*2valoare C 2Gcopac3(Din*oratia3
F
search2P22Gcopac3(Dstinga30 valoare3:
H
else i*2valoare D 2Gcopac3(Din*oratia3
F
search2P22Gcopac3(Ddreapta30 valoare3:
H
else i*2valoare AA 2Gcopac3(Din*oratia3
F
return Gcopac:
H
H
void ain23
F
nod Gradacina:
nod Gtp:
int 5:
radacina A NU??:
@G /nserarea nodurilor in ar&ore G@
Ihile25KA$3
F print*2Lvaloarea DD L3:
scan*2LMdL0P53:
clrscr23:
goto5J2$0$3:
i* 25AA$3 continue:
insert2Pradacina0 53:
H
@G A*isarea nodurilor din ar&ore G@
te5tcolor2/VE??4W3:
print*2LNnA*isare 7reordineNnL3:
a*isea6aOpreordine2radacina3:
te5tcolor2/MAXENTA3:
print*2LNnNnA*isare /nordineNnL3:
a*isea6aOinordine2radacina3:
te5tcolor2CVAN3:
print*2LNnNnA*isare 7ostordineNnL3:
a*isea6aOpostordine2radacina3:
@G Cautarea unui nod concret G@
nuar:te5tcolor2CCOC?EA=3:
print*2LNnCe nod vreti s(a caut stapine DD L3:
scan*2LMdL0P53:
tp A search2Pradacina0 53:
i* 2tp3
F te5tcolor2/X=EEN3:
print*2LNnNodul cautat Md a *ost gasitNnL0 tp(Din*oratia3:
H
else
F te5tcolor2/=ED3:
print*2LNnNu a &ate stapine dar nu este valoareorea in ar&oreNnL3:
goto nuar:
H
te5tcolor2CCOC?EA=3:
@G Sterge toate nodurile din ar&ore G@
deleteOcopac2radacina3:
H
Descrierea scenariului:
7rograul pe care tre&uie de reali6at const 1n crearea unui progra care va putea e*ectua toate
opera'iile posi&ile asupra unei ul'ii+ Cu alte cuvinte el tre&uie s *ie capa&il de a o&serva nuerele
care se intersectea60 di*er s+a++d
Concluzii:
7e parcursul acestei lucrri a respectat cu stricte'e o&ictivele i cerin'ele date de pro*esor+ A
descris principiile structurilor de date i iportan'a acestora 1n ela&orarea prograelor+ ?a *el a
pre6entat o scurt introducere in tipurile de repre6entare a structurilor de date 1n li&a9ul de
prograare C adug1nd listingul *unc'iilor pentru *iecare oent e5plicat0 copletat spre s*1rit cu o
organigra+
>iind dat cerin'a de a ela&ora o aplica'ie ce va repre6enta o &i&liotec SDA care va lucra cu o
ul'ie0 a recapitulat 1nc odata listele despre care a scris ai sus i teoria despre ar&ori la *el
descrii ai sus i a pornit a *ace un progra care va stoca aceste ul'ii i va *i capa&il s
opera'iile descrise ai sus+
7e parcursul acestei lucrri a 1ntrit cunotin'ele 1n liste i ar&ori la *el i repre6entarea lor 1n
li&a9ul de prograare C+
Literatura:
http:@@geeEsRui6+co@
http:@@III+geeEs*orgeeEs+org@data(structures@
http:@@stacEover*loI+co@
Anexa.1 Listingul:
Binclude Cstdio+hD
Binclude Cunistd+hD
Binclude Cstring+hD
Binclude Cstdli&+hD
Binclude Lconio+hL
@G 7=4TAT/7U=/ DE >UNCT// G@
void help23:
void results23:
void save23:
void opps23:
void sort23:
void Ruit23:
void enu23:
void reune23:
void inter23:
void di*er23:
struct lista F
int val:
struct lista Gur:
H:
tJpede* struct lista N4D:
N4D Groot:
struct &st F
struct lista Gnod:
struct &st Gle*t0Gright:
H:
tJpede* struct &st %ST:
%ST G=44T:
@G 7=4X=AMU? 7=/NC/7A? G@
int ain23F
clrscr23:goto5J2$0$3:
@G ?4X4 G@
te5tcolor2/CVAN3:
puts2LBBBBBBBB BBBBBBBB BBBBBBBB BBB L3:
puts2L BB BB BB BB BB L3:
puts2L BB BB BB BB BB L3:
puts2L BB BBBBBB BB BB BB L3:
puts2L BB BB BB BBBBBBBBB L3:
puts2L BB BB BB BB BB L3:
puts2L BB BBBBBBBB BBBBBBBB BB BBBBB L3:
puts2L BB BB BB BB BB BB L3:
puts2L BB BB BB BB BB L3:
puts2L BBBBBB BB BB BB BB L3:
puts2L BB BB BB BBBBBBBBB L3:
puts2L BB BB BB BB BB BB L3:
puts2L BBBBBB BBBBBBBB BB BB L3:
puts2LL3:
@G MENU G@
te5tcolor2/X=EEN3:
print*2LY;ZelpNnYEZditareNnY=Ze6ultateNnYSZalvareNnY4ZperatiiNnYAZran9ari@SortariNnYQZuitNnNnL3:
char optiune:
print*2L DD L3: scan*2LMcL0Poptiune3:
sIitch2optiune3
F
case [h[ : help23: &reaE:
case [e[ : edit23: &reaE:
case [r[ : results23: &reaE:
case [s[ : save23: &reaE:
case [o[ : opps23: &reaE:
case [a[ : sort23: &reaE:
case [R[ : Ruit23: &reaE:
H
return $:
H
void help23
F
clrscr23:goto5J2$0$3:
te5tcolor2CCOC?EA=3:
>/?E G*:
char c:
*A*open2Lhelp+t5tL0LrL3:
i* 2*AANU??3 puts2LWT>0 *isierul e gol KKKL3:
Ihile 2K*eo*2*33
F
*scan*2*0LMcL0Pc3:
print*2LMcL0c3:
H
*close2*3:
sleep2S3:
getchar23:
puts2LApasa ENTE= pentru a te intoarce in Meniul principalL3:
getchar23:
enu23:
H
void edit23
F
print*2LY/ZntersectieNnY=ZeuniuneNnYDZi*erentaNnNnL3:
char optiune:
print*2L DD L3: scan*2LMcL0Poptiune3:
sIitch2optiune3
F
case [i[ : inter23: &reaE:
case [r[ : reune23: &reaE:
case [d[ : di*er23: &reaE:
H
H
void results23
F
clrscr23:goto5J2$0$3:
te5tcolor2CCOC?EA=3:
>/?E G*:
char c:
*A*open2Lresults+t5tL0LrL3:
i* 2*AANU??3 puts2LWT>0 *isierul e gol KKKL3:
Ihile 2K*eo*2*33
F
*scan*2*0LMcL0Pc3:
print*2LMcL0c3:
H
*close2*3:
sleep2)3:
getchar23:
print*2LNnApasa ENTE= pentru a te intoarce in Meniul principalNnL3:
getchar23:
enu23:
H
void save23
F
>/?E G*:
*A*open2Lresults+t5tL0LIL3:
i* 2*AANU??3 puts2LWT>0 *isierul e gol KKKL3:
N4D GtpA2N4DG3alloc2si6eo*2Gtp33:
tpAroot:
Ihile 2tp(DurKANU??3
F
*print*2*0LMd L0tp(Dval3:
H
H
void opps23
F
clrscr23:goto5J2$0$3:
te5tcolor2CCOC?EA=3:
>/?E G*:
char c:
*A*open2Lopps+t5tL0LrL3:
i* 2*AANU??3 puts2LWT>0 *isierul e gol KKKL3:
Ihile 2K*eo*2*33
F
*scan*2*0LMcL0Pc3:
print*2LMcL0c3:
H
*close2*3:
sleep2)3:
getchar23:
print*2LNnApasa ENTE= pentru a te intoarce in Meniul principalNnL3:
getchar23:
enu23:
H
void sort23
F
clrscr23:goto5J2$0$3:
te5tcolor2CCOC?EA=3:
>/?E G*:
char c:
*A*open2Lsort+t5tL0LrL3:
i* 2*AANU??3 puts2LWT>0 *isierul e gol KKKL3:
Ihile 2K*eo*2*33
F
*scan*2*0LMcL0Pc3:
print*2LMcL0c3:
H
*close2*3:
sleep2)3:
getchar23:
print*2LNnApasa ENTE= pentru a te intoarce in Meniul principalNnL3:
getchar23:
enu23:
H
void Ruit23
F
puts2L/esire cu succesL3:
sleep2#3:
H
void enu23
F
clrscr23:goto5J2$0$3:
te5tcolor2/X=EEN3:
print*2LY;ZelpNnYEZditareNnY=Ze6ultateNnYSZalvareNnY/ZncarcareNnY4ZperatiiNnYAZran9ari@SortariNnYQZuitNnN
nL3:
char optiune:
print*2L DD L3: scan*2LMcL0Poptiune3:
sIitch2optiune3
F
case [h[ : help23: &reaE:
case [e[ : edit23: &reaE:
case [r[ : results23: &reaE:
case [s[ : save23: &reaE:
case [o[ : opps23: &reaE:
case [a[ : sort23: &reaE:
case [R[ : Ruit23: &reaE:
H
te5tcolor2CCOC?EA=3:
H
void inserare2intG 53
F
@G %?4CU? DE C=EA=E A N4DU=/?4= TEM74=A=E G@
N4D GtpA2N4DG3alloc2si6eo*2Gtp33:
N4D GtppA2N4DG3alloc2si6eo*2Gtpp33:
@G S>/=S/T ?A %?4CU? DE C=EA=E A N4DU=/?4= TEM74=A=E G@
@G %?4CU? DE AT=/%U/=EA !A?4=//G@
tp(DvalAG5:
@G S>/=S/T %?4CU? DE AT=/%U/=EA !A?4=//G@
@G %?4CU? DE /NSE=A=E G@
i*2rootKANU??3@@veri*ica daca lista e vida
F
tppAroot:
Ihile2tpp(DurKANU??3 @@se ai poate scri Ihile2tpp3 adica pina cind este
vreo valoarea
F
tppAtpp(Dur:
H
tpp(DurAtp:
print*2L MdL0tp(Dval3:
H
else @@se inserea6a la s*irsitul liste
F
tp(DurANU??:
rootAtp:
print*2L MdL0tp(Dval3:
return:
H
@G S>/=S/T ?A %?4CU? DE /NSE=A=E G@
H
void reune23
F
>/?E G*:
int c:
*A*open2Lultie+t5tL0LrL3:
i* 2*AANU??3 puts2LWT>0 *isierul e gol KKKL3:
Ihile 2K*eo*2*33
F
*scan*2*0LMdL0Pc3:
inserare2Pc3:
H
*close2*3:
save23:
H
void di*er23
F
>/?E G*:
int c:
*A*open2Lultie+t5tL0LrL3:
i* 2*AANU??3 puts2LWT>0 *isierul e gol KKKL3:
Ihile 2K*eo*2*33
F
*scan*2*0LMdL0Pc3:
i*2K2G=44T33
F
tep A 2%ST G3alloc2si6eo*2%ST33:
tep(Dle*t A tep(Dright A NU??:
tep(Ddata A c:
G=44T A tep:
return:
H
i*2c C 2G=44T3(Ddata3
F
inserare2P2G=44T3(Dle*t0 c3:
H
else i*2c D 2G=44T3(Ddata3
F
inserare2P2G=44T3(Dright0 c3:
H
H
*close2*3:
save23:
H
void inter23
F
>/?E G*:
int c:
*A*open2Lultie+t5tL0LrL3:
i* 2*AANU??3 puts2LWT>0 *isierul e gol KKKL3:
N4D GtpA2N4DG3alloc2si6eo*2N4D3:
Ihile 2K*eo*2*33
F
*scan*2*0LMdL0Pc3:
inserare2Pc3:
H
*close2*3:
tpAroot:
Ihile2tp(DurKANU??3
F
i* 2tp(Dval AA tp(Dur(Dval3 inserare2tp(Dval3:
tpAtp(Dur:
H
save23:
H
Anexa. !ezultate:
Rezultatele Reuniunii
Rezultatele Diferenei
Rezultatele Interseciei