Sunteți pe pagina 1din 22

Implementarea listelor

cu ajutorul tipului tablou (1)


PRIMUL NOD int insereaza(lista l, nod x, pozitie p)
AL DOILEA NOD {
. int q; int er; er=FALSE;
LISTA
.
if (l.ultim>=lungmax)
.
{
ULTIM ULTIMUL NOD er=TRUE;
printf("lista este plina");
GOL }
else
LUNGIME MAXIMĂ
if ((p>l.ultim+1)||(p<1))
{
er=TRUE;
#define lungmax 100 printf("pozitia nu exista in lista");
#define TRUE 1 }
#define FALSE 0 else
typedef int pozitie; {
typedef struct{ for (q=l.ultim;q>=p;q--)
int cheie; l.noduri[q+1]=l.noduri[q];
}nod; l.ultim++;
typedef struct{ l.noduri[p]=x;
nod noduri[lungmax+1]; }
int ultim; return er;
}lista; }
pozitie fin(lista l)
{
return l.ultim+1;
}
Implementarea listelor
cu ajutorul tipului tablou (2)
pozitie cauta(nod x, lista l)
int suprima(pozitie p, lista l) {
{ pozitie q,ret;
pozitie q; int er; er=FALSE; int gasit;
if ((p>l.ultim) || (p<1)) q=1; gasit=FALSE;
{ do
er=TRUE; {
printf("pozitia nu axista"); if
} (l.noduri[q].cheie==x.cheie)
else {
{ gasit=TRUE;
l.ultim--; ret=q;
for (q=p;q<=l.ultim;q++) }
l.noduri[q]=l.noduri[q+1]; q++;
} } while ((gasit==FALSE) &&
return er; (q!=l.ultim+1));
} if (gasit==FALSE)
ret=l.ultim+1;
return ret;
}
Implementarea listelor cu ajutorul
tipului pointer (1)
P
CHEIE 1 2 3 Ν
URM … ΝULL
INFO … … … …

struct nod { Crearea unei liste prin insertii


repetate la început
int cheie;
struct nod *urm; p=NULL;
...info; while (n>0)
}; {
struct nod *q, *p; q=(nod*)malloc(sizeof(nod));
q->urm=p;
Inserţie la început de listă
q->.cheie=n;
p=q;
q=(nod*)malloc(sizeof(nod));
n=n-1;
q->urm=p;
}
p=q;
Implementarea listelor cu ajutorul
tipului pointer (2)

Inserţie la sfîrşit de listă Inserţia unui nod înaintea nodului


(sfirsitul de lista indicat de p) indicat de pointerul p

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)

tipelement pop() void push(tipelement x)


{ {
if (stivid(s)==TRUE) if (s.virf==1)
{ {
er=TRUE; er=TRUE;
printf("stiva este vida"); printf("stiva este plina");
} }
else else
{ {
return s.elemente[s.virf++]; s.virf--;
} s.elemente[s.virf]=x;
} }
}
 
Cozi (1) int vid(coada c)
{
if (c.fatza==c.spate) return
typedef struct{ TRUE;
struct nod *fatza, *spate; else return FALSE;
}coada; }
coada c;  
tipelement fatza(coada c)
int er;
{
 
if (vid(c)==1)
void initializare()
{
{
er=TRUE;
c.fatza=(nod*)
printf("coada este vida");
malloc(sizeof(nod));
}
c.fatza->urm=NULL;
else
c.spate=c.fatza;
return c.fatza->urm->element;
}
}
Cozi (2)

void adauga(tipelement x) void scoate()


