Sunteți pe pagina 1din 19

Studiul individual

La disciplina: Programarea calculatorului

A
realizat
Popescu
Nicolae
Grupa RC-0121
Profesor:Tofan Tatiana
CHIȘINĂU 2022

Structuri dinamice de date

Liste
1
Să se creeze o listă cu numere întregi. Se cere: a) Să se afișeze
conținutul listei ;b) Să se determine suma și maximul
elementelor listei.
#include<stdio.h>
#include<conio.h>
int n, i, k,s=0,max=0;
struct lista {
struct lista *urm;
int val;};
lista *prim,*ultim;
void creare (int x)
{ lista *p;
p = new lista;
p->val = x;
if (prim == NULL) {
prim = p;
ultim = p;
ultim->urm = NULL; } else {
ultim->urm = p;
ultim = p;
ultim->urm = NULL; }}
void afisare () {
lista *p;
p = prim;
while (p != NULL) {
printf ("%d\n", p->val);
max=p->val;
p = p->urm; }}
void suma(){
lista *p; p = prim;
while (p != NULL) {
if(p->val>max){
max=p->val;} s=s+p->val; p = p->urm; }

printf("Suma elementelor=%d\nMaximalul=%d",s,max);}
int main () {
printf ("introdu n=");
scanf ("%d", &n);
for (i = 1; i <= n; i++) {
printf ("introdu %d element: ", i);
scanf ("%d", &k);
creare (k);} afisare (); suma (); return 0;}

2
Să se creeze o listă cu n numere întregi. Să se afișeze conținutul
listei la ecran și să se calculeze cîte elemente pare și cîte elemente
impare avem în listă și suma lor
#include<stdio.h>
#include<conio.h>
int n, i, k,nrp=0,nri=0,sp=0,si=0;
struct lista {
struct lista *urm;
int val;};
lista *prim,*ultim;
void creare (int x)
{ lista *p;
p = new lista;
p->val = x;
if (prim == NULL) {
prim = p;
ultim = p;
ultim->urm = NULL; } else {
ultim->urm = p;
ultim = p;
ultim->urm = NULL; }}
void afisare () {
lista *p;
p = prim;
while (p != NULL) {
printf ("%d\n", p->val);

p = p->urm; }}
void numarul(){
lista *p; p = prim;
while (p != NULL) {
if(p->val%2==0){
nrp++;
sp=sp+p->val;
} else { nri++;
si=si+p->val;
} p = p->urm; }

printf("Numarul elementelor pare=%d\nSuma=%d\nNumarul


elementelor impare=%d\nSuma=%d",nrp,sp,nri,si);}
int main () {
printf ("introdu n=");
scanf ("%d", &n);
for (i = 1; i <= n; i++) {
printf ("introdu %d element: ", i);
scanf ("%d", &k);
creare (k);} afisare (); numarul (); return 0;}

3
Să se creeze o listă ce conține datele despre titlul, autorul precum și
editura unor cărți. Să se afișeze lista la ecran după care să se afișeze
acele cărți din listă care sunt editate în București ale căror titlu se
începe cu litera ”A”.
#include<stdio.h>
#include<conio.h>
#include <string.h>
struct carte
{char titlul[10], autorul[10],editura[10];};
struct lista
{carte s;
lista *urm;};
lista *prim,*ultim;
void adaugare(carte x)
{lista *p=new lista;
p->s=x;
p->urm=prim;
if(prim==NULL)
{prim=p; ultim=p; ultim->urm=NULL;}
else { ultim->urm=p; ultim=p; ultim->urm=NULL;}}
void citire()
{ int n; carte x;
printf("introdu n="); scanf("%d",&n);
for (int i=1; i<=n;i++)
{ printf("introdu datele cartii %d\n",i);
printf("Titlul: ");scanf("%s",x.titlul);
printf("Autorul: ");scanf("%s",x.autorul);
printf("Editura: ");scanf("%s",x.editura);
adaugare(x);}}
void afisare(lista *prim)
{lista *p;
p=prim;
while(p!=NULL) { printf("%s\n",p->s.titlul);printf("%s\n",p-
>s.autorul);
printf("%s\n",p->s.editura);p=p->urm;}}
void verificaretitlu(lista *prim)
{lista *p;
p=prim;
while(p!=NULL) { if(strncmp(p->s.titlul,"A",1)==0)
{
printf("Cartea care incepe cu A= %s\n",p->s.titlul);
}
p=p->urm;}}
void verificareeditura(lista *prim)
{lista *p;
p=prim;
while(p!=NULL) { if(strcmp(p->s.editura,"Bucuresti")==0)
{
printf("Cartea cu editura in bucuresti=%s \n",p->s.titlul);
}
p=p->urm;}}
int main()
{citire();
afisare(prim);
verificaretitlu(prim);
verificareeditura(prim);
return 0;}

5 Stive. Cozi
4
Sa se creeze o stivă cu elemente litere mici. Se cere: a) afisarea stivei
b) sa se transforme fiecare litera in litera mare si apoi sa se afiseze
stiva modificata.
#include<stdio.h>
#include<conio.h>
struct nod
{ struct nod *urm;
char val;};
nod *prim,*p,*ultim;
void creare(char x)
{if (prim==NULL)
{ prim=ultim=new nod;
prim->val=x;
prim->urm=NULL;}
else
{p=new nod;
p->val=x;
p->urm=NULL;
ultim->urm=p;
ultim=p;}}
void transformare()
{p=prim;
while(p!=NULL) {
p->val=p->val-32;
printf("%c\n",p->val);p=p->urm;}}
void afisare()
{p=prim;
while(p!=NULL) { printf("%c\n",p->val);p=p->urm;}}
int main()
{ int i,n;
char k;
printf("introdu n="); scanf("%d",&n);
for (i=1;i<=n;i++)
{printf("introdu %d element: ",i);
scanf(" %c",&k); creare(k);}
printf("\nAfisare:\n");
afisare();
printf("\nDupa transformare:\n");
transformare();
return 0;}

