Documente Academic
Documente Profesional
Documente Cultură
q =(nod*)malloc(sizeof(nod)); q
q->urm=p->urm; =(nod*)malloc(sizeof(nod));
p->urm=q; *q=*p;
p->urm=q;
Inserţia unui nod dupa nodul indicat
de pointerul p Suprimarea nodului de după nodul
indicat de pointerul p
q =(nod*)malloc(sizeof(nod));
q->urm=p->urm; r=p->urm;
p->urm=q; p->urm=r->urm;
free(r);
Implementarea listelor cu ajutorul
tipului pointer (3)
Suprimanrea nodului indicat de Cautarea unui nod intr-o lista inlantuita
pointerul p
q=p;
r=p->urm; while ((q!=NULL) &&
*p=*r; (q->cheie!=x)) !!!
free(r); q=q->urm;
#define 0 FALSE
Traversarea unei liste inlantuite
#define 1 TRUE
b=FALSE;
q=p;
q=p;
while (q!=NULL)
while ((q!=NULL) &&
{
(b==FALSE))
prelucrare(*q);
if (q->cheie==x) b=TRUE;
q=q->urm;
else q=q->urm;
}
Variante de implementare a structurii de
lista simplu inlantuita (1)
void cauta(int x) void cauta1(int x)
{ {
struct nod *q; struct nod *q;
int b; q=inceput;
q=inceput; fanion->cheie=x;
b=TRUE; while (q->cheie!=x) q=q->urm;
while ((q!=NULL) && (b==TRUE)) if (q==fanion)
if (q->cheie==x) b=FALSE; else {
q=q->urm; q=inceput;
if (b==TRUE) inceput=(nod
{ *)malloc(sizeof(nod));
q=inceput; inceput->cheie=x;
inceput=(nod inceput->numar=1;
*)malloc(sizeof(nod)); inceput->urm=q;
inceput->cheie=x; }
inceput->numar=1; else
inceput->urm=q; q->numar++;
} }
else
q->numar++;
}
Variante de implementare a structurii de
lista simplu inlantuita (2)
Liste ordonate – tehnica celor doi pointeri
void cauta2(int x) if ((q1->cheie==x) && (q1!=fanion))
{ q1->numar++;
struct nod *q1, *q2, *q3; else
q2=inceput; {
q1=q2->urm; q3=(nod *)malloc(sizeof(nod));
fanion->cheie=x; q3->cheie=x;
q3->numar=1;
while (q1->cheie<x) q3->urm=q1;
{ q2->urm=q3;
q2=q1; }
q1=q2->urm; }
}
Inceput
Q2 Q1
Variante de implementare a structurii de
lista simplu inlantuita (3)
Cautarea in lista cu reordonare
void cauta3(int x) { if (q1==fanion)
{ {
struct nod *q1, *q2, *q3; q2=inceput;
q1=inceput; inceput=(nod
fanion->cheie=x; *)malloc(sizeof(nod));
if (q1==fanion) inceput->cheie=x;
{ inceput->numar=1;
inceput=(nod inceput->urm=q2;
*)malloc(sizeof(nod)); }
inceput->cheie=x;
inceput->numar=1; else
inceput->urm=fanion; {
} q1->numar++;
else q2->urm=q1->urm;
if (q1->cheie==x) q1->numar++; q1->urm=inceput;
else inceput=q1;
do }
{ }
q2=q1; }
q1=q2->urm;
} while (q1->cheie!=x);
Variante de implementare a structurii de
lista simplu inlantuita (4)
void tiparire(struct nod* q) void main()
{
{struct nod *r; inceput=NULL;
r=q; inceput=
while (r!=NULL) (nod *)malloc(sizeof(nod));
while (r!=fanion) fanion=inceput;
{ inceput=
printf(" %d %d \n",r- (nod *)malloc(sizeof(nod));
>cheie,r->numar); fanion=
r=r->urm; (nod *)malloc(sizeof(nod));
} inceput->urm=fanion;
} scanf("%d",&cuv);
while (cuv!=0)
{
cauta(cuv);
scanf("%d",&cuv);
}
tiparire(inceput);
}
Sortarea topologica (1)
1<2 2<4 4<6 2<10 4<8 6<3 1<3 3<5 5<8 7<5 7<9 9<4 9<10
1 2
10
6
4
3 8
9
5
7
7 9 1 2 4 6 3 5 8 10
Sortarea topologica (2)
1<2 2<4 4<6 2<10 4<8 6<3 1<3 3<5 5<8 7<5 7<9 9<4 9<10
Inceput
Sfârşit
1 2 4 6 10 8 3 5 7 9
0 1 2 1 2 2 2 2 0 1
Χ
NULL NULL
…. …. ….
NULL NULL NULL
…. …. …. …. ….
NULL NULL NULL NULL NULL
Sortarea topologica (3)
struct principal struct principal *caut(int w)
{ {
int cheie; struct principal *h;
int contor; h=inceput;
struct principal *urm; sfirsit->cheie=w;
struct secundar *secund; while (h->cheie!=w) h=h->urm;
}; if (h==sfirsit)
{
struct secundar sfirsit=(principal*)
{ malloc(sizeof(principal));
struct principal *id; z++;
struct secundar *urm; h->contor=0;
}; h->secund=NULL;
h->urm=sfirsit;
struct principal *inceput, }
*sfirsit, *p, *q; return h;
struct secundar *t; }
int x,y,z;
while (p!=sfirsit)
{
Sortarea topologica (4) q=p;
p=p->urm;
if (q->contor==0)
void main() {
{ q->urm=inceput;
inceput=(principal*) inceput=q;
malloc(sizeof(principal)); }
sfirsit=inceput; }
z=0; //faza initiala q=inceput; // faza de iesire
scanf("%d",&x); while (q!=NULL)
while (x!=0) {
{ printf("%d ",q->cheie);
scanf("%d",&y); z--;
printf("%d %d\n",x,y); t=q->secund; q=q->urm;
p=caut(x); q=caut(y); while (t!=NULL)
{
t=(secundar*)malloc
p=t->id;p->contor--;
(sizeof(secundar));
if (p->contor==0)
t->id=q;
{
t->urm=p->secund;
p->urm=q;q=p;
p->secund=t; }
q->contor++; t=t->urm;
scanf("%d",&x); }
} }
tiparire(inceput); if (z!=0) printf("multimea
//cautarea principalilor cu zero predecesori nu este partial ordonata");
p=inceput;inceput=NULL; }
Liste dublu inlantuite
struct nod
{
tipelement element;
struct nod *anterior, *urmator;
};
… …
… …
Stive (1)
implementarea stivelor cu ajutorul tipului tablou
..
.
VIRF PRIMUL ELEMENT
AL DOILEA ELEMENT
..
.
LUNGIME_MAXIMĂ ULTIMUL ELEMENT
Stive (2)
int stivid(stiva s)
{
#define TRUE 1
if(s.virf>lungime_maxima)
#define FALSE 0 return TRUE;
#define lungime_maxima 10 else return FALSE;
}
typedef struct {
int virf;
tipelement virfst(stiva s)
int elemente[lungime_maxima];
{
}stiva;
if (stivid(s)==TRUE)
{
int er; stiva s;
er=TRUE;
void initilizare()
printf("stiva este vida");
{
}
s.virf=lungime_maxima;
else
}
return s.elemente[s.virf];
}
Stive (3)
LUNGIME MAXIMĂ 1
.
.
.
.
.
.
.
.
.
.
.
.
C, SPATE C, FATZA
COADA
Cozi (4)
int vid(coada c)
{
#define TRUE 1 if
#define FALSE 1 (avanseaza(c.spate)==c.fatza)
#define lungime_maxima 10 return TRUE;
else return FALSE;
typedef struct{
}
tipelement
elemente[lungime_maxima]; tipelement fatza(coada c)
int fatza, spate; {
} coada; if (vid(c)==TRUE)
coada c; int er; {
int avanseaza(int i) er=TRUE;
{ printf("coada este vida");
div_t x; }
x = div(i,lungime_maxima); else
return x.rem; return c.elemente[c.fatza];
} }
Cozi (5)
void adauga(tipelement x)
{
if (avanseaza(avanseaza(c.spate))==c.fatza)
{
er=TRUE;
printf("coada este plina");
void scoate()
}
{
else
if (vid(c)==TRUE)
{
{
c.spate=avanseaza(c.spate);
er=TRUE;
c.elemente[c.spate]=x;
printf("coada este vida");
}
}
}
else
c.fatza=avanseaza(c.fatza);
}