{ {
c.spate->urm= if (vid(c)==TRUE)
(nod*)malloc(sizeof(nod)); {
c.spate=c.spate->urm; er=TRUE;
c.spate->element=x; printf("coada este vida");
c.spate->urm=NULL; }
} else
c.fatza=c.fatza->urm;
}
Cozi (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);
}

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

  • Lucrarea 09
    Lucrarea 09
    Document3 pagini
    Lucrarea 09
    torjocf
    Încă nu există evaluări
  • Curs 7
    Curs 7
    Document46 pagini
    Curs 7
    torjocf
    Încă nu există evaluări
  • Calculatorul
    Calculatorul
    Document10 pagini
    Calculatorul
    torjocf
    Încă nu există evaluări
  • Lucrarea 09
    Lucrarea 09
    Document3 pagini
    Lucrarea 09
    torjocf
    Încă nu există evaluări
  • Lucrarea 11
    Lucrarea 11
    Document1 pagină
    Lucrarea 11
    torjocf
    Încă nu există evaluări
  • 11BDI
    11BDI
    Document35 pagini
    11BDI
    torjocf
    Încă nu există evaluări
  • Lucrarea 10
    Lucrarea 10
    Document4 pagini
    Lucrarea 10
    torjocf
    Încă nu există evaluări
  • Lucrarea 3
    Lucrarea 3
    Document3 pagini
    Lucrarea 3
    torjocf
    Încă nu există evaluări
  • Lucrarea 12
    Lucrarea 12
    Document1 pagină
    Lucrarea 12
    torjocf
    Încă nu există evaluări
  • Subiecte Examen Asdn 2-1
    Subiecte Examen Asdn 2-1
    Document6 pagini
    Subiecte Examen Asdn 2-1
    torjocf
    Încă nu există evaluări
  • Lucrarea 2
    Lucrarea 2
    Document4 pagini
    Lucrarea 2
    torjocf
    Încă nu există evaluări
  • Lucrarea 11
    Lucrarea 11
    Document1 pagină
    Lucrarea 11
    torjocf
    Încă nu există evaluări
  • Lucrarea 12
    Lucrarea 12
    Document1 pagină
    Lucrarea 12
    torjocf
    Încă nu există evaluări
  • Lucrarea 10
    Lucrarea 10
    Document4 pagini
    Lucrarea 10
    torjocf
    Încă nu există evaluări
  • Curs 5
    Curs 5
    Document35 pagini
    Curs 5
    torjocf
    Încă nu există evaluări
  • Lucrarea 1
    Lucrarea 1
    Document3 pagini
    Lucrarea 1
    torjocf
    Încă nu există evaluări
  • Fituica So2
    Fituica So2
    Document2 pagini
    Fituica So2
    torjocf
    Încă nu există evaluări
  • Laborator PCIII
    Laborator PCIII
    Document90 pagini
    Laborator PCIII
    OviDiu
    Încă nu există evaluări
  • Test de Evaluare Pba
    Test de Evaluare Pba
    Document2 pagini
    Test de Evaluare Pba
    torjocf
    Încă nu există evaluări
  • Lucrarea 3
    Lucrarea 3
    Document3 pagini
    Lucrarea 3
    torjocf
    Încă nu există evaluări
  • Lucrarea 4
    Lucrarea 4
    Document3 pagini
    Lucrarea 4
    torjocf
    Încă nu există evaluări
  • Lucrarea 1
    Lucrarea 1
    Document3 pagini
    Lucrarea 1
    torjocf
    Încă nu există evaluări
  • Curs 7
    Curs 7
    Document46 pagini
    Curs 7
    torjocf
    Încă nu există evaluări
  • Lucrarea 5
    Lucrarea 5
    Document3 pagini
    Lucrarea 5
    torjocf
    Încă nu există evaluări
  • Lucrarea 2
    Lucrarea 2
    Document4 pagini
    Lucrarea 2
    torjocf
    Încă nu există evaluări
  • Curs 8 - 9
    Curs 8 - 9
    Document58 pagini
    Curs 8 - 9
    torjocf
    Încă nu există evaluări
  • 07BDI
    07BDI
    Document47 pagini
    07BDI
    torjocf
    Încă nu există evaluări
  • Curs 4
    Curs 4
    Document41 pagini
    Curs 4
    torjocf
    Încă nu există evaluări
  • Curs 6 - 7
    Curs 6 - 7
    Document42 pagini
    Curs 6 - 7
    torjocf
    Încă nu există evaluări