Documente Academic
Documente Profesional
Documente Cultură
1
/* arbelnod.cpp - programul construieste recursiv si tipareste un arbore
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int nr;
int ap;
} ARB;
int nel = 0;
ARB *e;
ARB *pc;
int gasit;
if (!v)
inserare(v->pstg, val);
inserare(v->pdr, val);
else
v->ap++;
if (n->pdr)
inlocuire_nod(n->pdr);
if (!a)
{e=a;
} // nodului eliminat
} // nodului eliminat
else
if (v)
{if (v->pstg)
listare_SRD (v->pstg);
nel++;
if (nel%7==0)
printf("\n");
if (v->pdr)
listare_SRD(v->pdr);
}
main()
ARB *pl;
int valoare;
pl = NULL;
clrscr();
printf ("Valoare:");
inserare (pl,valoare);
printf ("Valoare:");
/* afisare arbore */
listare_SRD (pl);
printf ("NULL\n");
scanf("%d", &valoare);
elimina_nod(pl, valoare);
listare_SRD (pl);
printf ("NULL\n");
getch();
}
2
/*
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int nr;
int ap;
} ARB;
int nel = 0;
ARB *pc;
int gasit;
if (!v)
v->pstg=NULL; v->pdr=NULL;}
inserare(v->pstg, val);
else
v->ap++;
if (v)
{if (v->pstg)
listare_SRD (v->pstg);
nel++;
if (nel%7==0)
printf("\n");
if (v->pdr)
listare_SRD(v->pdr);
if (a>b)
return a;
return b;
if (!v)
return 0;
else
main()
ARB *pl;
int valoare;
pl = NULL;
clrscr();
printf ("Valoare:");
inserare (pl,valoare);
printf ("Valoare:");
/* afisare arbore */
listare_SRD (pl);
printf ("NULL\n");
}
3
/*
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int nr;
int ap;
} ARB;
int nel = 0;
ARB *pc;
int gasit;
if (!v)
v->pstg=NULL; v->pdr=NULL;}
inserare(v->pstg, val);
else
v->ap++;
if (v)
nel++;
if (nel%7==0)
printf("\n");
if (v->pstg)
listare_RSD (v->pstg);
if (v->pdr)
listare_RSD(v->pdr);
if (v)
{if (v->pstg)
listare_SRD (v->pstg);
nel++;
if (nel%7==0)
printf("\n");
if (v->pdr)
listare_SRD(v->pdr);
}
main()
ARB *pl;
int valoare;
pl = NULL;
clrscr();
printf ("Valoare:");
while ( valoare ) {
inserare (pl,valoare);
printf ("Valoare:");
/* afisare lista */
listare_RSD (pl);
printf ("NULL\n");
nel=0;
printf("\nListare SRD:\n");
listare_SRD (pl);
printf ("NULL\n");
}
4
/* arbrecc.c - arbore, construit recursiv, ce contine cuvinte, si numarul
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define LUNGMAX 20
struct st_arbore
};
int nle=0;
*/
if (arb->st)
arb=arb->st;
arb->cuvant=cuv;
arb->nrap=1;
arb->st=NULL;
arb->dr=NULL;
if(arb->dr)
else {
arb=arb->dr;
arb->cuvant=cuv;
arb->nrap=1;
arb->st=NULL;
arb->dr=NULL;
else
arb->nrap=arb->nrap + 1;
if (arbo!=NULL)
{
printf ("%s (ap: %d)\n", arbo -> cuvant, arbo -> nrap ) ;
nle++;
if (nle%24==0){
getch();
void main ()
char cuvant[LUNGMAX] ;
clrscr();
" alfabetica:\n");
gets(cuvant) ;
valoarea NULL */
arb->cuvant=strdup(cuvant);
arb->nrap=1;
arb->st=NULL;
arb->dr=NULL;
gets(cuvant) ;
gets(cuvant);
}
tiparire_arbore (arb);
5
/* arbrecc.cpp - arbore, construit recursiv, ce contine cuvinte, si numarul
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define LUNGMAX 20
struct st_arbore
};
int nle=0;
*/
if (arb==NULL)
{ /* arb este NULL fie s-a gasit pozitia unde trebuie adaugat
noul nod */
valoarea NULL */
arb->cuvant=cuv;
arb->nrap=1;
arb->st=NULL;
arb->dr=NULL;
else
subarborele stang */
subarborele dreapta */
arb->nrap=arb->nrap + 1;
if (arbo!=NULL)
printf ("%s (ap: %d)\n", arbo -> cuvant, arbo -> nrap ) ;
nle++;
if (nle%24==0){
getch();
}
void main ()
char cuvant[LUNGMAX] ;
clrscr();
" alfabetica:\n");
gets(cuvant) ;
gets(cuvant);
tiparire_arbore (arb);
6
/* coadacuv.c - programul construieste o coada de cuvinte,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define DIMCV 25
struct st_cuvant
};
vr->cuvant=strdup(sirc);
vr->urmator=NULL;
ultim->urmator=vr;
return (vr);
while (primu)
{ptr=primu; /* memorat pentru a elibera spatiul referit de el */
ncl++;
if (ncl%5==0)
printf("\n");
primu=primu->urmator;
printf ("NULL\n");/* sfarsit lista sau lista vida daca primu == NULL */
void main()
char cuv[DIMCV];
clrscr();
" tastatura\n");
gets(cuv);
primul->cuvant=strdup(cuv);
primul->urmator=NULL;
ultimul=primul;
gets(cuv);
break;
gets(cuv);
extragere (primul);
7
/* coadatab.c - operatii cu o coada realizata static intr-un tablou;
#include <stdio.h>
#include <conio.h>
#define MaxC 10
typedef struct {
} TCoada, *ACoada;
printf("%s\n", meserr);
pc->prim=0;
pc->ultim=MaxC-1;
coada goala: x x x x u p x x x x ,
else {pc->ultim=IncIndexC(pc->ultim);
pc->elem[pc->ultim]=el;
ElTip e;
if (CoadaGoala (pc))
return 0;
else
{e=pc->elem[pc->prim];
pc->prim=IncIndexC(pc->prim);
return e;
}
ElTip CapCoada (ACoada pc){
if (CoadaGoala (pc))
return 0;
else
return pc->elem[pc->prim];
TCoada c=*pc;
ACoada pt=&c;
if (CoadaGoala(pt))
else
ScotElC (pt);
if (++nvl % 10 == 0)
printf("\n");
printf("NULL\n");
TCoada c, *pc;
char optiune[20];
ElTip n;
clrscr();
InitCoada (pc);
printf("\nOptiuni Int, Ext, Afis coada, Cap coada, Poz p/u, Stop: ");
gets(optiune);
switch(optiune[0]){
case 'i':
break;}
if (CoadaPlina (pc)){
break;
fflush(stdin);
break;
case 'e':
CapCoada (pc));
ScotElC (pc);
if (!CoadaGoala (pc)){
gets(optiune);
fflush(stdin);
if (CoadaGoala (pc))
break;
case 'c':
CapCoada (pc));
else
break;
case 'a':
break;
case 'p':
printf("\nOptiuni Int, Ext, Afis coada, Cap coada, Poz p/u, Stop: ");
gets(optiune);
8
/* coadatbv.c - operatii cu o coada realizata static intr-un tablou;
#include <conio.h>
#define MaxC 10
typedef struct {
} TCoada, *ACoada;
printf("%s\n", meserr);
pc->prim=0;
pc->ultim=MaxC-1;
coada goala: x x x x u p x x x x ,
else {pc->ultim=IncIndexC(pc->ultim);
pc->elem[pc->ultim]=el;
ElTip e;
if (CoadaGoala (pc))
return 0;
else
{e=pc->elem[pc->prim];
pc->prim=IncIndexC(pc->prim);
return e;
}
}
if (CoadaGoala (pc))
return 0;
else
return pc->elem[pc->prim];
pp=pc->prim;
pu=pc->ultim;
if (CoadaGoala(pc))
else
pp++;
if (++nvl % 10 == 0)
printf("\n");
printf("NULL\n");
}
void Afisare_Poz_Prim_Ultim (ACoada pc){
pc->prim, pc->ultim);
TCoada c, *pc;
char optiune[20];
ElTip n;
clrscr();
InitCoada (pc);
printf("\nOptiuni Int, Ext, Afis coada, Cap coada, Poz p/u, Stop: ");
gets(optiune);
switch(optiune[0]){
case 'i':
break;}
if (CoadaPlina (pc)){
break;
fflush(stdin);
break;
case 'e':
CapCoada (pc));
ScotElC (pc);
if (!CoadaGoala (pc)){
gets(optiune);
fflush(stdin);
if (CoadaGoala (pc))
break;
case 'c':
CapCoada (pc));
else
break;
case 'a':
break;
case 'p':
break;
printf("\nOptiuni Int, Ext, Afis coada, Cap coada, Poz p/u, Stop: ");
gets(optiune);
9
/* coadvcuv.c - programul construieste o coada de cuvinte,
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct st_cuvant
};
vr->cuvant=strdup(sirc);
vr->urmator=NULL;
ultim->urmator=vr;
return (vr);
while (primu)
ncl++;
if (ncl%5==0)
printf("\n");
primu=primu->urmator;
printf ("NULL\n");/* sfarsit lista sau lista vida daca primu == NULL */
void main()
char cuv[DIMCV];
clrscr();
" tastatura\n");
gets(cuv);
primul=ultimul=NULL;
break;
if (!primul)
primul=ultimul;
gets(cuv);
extragere (primul);
}
10
/* constiva.cpp - prog. construieste o stiva de numere intregi, distincte,
/*
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
struct s_stiva
int valoare;
};
/*Functia returneaza un pointer la ultimul element din stiva daca s-a putut
adauga un nou element, sau NULL daca nu s-a adaugat ("Memorie plina!") */
if (ultimul==NULL)
if (ultimul==NULL)
{printf("Memorie plina!\n");
return(NULL);
else
ultimul->valoare=val;
ultimul->nr_aparitii=1;
ultimul->urmator=NULL;
return(ultimul);
else
{
ptr_stiva=ptr_stiva->urmator;
if(ptr_stiva->valoare==val)
{ptr_stiva->nr_aparitii++;
return(ultimul);
else
if (ptr_stiva==NULL)
{printf("Mmeorie plina!\n");
return(NULL);
else
{ptr_stiva->valoare=val;
ptr_stiva->nr_aparitii=1;
ptr_stiva->urmator=ultimul;
return(ptr_stiva);
int nr_val_linie = 0;
while (ultim!=NULL)
{
printf("%2d(%d)-> ", ultim->valoare, ultim->nr_aparitii);
ultim=ultim->urmator;
if (nr_val_linie%8==0)
printf("\n");
printf ("\n");
while(p){ptrs=p;
p=p->urmator;
free(ptrs);
void main()
int numar;
clrscr();
while(scanf("%d", &numar)!=EOF)
{if((ultim=adauga_stiva(ultim, numar))==NULL)
break;
afisare_stiva(ultim);
eliberare_spatiu(ultim);
11
/* constivr.cpp - programul construieste o coada de numere intregi, pe care
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
struct s_coada
int valoare;
};
int nr_val_linie=0; /* contor pentru nr. de valori afisate pe linie */
/*Functia returneaza un pointer la primul element din coada daca s-a putut
adauga un nou element, sau NULL daca nu s-a adaugat ("Memorie plina!") */
if (primul->urmator==NULL){
if(!primul->urmator)
{printf("Memorie plina!!!\n");
exit(1);
primul=primul->urmator;
primul->valoare=val;
primul->urmator=NULL;
else
adaug_coada(primul->urmator, val);
if (primul)
nr_val_linie++;
if (nr_val_linie%8==0)
printf("\n");
afisez_coada(primul->urmator);
}
if(p){ ptrs=p;
p=p->urmator;
free(ptrs);
eliberare_spatiu(p);
void main()
int numar;
clrscr();
scanf("%d", &numar);
if(!prim)
{printf("Memorie plina!!!\n");
exit(1);
prim->valoare=numar;
prim->urmator=NULL;
{adaug_coada(prim, numar);
afisez_coada(prim);
printf("NULL\n");
eliberare_spatiu(prim);
12
/* echi_arb.cpp - programul construieste un arbore - utilizand o functie:
respectiv
Programul determina si daca acest arbore este echilibrat sau nu: diferenta
de inaltimi intre ramura cea mai lunga si cea mai scurta este <=1.
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct s_arbore
{
int valoare;// valoarea asociata nodului
};
int maxy = 1;
parb = NULL;
while (numar)
if (parb == NULL)
else
{gasit_poz_ins = 0;
pelem = parb;
while (pelem != NULL && !gasit_poz_ins)
if (numar == pelem->valoare)
{pelem->nr_ap++; break;}
if (pelem->stg)
pelem = pelem->stg;
else
{gasit_poz_ins = 1;
pelem->stg=(struct s_arbore *)
pelem = pelem->stg;
else
if (pelem->dr)
pelem = pelem->dr;
else
{gasit_poz_ins = 1;
pelem->dr=(struct s_arbore *)
pelem = pelem->dr;
exit(0);
if (gasit_poz_ins)
{pelem->valoare = numar;
pelem->nr_ap = 1;
pelem-> dr = NULL;
}
}
return ( parb );
void display_arbore (struct s_arbore *start, int pas, int p_x, int p_y)
if ( start != NULL )
printf("/ \\");
maxy = wherey();
int *p_nivel)
(*p_nivel)++;
p_arb = p_arb->stg;
else
p_arb = p_arb->dr;
return (0);
};
if (a > b)
return (a);
return (b);
int l;
if (parb == NULL)
l = 0;
else
l = maxim(inalt(parb->stg), inalt(parb->dr)) + 1;
return l;
if (a < b)
return (a);
return (b);
}
int inalt_min (s_arbore *parb){
int i;
if (parb == NULL)
i=0;
else
i= minim(inalt_min(parb->stg), inalt_min(parb->dr)) + 1;
return i;
void display_arbore (struct s_arbore *start, int p_niv, int p_x, int p_y);
int *p_pozitie);
char *pcuv;
clrscr();
start_arb = constr_arbore();
getch();
clrscr();
if ( start_arb == NULL )
else
{
gotoxy(1,maxy+1);
pcuv = "";
if (inalt(start_arb)-inalt_min(start_arb) > 1)
pcuv = "nu";
*nivel = 0;
if (ptr_valoare != NULL)
else
getch();
}
13
/* frunzarb.cpp - Programul construieste un arbore, apeland o functie
*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct s_arbore
};
int maxy = 1;
int nr_frunze=0;
parb = NULL;
while (numar)
if (parb == NULL)
else
{gasit_poz_ins = 0;
pelem = parb;
while (pelem != NULL && !gasit_poz_ins)
if (numar == pelem->valoare)
{pelem->nr_ap++; break;}
if (pelem->stg)
pelem = pelem->stg;
else
{gasit_poz_ins = 1;
pelem->stg=(struct s_arbore *)
pelem = pelem->stg;
else
if (pelem->dr)
pelem = pelem->dr;
else
{gasit_poz_ins = 1;
pelem->dr=(struct s_arbore *)
pelem = pelem->dr;
exit(0);
if (gasit_poz_ins)
{pelem->valoare = numar;
pelem->nr_ap = 1;
pelem-> dr = NULL;
}
}
return ( parb );
void display_arbore (struct s_arbore *start, int pas, int p_x, int p_y)
{int p;
if ( start != NULL )
{p=p_x-pas/2;
if (p<1)
p=1;
p=wherex()-7;
if (p<1)
p=1;
printf("/ \\");
maxy = wherey();
p=p_x+pas/2;
if (p>73)
p=73;
}
int nr_nod_arb (struct s_arbore *a) {
int nr_nod;
if (a==NULL)
nr_nod = 0;
else
return (nr_nod);
if (a) {
{nr_frunze++;
nr_frunze_arb(a->stg);
nr_frunze_arb(a->dr);
if (a)
{niv++;
max_niv=niv;
nr_nod[niv]++;
if (a->stg){
max_nod(a->stg);
niv--;}
if (a->dr){
max_nod(a->dr);
niv--;}
for (i=0;i<10;i++)
nr_nod[i]=0;
clrscr();
arb = constr_arbore();
getch();
clrscr();
gotoxy(1, maxy+1);
getch();
nr_frunze_arb(arb);
max_nod(arb);
{i_max = i;
max_noduri=nr_nod[i];
i_max,nr_nod[i_max]);
getch();
14
/* listcirc.c - programul construieste o lista circulara de caractere,
#include <stdio.h>
struct st_litera
char car;
};
char c;
if (c!='\n')
if (vr == NULL)
NULL */
printf("Memorie plina !!!!!!\n"); /* se tipareste un
mesaj de eroare */
vr->car=c;
{vr->pred=vr->urm=pl;
pl->urm=pl->pred=vr;
else {vr->urm=pl;
vr->pred=pl->pred;
pl->pred->urm=vr;
pl->pred=vr;
p=plc->urm;
while (p != plc)
p=p->urm;
ncl++;
printf("\n");
if (plc->urm!=plc)
printf("%c (primul).\n", plc->urm->car);/* tiparire primul caracter sau
else
printf("NULL");
int numar = 0;
curent=start->urm;
numar++;
curent=curent->urm;
return (numar);
void main()
char ch;
afis_list_circ(primul);
ch=getch();
15
/*
*/
#include <stdio.h>
#include <stdlib.h>
struct tnod
int valoare;
};
tnod *sf;
if (!v)
else
}
void listare (tnod *v){
if (v)
{printf("%d->", v->valoare);
listare (v->urmator);
main()
int valoare;
pl = NULL;
printf ("Valoare:");
while ( valoare ) {
adaugare (pl,valoare);
printf ("Valoare:");
/* afisare lista */
listare (pl);
printf ("NULL\n");
}
16
/* listord.c - construiete o lista ordonata de numere intregi, distincte */
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct st_numar {
int numar;
};
void main()
int nr;
clrscr();
while (prim)
nvl++;
prim=prim->next;
if (vr == NULL){
else
vr->numar=n;
anterior=curent;
curent=curent->next;
vr->next=curent;
else
return (primul);
}
17
/* listrec1.cpp - programul construieste o lista de cuvinte, introduse
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define DIMC 25
int nvl=0;
struct st_cuvant
};
la lista */
if (vr->urmator==NULL)
return (0);
else
gets(cuv);
if (!strcmp(cuv,SIR_VID))
{vr->urmator=NULL;
return(0);
else
{if(!(pc=strdup(cuv)))
{vr->urmator=NULL;
return(0);
else
vr=vr->urmator;
vr->urmator = NULL;
vr->cuvant=pc;
return (1);
return(atasare (vr->urmator));
}
if (curent)
nvl++;
if(nvl%5==0)
printf("\n");
void main()
char c[DIMC];
clrscr();
" tastatura\n");
gets(c);
primul->cuvant=strdup(c);
primul->urmator=NULL;
while (atasare(primul));
afisare (primul);
printf("NULL\n");
}
18
/* listrec1.cpp - programul construieste o lista de cuvinte, introduse
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define DIMC 25
int nvl=0;
struct st_cuvant
};
la lista */
char cuv[DIMC];
{
vr=(struct st_cuvant *)malloc (sizeof(struct st_cuvant));
if (vr==NULL)
return (0);
else
vr->urmator = NULL;
gets(cuv);
if (!strcmp(cuv,SIR_VID))
{vr=NULL;
return(0);
else
{if(!(vr->cuvant=strdup(cuv)))
{vr=NULL;
return(0);
};
return (1);
atasare (vr->urmator);
if (curent)
if(nvl%5==0)
printf("\n");
void main()
primul = NULL;
clrscr();
" tastatura\n");
while (atasare(primul));
afisare (primul);
printf("NULL\n");
}
19
/* listrecc.cpp - programul construieste o lista de cuvinte,
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define DIMC 20
int nvl=0;
struct st_cuvant
};
ataseaza la lista */
char cuvcit[DIMC];
if (vr->urmator==NULL)
return (0);
else
{gets(cuvcit);
if (!strcmp(cuvcit,SIR_VID))
{vr->urmator=NULL;
return(0);
else {
vr=vr->urmator;
vr->urmator=NULL;
strcpy(vr->cuvant, cuvcit);
return (1);
return(atasare (vr->urmator));
if (curent)
nvl++;
if(nvl%5==0)
printf("\n");
}
void main()
clrscr();
"de la tastatura\n");
gets(primul->cuvant);
primul->urmator=NULL;
while (atasare(primul));
afisare (primul);
printf("NULL\n");
20
/* listrecc.cpp - programul construieste o lista de cuvinte,
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define DIMC 20
int nvl=0;
struct st_cuvant
};
ataseaza la lista */
if (vr==NULL)
return (0);
else
vr->urmator = NULL;
gets(vr->cuvant);
if ( !strcmp(vr->cuvant,SIR_VID) )
{vr=NULL;
return(0);
else
return (1);
return(atasare (vr->urmator));
if (curent)
nvl++;
if(nvl%5==0)
printf("\n");
void main()
primul = NULL;
clrscr();
"de la tastatura\n");
while (atasare(primul));
afisare (primul);
printf("NULL\n");
21
/* stivacar.c - programul construieste o stiva de caractere, pe care apoi o tipareste */
#include <stdio.h>
struct st_lista
char car;
};
void main()
char c;
primul = NULL;
fflush(stdin);
if (c!='\n')
if (vr == NULL)
NULL */
vr->car=c;
vr->urmator=primul;
primul=vr;
primul caracter */
while (vr != NULL)
vr=vr->urmator;
printf(" NULL");/* tiparire sfarsit lista caractere sau lista vida daca
22
/* stivatab.c - operatii cu o stiva realizata static intr-un tablou;
#include <stdio.h>
#include <conio.h>
#define MaxS 10
typedef struct {
int sp;
} TStiva, *AStiva;
printf("%s\n", meserr);
rs->sp=-1;
}
void Push (AStiva rs, ElTip el){
if (StivaPlina (rs))
else {rs->sp=rs->sp+1;
rs->elem[rs->sp]=el;
ElTip e;
if (StivaGoala (rs))
return 0;
else
{e=rs->elem[rs->sp];
rs->sp=rs->sp-1;
return e;
if (StivaGoala (rs))
return 0;
else
return rs->elem[rs->sp];
TStiva s=*rs;
AStiva pt=&s;
if (pt->sp == -1)
else
Pop (pt);
if (++nvl % 10 == 0)
printf("\n");
printf("NULL\n");
if (!rs->sp)
printf("\tSTIVA GOALA!!!\n");
}
void main (void){
TStiva s, *rs;
char optiune[20];
ElTip n;
clrscr();
InitStiva (rs);
printf("\nOptiuni Introduc, Extrag, Afis stiva, Cap stiva, Poz sp, Stop: ");
gets(optiune);
switch(optiune[0]){
case 'i':
break;}
if (StivaPlina (rs)){
break;
fflush(stdin);
break;
case 'e':
CapStiva (rs));
Pop (rs);
if (!StivaGoala (rs)){
gets(optiune);
fflush(stdin);
if (StivaGoala (rs))
break;
case 'c':
CapStiva (rs));
else
break;
case 'a':
break;
case 'p':
break;
printf("\nOptiuni Int, Ext, Afis stiva, Cap stiva, Poz sp, Stop: ");
gets(optiune);
23
/* stivatbv.c - operatii cu o stiva realizata static intr-un tablou;
#include <stdio.h>
#include <conio.h>
#define MaxS 10
typedef struct {
int sp;
} TStiva, *AStiva;
printf("%s\n", meserr);
rs->sp=-1;
}
void Push (AStiva rs, ElTip el){
if (StivaPlina (rs))
else {rs->sp=rs->sp+1;
rs->elem[rs->sp]=el;
ElTip e;
if (StivaGoala (rs))
return 0;
else
{e=rs->elem[rs->sp];
rs->sp=rs->sp-1;
return e;
if (StivaGoala (rs))
return 0;
else
return rs->elem[rs->sp];
int psl=rs->sp;
if (rs->sp == -1)
else
psl--;
if (++nvl % 10 == 0)
printf("\n");
printf("NULL\n");
if (!rs->sp)
printf("\tSTIVA GOALA!!!\n");
TStiva s, *rs;
char optiune[20];
ElTip n;
clrscr();
InitStiva (rs);
printf("\nOptiuni Introduc, Extrag, Afis stiva, Cap stiva, Poz sp Stop: ");
gets(optiune);
switch(optiune[0]){
case 'i':
break;}
if (StivaPlina (rs)){
break;
fflush(stdin);
break;
case 'e':
CapStiva (rs));
Pop (rs);
if (!StivaGoala (rs)){
gets(optiune);
fflush(stdin);
if (StivaGoala (rs))
break;
case 'c':
CapStiva (rs));
else
break;
case 'a':
break;
case 'p':
break;
printf("\nOptiuni Int, Ext, Afis stiva, Cap stiva, Poz sp, Stop: ");
gets(optiune);
}
}
24
/* stivcdif.c - programul construieste o stiva de caractere distincte, pe care apoi o tipareste */
#include <stdio.h>
struct st_lista
char car;
};
void main()
char c;
primul = NULL;
fflush(stdin);
if (vr == NULL)
caractere */
vr->car=c;
vr->urmator=primul;
primul=vr;
primul caracter */
{
printf("%c -> ", vr->car);
vr=vr->urmator;
printf(" NULL");/* tiparire sfarsit lista caractere sau lista vida daca
int gasit;
while (ptr != NULL && !gasit) /* cat timp nu s-a terminat lista si nu
l-am gasit */
gasit=(ptr->car == ch);
ptr=ptr->urmator;
return (!gasit);
Sortare
1
/* HeapSMax.c - Ord. descresc., prin selectie Heapsort:
*/
#include<stdio.h>
#include <conio.h>
int i,j;
double x;
while (j<=r){
int i, l, r;
double x;
l=(n/2)+1; r=n;
while (l>1){
l--;
cerne(a,l,r);
for( i = 1 ; i <= n ; ++i ){
if (i%10==0)
printf("\n");
getch();
while(r>1)
{x=a[1];
a[1]=a[r];
a[r]=x;
r--;
cerne(a,l,r);
if (i%10==0)
printf("\n");
getch();
void main(void)
double sir[1000];
int ne, i;
clrscr();
printf("HeapSort pentru ordonare crescatoare vector.\n");
scanf ("%d",&ne);
heapsort(sir,ne);
if (i%10==0)
printf("\n");
getch();
2
/* HeapSmin.c - Ord. descresc., prin selectie Heapsort:
*/
#include<stdio.h>
#include <conio.h>
int i,j;
double x;
while (j<=r){
int i, l, r;
double x;
l=(n/2)+1; r=n;
while (l>1){
l--;
cerne(a,l,r);
if (i%10==0)
printf("\n");
getch();
while(r>1)
{x=a[1];
a[1]=a[r];
a[r]=x;
r--;
cerne(a,l,r);
if (i%10==0)
printf("\n");
getch();
void main(void)
double sir[1000];
int ne, i;
clrscr();
scanf ("%d",&ne);
heapsort(sir,ne);
if (i%10==0)
printf("\n");
getch();
3
/*
adica: se considera un sir ordonat, format initial din primul element din
*/
#include<stdio.h>
#include <conio.h>
double x;
int i, j, s, d, m;
{ncomp++;
void main(void){
clrscr();
printf("Numar elemente:");
scanf("%d", &ne);
scanf("%lf", &sir[i]);
printf("\n");
printf("\n");
ncomp, nins);}
4
/* ins_dir.c- prog. ordonare cresc. sir, utilizand metoda de inserare directa, adica:
se considera un sir ordonat, format initial din primul element din sirul initial,
si un sir neordonat, format din restul elementelor sirului, din care se iau pe
#include <stdio.h>
#include <conio.h>
double x;
int i, j;
a[j+1]=a[j];
j--;
ncomp++; nins++;
void main()
double sir[100];
int ne, i;
clrscr();
printf("Numar elemente:");
scanf("%d", &ne);
scanf("%lf", &sir[i]);
}
sort_ins_direct (sir, ne); /* ordonarea sirului prin inserare directa */
printf("\n");
ncomp, nins);
5
/* MergeSor.c - Ordonare utilizand metoda MergeSort (interclasare) */
#include <stdio.h>
#include <conio.h>
#define DIM 20
int m, aux;
if (v[p]>v[q]){
aux=v[p];
v[p]=v[q];
v[q]=aux;
else{
m=(p+q)/2;
MergeSort(v, p, m);
Interclasare(v, p, q, m);
u[k]=v[i];
i++; k++;
else{
u[k]=v[j];
j++; k++;
if (i <= m)
u[k]=v[j];
k++;
}
else
u[k]=v[i];
k++;
k=0;
v[i]=u[k];
k++;
int i;
printf("%5d,", vect[i]);
void main()
int ne=11;
clrscr();
MergeSort(vector, 0, ne-1);
scrie_vector(vector, ne);
getch();
}
6
/* QuickSit.c - sortarea unui vector utilizand algoritmul QuickSort, iterativ */
#include<stdio.h>
#include<conio.h>
{int i;
{printf("v[%d]=", i+1);
scanf("%d", &v[i]);}
}
void scrie_vect(int n, VECTOR v)
{int i;
{int s, d, i, j, is, x, t;
do{
x=a[(s+d)/2]; /* santinela */
do {
if (i<=j)
{t=a[i];
a[i]=a[j];
a[j]=t;
i++; j--;
ninv++;
} while(i<=j);
stiva[is].d=d;
void main(void)
{int n;
VECTOR v;
clrscr();
cit_vect(n, v);
scrie_vect(n, v);
ncomp, ninv);
getch();
}
7
/* QuickSor.c - sortarea unui vector utilizand algoritmul QuickSort */
#include<stdio.h>
#include<conio.h>
{int i;
{printf("v[%d]=", i+1);
scanf("%d", &v[i]);}
{int i;
for(i=0; i<n; i++)
{int i, j, m, x, temp;
i=s;
j=d;
m=(s+d)/2;
x=a[m];
do
if (i<=j)
{temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;
ninv++;
}while(i<=j);
void main(void)
{int n;
VECTOR v;
clrscr();
cit_vect(n, v);
QuickSort(v, 0, n-1);
scrie_vect(n, v);
ncomp, ninv);
getch();
8
/* QuickSor.cpp - sortarea unui vector utilizand algoritmul QuickSort */
#include<stdio.h>
#include<conio.h>
{int i;
for(i=0;i<n;i++)
{printf("v[%d]=",i);
scanf("%d",&v[i]);}
{int i;
for(i=0;i<n;i++)
printf("v[%d]=%d\n",i,v[i]);
{int i, j, m, x, temp;
i=s;
j=d;
m=(s+d)/2;
x=a[m];
do
if (i<=j)
{temp=a[i];
a[i]=a[j];
a[j]=temp;
i++;
j--;
}while(i<=j);
if(s<j) quicksort(a,s,j);
if(i<d) quicksort(a,i,d);
main()
{int n;
vector v;
clrscr();
cit_vect(n,v);
quicksort(v,0,n-1);
scrie_vect(n,v);
getch();
9
/* sel_dir.c - programul ordoneaza un vector prin selectie directa,
*/
#include<stdio.h>
#include <conio.h>
double x;
int i, j, k;
x = a[i];
for ( j = i+1 ; j < n ; ++j, ncomp++ ) /* determinare minim si indicele lui din sir */
if (a[j] < x)
k = j;
x = a[k];
ninv++;
void main()
double sir[100];
clrscr();
printf("Numar elemente:");
scanf("%d",&ne);
printf("sir(%d)=",i+1);
scanf("%lf",& sir[i]);
printf(" sir(%2d)=%5.1lf",i+1,sir[i]);
printf("\n");
ncomp, ninv);
10
/* sel_dirv.c - Program de ordonare crescatoare sir, utilizand
*/
#include<stdio.h>
#include <conio.h>
int i, j;
double aux;
{
aux = sir[i];
sir[i] = sir[j];
sir[j] = aux;
ninv++;
void main(void)
double sir[1000];
int ne, i;
clrscr();
scanf ("%d",&ne);
sort_sel_dir(sir,ne);
if ((i+1)%4==0)
printf("\n");
printf("\n");
ncomp, ninv);
}
11
/* shaker.cpp - ordonare (sortare) vector utilizand metoda "ShakerSort"
*/
#include<stdio.h>
#include<conio.h>
{int i;
{printf("v[%d]=", i+1);
scanf("%d", &v[i]);}
{int i;
{int t, i, k, s, d;
d=n-2; s=0; k=d; /* initializari pentru limita din stanga (s), dreapta (d) */
{t=v[i];
v[i]=v[i+1];
v[i+1]=t;
ninv++;}
{t=v[i];
v[i]=v[i+1];
v[i+1]=t;
ninv++;}
void main(void)
{int n;
VECTOR v;
clrscr();
cit_vect(n,v);
shaker(n,v);
scrie_vect(n,v);
printf("Ordonarea s-a realizat prin %d comparatii si %d deplasari\n",
ncomp, ninv);
getch();}
12
/* sortbule.c - programul ordoneaza un sir de valori prin
*/
#include <stdio.h>
#include <conio.h>
{double x;
int i, j;
x=a[j-1];
a[j-1]=a[j];
a[j]=x;
ninv++;
void main(){
double sir[100];
printf("Numar elemente:");
scanf("%d", &ne);
{printf("sir(%d)=",i+1);
scanf("%lf", &sir[i]);
printf("\n");
ncomp, ninv);
}
13
/* sortindx.c - se sorteaza indecsii unui tablou de tip structura,
*/
#include <stdio.h>
#include <conio.h>
struct tip_struct
float medie;
};
void main(void)
int i, ns;
float f;
clrscr();
printf("Numarul de studenti:");
scanf("%d", &ns);
f=0.0; fflush(stdin);
for (i=0; i<ns; i++) /* citire date studenti: nume, prenume si media */
gets(stud[i].nume_prenum);
scanf("%f", &f);
stud[i].medie=f;
ind[i] = i;
stud[ind[i]].medie);
int i, s, d, k, t;
do {
t=index[i];
index[i]=index[i+1];
index[i+1]=t;
k=i;
d=k-1;
t=index[i];
index[i]=index[i+1];
index[i+1]=t;
k=i;
s=k+1;
}
14
/* SortShel .c - programul ordoneaza un vector cu metoda Shell */
#include <stdio.h>
#include <conio.h>
double a;
pas = dim;
pas=pas/2 ;
do
inv=0 ; /* fals */
{ncomp++;
a=v[i+pas];
v[i+pas]=v[i];
v[i]=a;
inv=1;
ninv++;
}
}
} while (inv);
VECTOR sir, a;
int n, i, j , inv ;
clrscr();
Sort_Shell(sir, n);
if ((i+1)%4==0)
printf("\n");
ncomp, ninv);
getch();