5
Să se creeze o stivă ce conține numere reale. Să se afișeze stiva la
ecran precum și media elementelor pozitive și media elementelor
negative din stivă.
#include<stdio.h>
#include<conio.h>
int sp=0,sn=0,nrn=0,nrp=0;
struct nod
{ struct nod *urm;
char val;
};
nod *vf,*p;
void media()
{
p=vf;
while(p!=NULL)
{
if(p->val>0)
{
sp+=p->val;
nrp++;
}
else
{
sn+=p->val;
nrn++;
}
p=p->urm; }}
void creare(int x)
{ p=new nod;
p->val=x;
p->urm=vf;
vf=p; }
void afisare()
{p=vf;
while(p!=NULL) { printf("%d\n",p->val);p=p->urm;}}
int main()
{ int i,n,k;
printf("introdu n="); scanf("%d",&n);
for (i=1;i<=n;i++)
{printf("introdu %d element: ",i);
scanf(" %d",&k); creare(k);}
afisare();
media();
printf("Media elementelor negative este=%d\nMedia elementelor
pozitive este=%d",sn/nrn,sp/nrp);
return 0;}
6
Să se creeze o coadă cu n numere întregi. Să se afișeze conținutul
cozii la ecran, după care să se calculeze suma elementelor pare și
suma elementelor impare.
#include<stdio.h>
#include<conio.h>
int sp=0,si=0;
struct nod
{ struct nod *urm;
char val;};
nod *prim,*p,*ultim;
void creare(int x)
{if (prim==NULL)
{ prim=ultim=new nod;
prim->val=x;
prim->urm=NULL;}
else
{p=new nod;
p->val=x;
p->urm=NULL;
ultim->urm=p;
ultim=p;}}
void afisare()
{p=prim;
while(p!=NULL) { printf("%d\n",p->val);p=p->urm;}}
void suma()
{p=prim;
while(p!=NULL) {
if(p->val%2==1)
{
si+=p->val;
}
else
{
sp+=p->val;
}
p=p->urm;}}
int main()
{ int i,n,k;
printf("introdu n="); scanf("%d",&n);
for (i=1;i<=n;i++)
{printf("introdu %d element: ",i);
scanf(" %d",&k); creare(k);}
afisare();
suma();
printf("SUma elementelor pare=%d\nSuma elementelor impare=
%d",sp,si);
return 0;}
7
. Să se creeze un arbore al căror noduri conține numere întregi. Să se
afișeze arborele la ecran. Să se determine valoarea maximă din arbore
și de cîte ori apare aceasta în arbore.
#include<stdio.h>
#include<conio.h>
int max,nrmax=0;
struct nod
{int inf;
nod *st, *dr;};
void creare(nod* &r)
{ int x;
scanf("%d",&x);
if(x==0)
r=NULL;
else
{r=new nod; r->inf=x;
printf("dati descendentul sting al nodului %d: ",r->inf);
creare(r->st);
printf("dati descendentul drept al nodului %d: ",r->inf);
creare(r->dr);}}
void afisare(nod *r, int nivel)
{int i;
if (r!=NULL)
{afisare(r->st,nivel+1);
for (i=1;i<=nivel;i++)
printf(" ");
printf("%d\n",r->inf);
afisare(r->dr,nivel+1);}}

void preordine(nod *r)


{if(r!=NULL)
{
printf("%d ",r->inf);
max=r->inf;
preordine(r->st);
preordine(r->dr);}}

void max1(nod *r)


{if(r!=NULL)
{
if(r->inf>max)
{
max=r->inf;}

max1(r->st);
max1(r->dr);}}
void max2(nod *r)
{if(r!=NULL)
{
if(r->inf==max)
{
nrmax++;
}
max2(r->st);
max2(r->dr);}}
int main()
{ nod *r;
printf("introduceti nodurile\n");
creare(r);
afisare(r,0);

printf("\nnodurile in preordine\n");
preordine(r);
max1(r); max2(r);
printf("\nNumarul maximal=%d\nNumarul de aparente a numarului
maximal=%d",max,nrmax);
return 0;}

8
Să se creeze un arbore al căror noduri conține numere întregi. Să se
afișeze conținutul arborelui la ecran și să se calculeze elementul
maxim din arbore.
#include<stdio.h>
#include<conio.h>
int max ;
struct nod
{int inf;
nod *st, *dr;};
void creare(nod* &r)
{ int x;
scanf("%d",&x);
if(x==0)
r=NULL;
else
{r=new nod; r->inf=x;
printf("dati descendentul sting al nodului %d: ",r->inf);
creare(r->st);
printf("dati descendentul drept al nodului %d: ",r->inf);
creare(r->dr);}}
void afisare(nod *r, int nivel)
{int i;
if (r!=NULL)
{afisare(r->st,nivel+1);
for (i=1;i<=nivel;i++)
printf(" ");
printf("%d\n",r->inf);
afisare(r->dr,nivel+1);}}

void preordine(nod *r)


{if(r!=NULL)
{
printf("%d ",r->inf);
max=r->inf;
preordine(r->st);
preordine(r->dr);}}

void max1(nod *r)


{if(r!=NULL)
{
if(r->inf>max)
{
max=r->inf;}

max1(r->st);
max1(r->dr);}}
int main()
{ nod *r;
printf("introduceti nodurile\n");
creare(r);
afisare(r,0);

printf("\nnodurile in preordine\n");
preordine(r);https:
max1(r);
printf("\nNumarul maximal=%d\n",max);
return 0;}

9
Să se creeze un arbore ce conține datele despre lucrătorii unei
întreprinderi : numele, funcția și salariul. Să se afișeze salariul mediu
al lucrătorilor.

10
Se consideră tabloul A[1..n] de numere întregi, n<=100. Să se scrie un
program care calculează cîte elemente pozitive avem în tablou
utilizînd algoritmul bazat pe metoda trierii.
#include<stdio.h>
#include<conio.h>
int i,k=0,m,n,a[60],max;
void citire()
{
for(i=1;i<=n;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}

}
int solutie_posibila(int i)
{if(a[i]>0) return 1; else return 0;}
void prelucrare_solutie()
{ k++;}
int main()
{
printf("n="); scanf("%d",&n);

citire();
for(i=1;i<=n;i++)
if (solutie_posibila(i)){ prelucrare_solutie();}
printf("In tablou sunt %d numere pozitive",k);
return 0;}

11
. Se consideră numerele naturale din mulţimea {0, 1, 2, …, n}.
Elaboraţi un program care determină suma elementelor pare din
mulțime utilizînd algoritmul bazat pe metoda trierii
#include <stdio.h>
int i,k=0,n,j,sp=0;

int solutia_posibila(int i)
{
if(i%2==0) return 1; else return 0;}

void prelucrare_solutie()
{
k++;
sp+=i;
}
int main()
{
printf("n="); scanf("%d",&n);
for(i=1;i<=n;i++)
if(solutia_posibila(i)){prelucrare_solutie();}
printf("numere pare=%d\nsuma lor=%d",k,sp);
return 0;
}

12

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