Documente Academic
Documente Profesional
Documente Cultură
P2aplicatii 4 PDF
P2aplicatii 4 PDF
i.
#include<stdio.h>
#include<alloc.h>
typedef struct TNOD{float x;
struct TNOD* next;};
void main()
{TNOD *cap,*p,*q;
int n,i;
float a;
//creare lista
printf("primul nod="); scanf("%f",&a);
cap=(TNOD*)malloc(sizeof(TNOD));
cap->x=a; cap->next=NULL;
p=cap;
ii.
iii.
S se scrie funcia pentru inserarea unui nod ntr-o list simplu nlnuit
dup un nod identificat prin valoarea unui cmp. Dac nodul cutat nu
exist, inserarea se face la sfritul listei.
Funcia are ca parametri capul listei n care se insereaz, valoarea care se
insereaz i valoarea dup care se insereaz. Prin numele funciei se ntoarce noul
cap al listei.
TNOD* ins2(TNOD* cap, float a,float x)
{TNOD *p,*q;
p=NEW;
p->x=a;
if(!cap) {cap=p;p->next=NULL;}
else{q=cap;
while((q->next)&&(q->x!=x))
q=q->next;
p->next=q->next;
q->next=p;}
return cap;}
iv.
S se scrie funcia pentru inserarea unui nod ntr-o list simplu nlnuit
naintea unui nod identificat prin valoarea unui cmp. Dac nodul cutat
nu exist, se face inserare la nceputul listei.
Funcia are ca parametri capul listei n care se insereaz, valoarea care se
insereaz i valoarea naintea crei se insereaz. Prin numele funciei se ntoarce noul
cap al listei.
TNOD* ins3(TNOD* cap, float a,float x)
{TNOD *p,*q;
p=NEW; p->x=a;
if(!cap) {cap=p;p->next=NULL;}
else{q=cap;
while((q->next)&&(q->next->x!=x))
q=q->next;
if(!q->next){p->next=cap;cap=p;}
else {p->next=q->next;
q->next=p;}
}
return cap;}
v.
S se scrie funcia pentru cutarea unui nod identificat prin valoarea unui
cmp ntr-o list simplu nlnuit.
Funcia are ca parametri capul listei n care se caut i valoarea cutat. Prin
numele funciei se ntoarce adresa nodului care conine informaia cutat sau NULL,
dac informaia nu a fost gsit n list. Dac snt mai multe noduri cu aceeai
valoare, se ntoarce adresa ultimului.
TNOD* cauta(TNOD* cap, float a)
{TNOD *q;
q=cap;
while((q)&&(q->x!=a))
q=q->next;
return q;}
vi.
S se scrie funcia pentru adugarea unui nod la sfritul unei liste simplu
nlnuite.
Funcia are ca parametri capul listei n care se insereaz i valoarea care se
insereaz. Prin numele funciei se ntoarce noul cap al listei.
TNOD* ins4(TNOD* cap, float a)
{TNOD *p,*q;
p=NEW;
p->x=a;
p->next=NULL;
if(!cap) cap=p;
else{q=cap;
while(q->next)
q=q->next;
q->next=p;}
return cap;}
vii.
viii.
ix.
x.
xi.
xii.
i.
ii.
iii.
S se scrie funcia pentru adugarea unui element de tip real ntr-o stiv.
Funcia are ca parametri adresa stivei i valoarea care trebuie adugat n
stiv. Prin numele funciei se ntoarce valoarea 1, dac stiva era plin (i nu se poate
face adugare), sau 0, dac adugarea a decurs normal.
iv.
v.
n exerciiile care urmeaz se vor folosi cozi de elemente de tip real. Pentru
implementarea ei se va folosi o list simplu nlnuit (ca n exerciiile precedente).
Capul listei, mpreun cu capacitatea maxim a cozii, numrul de poziii ocupate i
coada cozii (adresa ultimului element) constituie cmpuri ale structurii COADA:
typedef struct TNOD{float x;
struct TNOD* next;};
typedef struct COADA{TNOD *cap, *coada;
capacitate c,max;};
vi.
vii.
viii.
S se scrie funcia pentru adugarea unui element de tip real ntr-o coad.
Funcia are ca parametri adresa cozii i valoarea care trebuie adugat. Prin
numele funciei se ntoarce valoarea 1, cnd coada este plin (i nu se poate face
adugare), sau 0, dac adugarea a decurs normal.
int push_c(COADA *c, float a)
{TNOD *p;
int er;
if(!e_plina(*c))
{p=NEW;
ix.
x.
ii.
iii.
S se scrie funcia pentru inserarea unui nod ntr-o list circular simplu
nlnuit dup un nod identificat prin valoarea unui cmp.
Funcia are ca parametri capul listei, valoarea care trebuie inserat i
valoarea dup care se insereaz. Dac valoarea cutat nu este gsit, atunci inserarea
se face la sfrit.
TNOD* ins2(TNOD* cap, float a,float x)
{TNOD *p,*q;
p=NEW;
p->x=a;
if(!cap) {cap=p;p->next=cap;}
else{q=cap;
while((q->next!=cap)&&(q->x!=x))
q=q->next;
p->next=q->next;
q->next=p;}
return cap;}
iv.
S se scrie funcia pentru inserarea unui nod ntr-o list circular simplu
nlnuit naintea unui nod identificat prin valoarea unui cmp.
Funcia are ca parametri capul listei, valoarea care se adaug i valoarea
naintea creia se adaug. Prin numele funciei se ntoarce noul cap al listei.
TNOD* ins3(TNOD* cap, float a,float x)
{TNOD *p,*q;
p=NEW;
p->x=a;
if(!cap) {cap=p;p->next=cap;}
else{q=cap;
while((q->next!=cap)&&(q->next->x!=x))
q=q->next;
if(q->next==cap)cap=p;
p->next=q->next; q->next=p;}
return cap;}
v.
vi.
vii.
viii.
ix.
listei.
TNOD* sterg3(TNOD* cap)
{TNOD *p,*q;
p=cap;
if(cap)
if(cap==cap->next){free(cap);
cap=NULL;}
else{while((p->next->next!=cap))
p=p->next;
q=p->next;
p->next=cap;
free(q);}
return cap;}
x.
xi.
xii.
i.
#include<stdio.h>
#include<alloc.h>
#define NEW (TNOD*)malloc(sizeof(TNOD));
typedef struct TNOD{float x;
struct TNOD *next,*pred;};
void main()
{TNOD *cap, *p, *q;
float x;
//creare lista
printf("\nprimul nod: ");scanf("%f",&x);
cap=NEW;
cap->pred=NULL; cap->next=NULL;
cap->x=x;
p=cap;
printf("\nnod: ");scanf("%f",&x);
while(!feof(stdin))
{q=NEW;
q->next=NULL; q->x=x;
q->pred=p; p->next=q;
p=q;
printf("\nnod: ");scanf("%f",&x);}
//afisare lista
printf("\n");
p=cap;
while(p)
{printf("\t%5.2f",p->x);
p=p->next;}
//stergere lista
while(cap)
{p=cap;
cap=cap->next;
if(cap)cap->pred=NULL;
free(p);}
printf("\ngata");}
ii.
S se scrie funcia pentru inserarea unui nod la nceputul unei liste dublu
nlnuite.
Funcia are ca parametri capul listei i valoarea care trebuie inserat. Prin
numele funciei se ntoarce noul cap al listei.
TNOD* ins1(TNOD* cap, float a)
{TNOD *p;
p=NEW;
p->x=a;
p->pred=NULL;
p->next=cap;
if(cap)cap->pred=p;
return p;}
iii.
S se scrie funcia pentru inserarea unui nod ntr-o list dublu nlnuit,
dup un nod identificat prin valoarea unui cmp.
Funcia are ca parametri capul listei, valoarea care se insereaz i valoarea
dup care se insereaz. Dac valoarea cutat nu este gsit, se face inserare la
sfritul listei.
TNOD* ins2(TNOD* cap, float a, float x)
{TNOD *p,*q;
p=NEW;
p->x=a;
if(!cap){cap=p;p->next=NULL;p->pred=NULL;}
else{q=cap;
while((q->next)&&(q->x!=x))
q=q->next;
p->next=q->next;
p->pred=q;
q->next=p;
if(p->next)p->next->pred=p;}
return cap;}
iv.
S se scrie funcia pentru inserarea unui nod ntr-o list dublu nlnuit,
naintea unui nod identificat prin valoarea unui cmp.
Funcia are ca parametri capul listei, valoarea care trebuie inserat i
valoarea naintea creia se insereaz. Dac valoarea cutat nu este gsit, se face
inserare la nceputul listei.
TNOD* ins3(TNOD *cap, float a, float x)
{TNOD *p, *q;
p=NEW;
p->x=a;
if(!cap){cap=p;p->next=NULL;p->pred=NULL;}
else{q=cap;
while((q->next)&&(q->x!=x))
q=q->next;
if(q->x!=x){p->next=cap; cap->pred=p;
p->pred=NULL;
cap=p;}
v.
S se scrie funcia pentru cutarea unui nod identificat prin valoarea unui
cmp ntr-o list dublu nlnuit.
Funcia are ca parametri capul listei n care se caut i valoarea cutat. Prin
numele funciei se ntoarce adresa nodului care conine informaia cutat sau NULL
dac informaia nu a fost gsit n list. Dac snt mai multe noduri cu aceeai
valoare se ntoarce adresa ultimului. Funcia este identic pentru liste simplu i dublu
nlnuite.
TNOD* cauta(TNOD* cap, float a)
{TNOD *q;
q=cap;
while((q)&&(q->x!=a))
q=q->next;
return q;}
vi.
S se scrie funcia pentru adugarea unui nod la sfritul unei liste dublu
nlnuite.
Funcia are ca parametri capul listei i valoarea care trebuie inserat. Funcia
ntoarce, prin numele ei, noul cap al listei.
TNOD* ins4(TNOD* cap, float a)
{TNOD *p, *q;
p=NEW;
p->x=a;
p->next=NULL;
if(!cap){p->pred=NULL; cap=p;}
else {q=cap;
while(q->next)
q=q->next;
p->pred=q;
q->next=p;}
return cap;}
vii.
listei.
TNOD* sterg1(TNOD* cap)
{TNOD* p;
if(cap)
{p=cap;
viii.
ix.
listei.
TNOD* sterg3(TNOD* cap)
{TNOD *p,*q;
if(cap)
{p=cap;
while(p->next)
p=p->next;
if(!p->pred){free(cap);cap=NULL;}
else {q=p->pred;free(p);q->next=NULL;}
}
return cap;}
x.
xi.
xii.
ii.
iii.
iv.
care are ca parametri capul listei i adresa primului din cele dou noduri i ntoarce,
prin numele ei, noul cap al listei.
TNOD* schimba(TNOD *cap, TNOD *p)
{TNOD *q,*r;
if(p==cap){q=p->next;
r=q->next;
cap=q;q->next=p;
p->next=r;}
else{r=cap;
while(r->next!=p)
r=r->next;
q=p->next;
p->next=q->next;
q->next=p;
r->next=q;}
q=cap;
return cap;}
TNOD* sort(TNOD* cap)
{int er;
TNOD *p,*q;
er=1;
if(cap)
while(er)
{er=0;
for(p=cap;p->next;p=p->next)
if(p->x>p->next->x){cap=schimba(cap,p);
er=1;}
}
return cap;}
v.
vi.
vii.
viii.
ix.
S se scrie funcia pentru crearea unei liste sortate din elementele unui
vector.
Funcia are ca parametri vectorul i numrul su de elemente. Prin numele
funciei se ntoarce capul noii liste.
TNOD* creare(float x[], int n)
{int i;
TNOD *cap,*p,*q;
cap=NULL;
for(i=0;i<n;i++)
{q=NEW;
q->x=x[i];
if((!cap)||(cap->x>x[i]))
{q->next=cap;
cap=q;}
else if(!cap->next){q->next=NULL;
cap->next=q;}
else{p=cap;
while((x[i]>p->next->x)&&(p->next))
p=p->next;
q->next=p->next;
p->next=q;}
}
return cap;}