Sie sind auf Seite 1von 13

 Coada - Implementare Dinamică

#include <iostream> if (p == NULL) cout<<endl<<x<<" nu exista in


using namespace std; coada"<<endl;
struct nod else cout<<endl<<x<<" exista in coada"<<endl;
{ }
int info; int main()
nod *next; {
}; nod* Start = NULL, *End;
int nrElem; push(Start,End,10);
void push(nod*& Start, nod*& End, int val) push(Start,End,20);
{ push(Start,End,15);
nod* aux = new nod; push(Start,End,7);
aux->info = val; push(Start,End,45);
aux->next = NULL; afisare(Start);
if (Start == NULL) cautare(Start,20);
{ cautare(Start,24);
Start = aux; for(int i=0;i<=5;i++)
End = Start; {
} pop(Start);
else afisare(Start);
{ }
End->next = aux; return 0;
End = aux; }
}
nrElem++;
}
void pop(nod*& Start)
{
if(Start!=NULL)
{
cout<<"Valoare stearsa "<<Start->info<<"\n";
nod* aux = Start;
Start = Start ->next;
delete aux;
nrElem--;
}
else cout<<"Coada vida\n";
}
void afisare(nod* Start)
{
nod *p;
p = Start;
while (p != NULL)
{
cout<< p->info <<" ";
p = p -> next;
}
cout<<"\n";
}
void cautare(nod* Start, int x)
{
nod* p = Start;
while (p != NULL && x != p->info)
p = p -> next;
 Coada – Implementare Statică
#include <iostream> X = Queue[Front];
using namespace std; Front++;
#define MAX 100 }
int Queue[MAX]; }
int Front, Rear; }
void Push (int Val) void afis_fara_stergere()
{ {
if (Rear == MAX) cout<<"Overflow"; for(int t = Front; t<= Rear; t++)
// Overflow cout<<Queue[t]<<" ";
else cout<<"\n";
{ }
if (Rear == 0) //coada initial vida int main()
Front++; {
Rear++; int val;
Queue[Rear] = Val; Push(2); cout<<"Coada: "; afis_fara_stergere();
} Push(1); cout<<"Coada: "; afis_fara_stergere();
} Push(10); cout<<"Coada: "; afis_fara_stergere();
void Pop (int &X) Push(15); cout<<"Coada: "; afis_fara_stergere();
{ Pop(val); cout<<"Element sters: "<<val<<" -->
if (Front == MAX) cout<<"Underflow"; Coada: "; afis_fara_stergere();
// Underflow Push(4); cout<<"Coada: "; afis_fara_stergere();
else Pop(val); cout<<"Element sters: "<<val<<" -->
{ Coada: "; afis_fara_stergere();
if (Front == 0 || Front > Rear) cout<<"Coada Push(20); cout<<"Coada: "; afis_fara_stergere();
vida"; Pop(val); cout<<"Element sters: "<<val<<" -->
// Coada vida Coada: "; afis_fara_stergere();
else return 0;
{ }

 Conectarea Pinilor {
if(Stack!=NULL)
#include <iostream>
{
#include <cstring>
nod* aux = Stack;
using namespace std;
Stack = Stack ->next;
struct nod
delete aux;
{
}
int info;
else cout<<"Stiva vida\n";
nod *next;
}
};
bool empty(nod*Stack)
void push(int val, nod*& Stack)
{
{
if (Stack == NULL) return 1;
nod* aux = new nod;
return 0;
aux->info = val;
}
aux->next = NULL;
int peek(nod* Stack)
if (Stack == NULL)
{
Stack = aux;
if(Stack != NULL) return Stack->info;
else
}
{
aux->next = Stack;
int main()
Stack = aux;
{
}
nod* Stack = NULL;
}
int pereche[100],n,i;
void pop(nod*& Stack)
cin>>n;
for(int i=0; i<n; i++) push(pereche[i],Stack);
cin>>pereche[i]; }
for(int i=0; i<n; i++) if (empty(Stack))
{ cout<<"Configuratie valida";
if(empty(Stack)) // Stiva e vida else cout<<"Configuratie invalida";
push(pereche[i],Stack); return 0;
else if(pereche[i] == peek(Stack)) }
pop(Stack);
else

 Evaluare Expresie In Formă Postfixată


#include <iostream> int evaluare(char *postfix) // postfix - sirul de
#include <cstring> caractere introdus
using namespace std; {
#define MAX 100 int rez;
int Top = -1; for(int k = 0; k<strlen(postfix); k++)
int Stack[MAX]; {
void push (int Val) if (postfix[k]==' ') continue;
{
if (Top < MAX-1) if (eOperator(postfix[k])==1) // daca acesta
{ este operator
Top++; {
Stack[Top] = Val; int op1, op2;
} pop(op1); // se scot ultimele 2 valori
} din stiva si se aplica operandul
void pop (int &X) pop(op2);
{
if (Top > -1) if(postfix[k]=='+') rez = op2+op1;
{ else if (postfix[k]=='-') rez = op2-op1;
X = Stack[Top]; else if(postfix[k]=='/') rez = op2/op1;
Top--; else if (postfix[k]=='*') rez = op2*op1;
} else if (postfix[k]=='%') rez = op2%op1;
} push(rez); // se reintroduce in stiva
void afis_fara_stergere() rezultatul operatiei
{ }
int t = Top; else
while(t>-1) {
{ int numar=0; // daca acesta este cifra, se
cout<<Stack[t]<<" "; updateaza numarul care se introduce in stiva
t--; while(k<strlen(postfix) &&
} eCifra(postfix[k])==1)
cout<<"\n"; {
} numar = numar * 10 + (postfix[k]-'0');
int eCifra(char x) k++;
{ }
if (x>='0' && x<='9') return 1; push(numar); // numar intreg = cod ASCII
return 0; caracter - 48 (codul caracterului '0')
} }
int eOperator(char x) afis_fara_stergere();
{ }
if (x=='+' || x=='-' || x=='*' || x=='/' || x=='%') pop(rez);
return 1; return rez;
return 0; }
}
int main()
{
char expresie[MAX+1];
cin.get(expresie,MAX);
// char expresie[]="10 20 30 * + 40 20 30 * - -";
cout<<evaluare(expresie);
return 0;
}
 Hamming
#include <iostream> m5=c3[f5++];
using namespace std; while (m<M)
int {
M,m,m2,m3,m5,f2,f3,f5,r2,r3,r5,p,h[300],c2[100], m=m2;
c3[100],c5[100]; if(m>m3) m=m3;
int main() if(m>m5) m=m5;
{ if (m <= M) h[++p] = m;
cin>>M; c2[++r2]=m*2;
m=1; c3[++r3]=m*3;
p=1; c5[++r5]=m*5;
h[p]=m ; if (m == m2) m2 = c2[f2++];
r2=r3=r5=0; if (m == m3) m3 = c3[f3++];
c2[++r2]=m*2; if (m == m5) m5 = c5[f5++];
c3[++r3]=m*3; }
c5[++r5]=m*5; for(int i = 1;i<=p;i++) cout<<h[i]<<" ";
f2=f3=f5=1; return 0;
m2=c2[f2++]; }
m3=c3[f3++];

 Liste simplu înlănțuite alocate static


#include <iostream> int Exista_spatiu()
using namespace std; {
struct nod return n<100;
{ }
int inf, urm; void adaugare(int &prim, int val)
}; {
nod a[10]; int nou;
int n, prim, ultim; // n = numarul de elemente if (!prim)
care se afla la un moment dat in lista {
int oc[10]; // 0 – liber, 1-ocupat alocare(prim);
void alocare(int &x) a[prim].inf = val;
{ a[prim].urm = 0;
int i = 1; ultim = prim;
while (oc[i] != 0) }
i++; else if (Exista_spatiu())
x = i; {
oc[i] = 1; alocare(nou);
n++; a[ultim].urm = nou;
} a[nou].inf = val;
void eliberare(int x) a[nou].urm = 0;
{ ultim = nou;
oc[x] = 0; }
n--; else cout<<"lipsa spatiu";
} }
void inserare_dupa(int prim, int val, int val_ins) }
{ eliberare(aux);
int p, nou; }
if (Exista_spatiu()) void afisare(int prim)
{ {
p = prim; int p=prim;
while(a[p].inf != val) while(p)
p = a[p].urm; {
alocare(nou);
a[nou].inf = val_ins; cout<<"["<<p<<"-"<<a[p].inf<<"-"<<a[p].urm<<"]
a[nou].urm = a[p].urm; ";
a[p].urm = nou; p = a[p].urm;
if (a[nou].urm == 0) ultim = nou; }
} cout<<"\n";
else cout<<"Nu exista spatiu"; }
} int main()
void inserare_inainte(int prim, int val, int val_ins) {
{ adaugare(prim,38);
int p, nou; afisare(prim);
if (Exista_spatiu()) inserare_dupa(prim,38,10);
if (a[prim].inf == val) afisare(prim);
{ inserare_dupa(prim,10,22);
alocare(nou); afisare(prim);
a[nou].inf = val_ins; inserare_dupa(prim,22,65);
a[nou].urm = prim; afisare(prim);
prim = nou; inserare_dupa(prim,65,11);
} afisare(prim);
else inserare_dupa(prim,11,77);
{ afisare(prim);
p = prim; inserare_dupa(prim,77,40);
while(a[a[p].urm].inf != val) afisare(prim);
p = a[p].urm; return 0;
alocare(nou); }
a[nou].inf = val_ins;
a[nou].urm = a[p].urm;
a[p].urm = nou;
}
else cout<<"Nu exista spatiu";
}
void stergere(int &prim, int val)
{
int p, aux;
if (a[prim].inf == val)
{
aux = prim;
prim = a[prim].urm;
}
else
{
p = prim;
while(a[a[p].urm].inf != val)
p = a[p].urm;
aux = a[p].urm;
a[p].urm = a[aux].urm;
if (aux == ultim)
ultim = p;
 Liste simplu înlănțuite
while(p->next!=NULL)
#include <iostream>
{r = p;
using namespace std;
p=p->next;}
struct nod
cout<<"Valoare stearsa "<<p->info<<"\n";
{
nod* aux = p;
int info;
r->next = NULL;
nod *next;
delete aux;
};
}
int nrElem;
else cout<<"Lista vida\n";
void afisare(nod* Start)
}
{
void inserare_sfarsit(nod*& Start, nod*& End, int
nod *p;
val)
p = Start;
{
while (p != NULL)
nod* aux = new nod;
{
aux->info = val;
cout<< p->info <<" ";
aux->next = NULL;
p = p -> next;
if (Start == NULL)
}
{
cout<<"\n";
Start = aux;
}
End = Start;
void inserare_inceput(nod*& Start, nod*& End,
}
int val)
else
{
{
nod* aux = new nod;
End->next = aux;
aux->info = val;
End = aux;
if (Start == NULL)
}
{
}
aux->next = NULL;
void inserare_pe_pozitie(nod*& Start, nod*&
Start = aux;
End, int val, int poz)
End = Start;
{
}
if (poz == 0) inserare_inceput(Start, End, val);
else
else if (poz == nrElem) inserare_sfarsit(Start,
{
End, val);
aux->next = Start;
else
Start = aux;
{
}
nod*p = Start;
}
for(int i=0; i<poz-1; i++)
void stergere_inceput(nod*& Start)
p = p->next;
{
nod* aux = new nod;
if(Start!=NULL)
aux->info = val;
{
aux->next = p->next;
cout<<"Valoare stearsa "<<Start->info<<"\n";
p->next = aux;
nod* aux = Start;
}
Start = Start ->next;
nrElem++;
delete aux;
}
}
void stergere_de_pe_pozitie(nod*& Start, nod*&
else cout<<"Lista vida\n";
End, int poz)
}
{
if (poz==0) stergere_inceput(Start);
void stergere_sfarsit(nod*& Start, nod*& End)
else if (poz==nrElem) stergere_sfarsit(Start,
{
End);
if(End!=NULL)
else
{
{
nod*p = Start,*r=NULL;
nod*p = Start,*r=NULL;
for(int i=0; i<=poz-1; i++)
{r=p; p = p->next;} for (int j = i; j<n; j++) a[j] = a[j+1]; // eliminarea
cout<<"Valoare stearsa "<<p->info<<"\n"; elementului de pe pozitia k
nod*aux = r->next; n--;
r->next = r->next->next; while (n>0)
delete aux; {
} i = i+ m-1;
nrElem--; if (i%n==0) i = n; // situatie speciala in cazul
} numerotarii 1..n
void cautare(nod* Start, int x) else if (i > n) i = i % n;
{ cout<<a[i]<<" ";
nod* p = Start; for (int j = i; j<n; j++) a[j] = a[j+1]; //
while (p != NULL && x != p->info) eliminarea de pe pozitia i + m
p = p -> next; n--;
}
if (p == NULL) cout<<endl<<x<<" nu exista in return 0;
lista"<<endl; }
else cout<<endl<<x<<" exista in lista"<<endl;
}
int main()
{
nod* Start = NULL, *End;
inserare_pe_pozitie(Start,End,10,0);
inserare_pe_pozitie(Start,End,20,nrElem);
inserare_pe_pozitie(Start,End,15,nrElem);
inserare_pe_pozitie(Start,End,7,nrElem);
inserare_pe_pozitie(Start,End,45,nrElem/2);
afisare(Start);
cautare(Start,20);
cautare(Start,24);
stergere_de_pe_pozitie(Start, End,0);
afisare(Start);
stergere_de_pe_pozitie(Start, End,nrElem);
afisare(Start);
stergere_de_pe_pozitie(Start, End,1);
afisare(Start);
return 0;
}
 Liste circulare Josephus
#include <iostream>
using namespace std;
int main()
{
int n,i,k,m,x,a[100];
n = 12;
k = 2;
m = 3;
//cout<<"nr copii = ";
//cin>>n;
//cout<<"initial = ";
//cin>>k;
//cout<<"salt = ";
//cin>>m;
for (i = 1; i<=n; i++) a[i] = i;
i = k;
cout<<a[i]<<" ";
 Operații pe vector
void stergere(int a[], int &n, int poz)
#include <iostream>
{
using namespace std;
cout<<"Valoarea stearsa: "<<a[poz]<<" --> ";
void citire(int a[], int &n)
for (int i = poz; i<n-1; i++)
{
a[i] = a[i+1];
cin>>n;
n--;
for(int i=0; i<n; i++)
}
cin>>a[i];
int main()
}
{
void afisare(int a[], int n)
int a[100],n,val;
{
//Citire si afisare vector
for(int i=0; i<n; i++)
citire(a,n);
cout<<a[i]<<" ";
afisare(a,n);
cout<<"\n";
//Cautarea unei valori in vectori
}
cout<<"Valoarea de cautat = ";
int cautare_liniara(int a[], int n, int val)
cin>>val;
{
cout<<" Cautare liniara: --> ";
int t = 0;
if (cautare_liniara(a,n,val)==1) cout<<"Valoarea
for (int i = 0; i<n; i++)
se afla in vector\n";
if (a[i]==val) t = 1;
else cout<<"Valoarea nu se afla in vector\n";
return t;
cout<<" Cautare liniara cu componenta marcaj:
}
--> ";
int cautare_liniara_marcaj(int a[], int n, int val)
if (cautare_liniara_marcaj(a,n,val)==1)
{
cout<<"Valoarea se afla in vector\n";
int poz = 0;
else cout<<"Valoarea nu se afla in vector\n";
a[n] = val;
cout<<" Cautare binara pe vector ordonat: --> ";
while (a[poz] != val)
if (cautare_binara(a,n,val)!=-1) cout<<"Valoarea
{
se afla in vector\n";
poz++;
else cout<<"Valoarea nu se afla in vector\n";
}
cout<<"Inserare pe prima pozitie: ";
if (poz == n) // cautare fara succes
inserare(a,n,100,0);
return 0;
afisare(a,n);
return 1;
cout<<"Inserare pe ultima pozitie: ";
}
inserare(a,n,200,n);
int cautare_binara(int a[], int n, int val)
afisare(a,n);
{
cout<<"Inserare in mijlocul vectorului : ";
int l = 0, r = n-1, m, poz = -1;
inserare(a,n,300,n/2);
m = (l+r) / 2;
afisare(a,n);
while ((l <= r) && (val != a[m]))
cout<<"Stergerea de pe prima pozitie: ";
{
stergere(a,n,0);
if (val<a[m]) r = m-1;
afisare(a,n);
else l = m+1;
cout<<"tergerea de pe ultima pozitie: ";
m =(l+r) / 2;
stergere(a,n,n-1);
}
afisare(a,n);
if (a[m]==val) poz = m;
cout<<"tergerea din mijlocul vectorului : ";
return poz;
stergere(a,n,n/2);
}
afisare(a,n);
void inserare(int a[], int &n, int val, int poz)
return 0;
{
}
for (int i = n-1; i >= poz; i--)
a[i+1] = a[i];
a[poz] = val;
n++;
}
 Parantezare corecta ok=false;
break;
#include <iostream>
}
#include <cstring>
push(s[i],Stack);
using namespace std;
}
struct nod
else if(s[i] == peek(Stack))
{
push(s[i],Stack);
char info;
else
nod *next;
pop(Stack);
};
}
void push(char val, nod*& Stack)
if(ok) cout<<"Corect";
{
else cout<<"Incorect";
nod* aux = new nod;
return 0;
aux->info = val;
}
aux->next = NULL;
if (Stack == NULL)
Stack = aux;
else
{
aux->next = Stack;
Stack = aux;
}
}
void pop(nod*& Stack)
{
if(Stack!=NULL)
{
nod* aux = Stack;
Stack = Stack ->next;
delete aux;
}
else cout<<"Stiva vida\n";
}
bool empty(nod*Stack)
{
if (Stack == NULL) return 1;
return 0;
}
char peek(nod* Stack)
{
if(Stack != NULL) return Stack->info;
}
int main()
{
nod* Stack = NULL;
char s[100];
cin>>s;
bool ok=true;
for(int i=0; i<strlen(s); i++)
{
if(empty(Stack)) // Stiva e vida
{
if(s[i]==')')
{
 Parcurgere în lățime(BF) }
nrElem++;
#include <iostream>
}
using namespace std;
void pop(nod*& Top)
#define MAX 20
{
int a[MAX][MAX], Q[MAX], viz[MAX],n;
if(Top!=NULL)
void BF(){
{
int Front = 1,Rear = 1,nod,i; // Q[ ] - coada
cout<<"Valoare stearsa "<<Top->info<<"\n";
// a – matricea de adiacenta
nod* aux = Top;
cin>>nod; // de inceput
Top = Top ->next;
Q[Front]=nod;
delete aux;
viz[nod]=1;
nrElem--;
while(Front <= Rear)
}
{
else cout<<"Stiva vida\n";
cout<<Q[Front]<<" ";
}
for(i=1;i<=n;i++)
void afisare(nod* Top)
if( a[Q[Front]][i]==1 && viz[i]!=1 )
{
{ Rear++;
nod *p;
Q[Rear] = i;
p = Top;
viz[i] = 1; }
while (p != NULL)
Front++;
{
}
cout<< p->info <<" ";
}
p = p -> next;
int main()
}
{
cout<<"\n";
int i,j;
}
cin>>n; //numarul de noduri ale arborelui
void cautare(nod* Top, int x)
for(i=1;i<=n;i++)
{
for(j=i+1;j<=n;j++)
nod* p = Top;
{
while (p != NULL && x != p->info)
cin>>a[i][j];
p = p -> next;
a[j][i] = a[i][j];
}
if (p == NULL) cout<<endl<<x<<" nu exista in
BF();
stiva"<<endl;
return 0;
}
 Stivă – implementare dinamică else cout<<endl<<x<<" exista in stiva"<<endl;
#include <iostream> }
using namespace std; int main()
struct nod {
{ nod* Top = NULL;
int info; push(Top,10);
nod *next; afisare(Top);
}; push(Top,20);
int nrElem; afisare(Top);
void push(nod*& Top, int val) push(Top,15);
{ afisare(Top);
nod* aux = new nod; push(Top,7);
aux->info = val; afisare(Top);
aux->next = NULL; push(Top,45);
if (Top == NULL) afisare(Top);
Top = aux; cautare(Top,20);
else cautare(Top,24);
{ for(int i=0;i<=5;i++)
aux->next = Top; {
Top = aux; pop(Top);
afisare(Top);
}
return 0;
}
 Stivă – implementare statică Pop(val); cout<<"Element sters: "<<val;
cout<<"Stiva: "; afis_fara_stergere();
Pop(val); cout<<"Element sters: "<<val;
#include <iostream>
cout<<"Stiva: "; afis_fara_stergere();
using namespace std;
Push(8); cout<<"Stiva: "; afis_fara_stergere();
#define MAX 100
return 0;
int Stack[MAX];
}
int Top;
void Push (int Val)
{
if (Top == MAX) cout<<"Overflow";
// Overflow
else
{
Top++;
Stack[Top] = Val;
}
}
void Pop (int &X)
{
if (Top == 0) cout<<"Underflow";
// Underflow
else
{
X = Stack[Top];
Top--;
}
}
void afis_fara_stergere()
{
int t = Top;
while(t>0)
{
cout<<Stack[t]<<" ";
t--;
}
cout<<"\n";
}
int main()
{
int val;
Push(20); cout<<"Stiva: "; afis_fara_stergere();
Push(5); cout<<"Stiva: "; afis_fara_stergere();
Pop(val); cout<<"Element sters: "<<val;
cout<<"Stiva: "; afis_fara_stergere();
Push(16); cout<<"Stiva: "; afis_fara_stergere();
Push(9); cout<<"Stiva: "; afis_fara_stergere();
Push(3); cout<<"Stiva: "; afis_fara_stergere();
Pop(val); cout<<"Element sters: "<<val;
cout<<"Stiva: "; afis_fara_stergere();
Push(7); cout<<"Stiva: "; afis_fara_stergere();
Push(5); cout<<"Stiva: "; afis_fara_stergere();
Push(4); cout<<"Stiva: "; afis_fara_stergere();
Pop(val); cout<<"Element sters: "<<val;
cout<<"Stiva: "; afis_fara_stergere();
 Vectori rari for (p1 = prim3; p1!= NULL; p1 = p1 -> next)
if (p2 -> poz == p1 -> poz) {p1 -> val += p2
-> val; ok = 1;}
#include<iostream>
if (ok == 0) adauga(prim3, ultim3, p2 -> val,
using namespace std;
p2 -> poz);
struct nod
}
{
}
int poz, val;
int prod_scalar(nod *prim1, nod *prim2)
nod*next;
{
};
int prod = 0;
void adauga(nod *&prim, nod *&ultim, int a, int
nod *p1, *p2;
b)
{
for (p2 = prim2; p2!= NULL; p2 = p2 -> next)
nod *q = new nod;
for (p1 = prim1; p1!= NULL; p1 = p1 -> next)
q->val=a;
if (p2 -> poz == p1 -> poz) prod += p1 -> val
q->poz=b;
* p2 -> val;
q->next=NULL;
return prod;
if(prim==NULL)
}
{
int main ()
prim = q;
{
ultim = prim;
nod *prim1 = NULL, *ultim1, *prim2 = NULL,
}
*ultim2, *prim3 = NULL, *ultim3;
else
int n1,n2;
{
creare_vector(n1,prim1,ultim1);
ultim -> next = q;
afisare(prim1);
ultim = q;
creare_vector(n2,prim2,ultim2);
}
afisare(prim2);
}
suma(prim1,prim2,prim3,ultim3);
void creare_vector(int &n, nod *&prim, nod
afisare(prim3);
*&ultim)
cout<<"\n"<<prod_scalar(prim1, prim2);
{ int i,a,b;
}
cin>>n;
for(i=1;i<=n;i++)
{cin>>a>>b;
adauga(prim, ultim, a, b);
}
}
void afisare(nod *prim)
{
nod *p = prim;
while(p)
{
cout<<"("<<p->val<<" "<<p-
>poz<<") ";
p=p->next;
}
cout<<endl;
}
void suma(nod *prim1, nod *prim2, nod *&prim3,
nod *&ultim3)
{
nod *p1, *p2;
for (p1 = prim1; p1!= NULL; p1 = p1 -> next)
adauga(prim3, ultim3, p1 -> val, p1 -> poz);
for (p2 = prim2; p2!= NULL; p2 = p2 -> next)
{ int ok = 0;

Das könnte Ihnen auch gefallen