You are on page 1of 15

COZI

1. Realizati un program care sa exemplifice operatiile care se efectueaza intr-o coada,


construind un
program C++ cu meniuri specifice operatiile cu coada.

1.1 Queue using array.


#include <iostream>
using namespace std;
struct Queue
{
int size;
int front;
int rear;
int* Q;
};
void create(struct Queue* q, int size) {
q->size = size;
q->front = q->rear = -1;
q->Q = new int [size];
//q->Q = (int*)malloc(q->size * sizeof(int));

}
void enqueue(Queue* q, int x) {
if (q->rear == q->size - 1)cout << "queue is full"<<"\n";
else {
q->rear++;
q->Q[q->rear] = x;
}
}
int dequeue(Queue* q) {
int x = -1;
if (q->front == q->rear)cout << "queue is empty" << "\n";
else {
q->front++;
x = q->Q[q->front];
}
return x;
}
void Display(struct Queue q) {
for (int i = q.front+1; i <= q.rear; i++)cout << q.Q[i] << " ";
cout << "\n";
}
int main()
{
struct Queue q;
create(&q, 5);
enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
Display(q);
cout << dequeue(&q);
return 0;
}
1.1.1.Circular Queue
#include <iostream>
using namespace std;
struct Queue {
int front;
int rear;
int size;
int* Q;
};
void create(struct Queue* q, int size) {
q->size = size;
q->rear = q->front = 0;
q->Q = new int[size];
}
void enqueue(struct Queue* q, int x) {
if ((q->rear + 1) % q->size == q->front)cout << "queue full\n";
else {
q->rear = (q->rear + 1) % q->size;
q->Q[q->rear] = x;
}
}
int dequeue(struct Queue* q) {
int x = -1;
if (q->front == q->rear)cout << "queue empty\n";
else {
q->front = (q->front + 1) % q->size;
x = q->Q[q->front];
}
return x;
}
void Display(struct Queue q) {
int i = q.front + 1;
do {
cout << q.Q[i]<<" ";
i = (i + 1) % q.size;
} while (i != (q.rear + 1) % q.size);
cout << "\n";
}
int main()
{
struct Queue q;
create(&q, 10);

enqueue(&q, 10);
enqueue(&q, 20);
enqueue(&q, 30);
Display(q);
cout << dequeue(&q);
}

1.2 Queue class using array

#include <iostream>
using namespace std;
class Queue {
private:
int size;
int front;
int rear;
int* Q;
public:
Queue() { front = rear = -1; size = 10; Q = new int[size]; }
Queue(int size) { front = rear = -1; this->size = size; Q = new int[this->size]; }
void enqueue(int x);
int dequeue();
void Display();
};
void Queue::enqueue(int x)
{
if (rear == size - 1)cout << "Queue Full\n";
else {
rear++;
Q[rear] = x;
}
}
int Queue::dequeue() {
int x = -1;
if (rear = front)cout << "Queue empty\n";
else {
x = Q[front + 1];
front++;
}
return x;
}
void Queue::Display() {
for (int i = front + 1; i <= rear; i++)cout << Q[i] << " ";
cout << "\n";
}
int main()
{
Queue q(5);
q.enqueue(10);
q.enqueue(20);
q.enqueue(30);
q.Display();
cout << q.dequeue();
return 0;
}

1.3 Queue using linked-list.

#include <iostream>
using namespace std;
struct Node {
int data;
struct Node* next;
}*front = NULL,*rear = NULL;
void enqueue(int x) {
struct Node* t=new Node;
if (t == NULL)cout << "Queue is full\n";
else {
t->data = x;
t->next = NULL;
if (front == NULL)
front = rear = t;
else {
rear->next=t ;
rear = t;
}
}
}
int dequeue() {
int x = -1;
struct Node* t;
if (rear == front)cout << "empty queue\n";
else {
x = front->data;
t = front;
front = front->next;
free(t);
}
return x;
}
void Display() {
struct Node* p = front;
while (p) {
cout << p->data<<" ";
p = p->next;
}
cout << "\n";
}
int main()
{
enqueue(10);
enqueue(20);
enqueue(30);
enqueue(40);
enqueue(50);
Display();
cout << dequeue();
return 0;
}

2. Se da o STIVA cu numere naturale. Sa se creeze o COADA, cu numerele


pare din lista stiva. Sa
se afiseze ambele structuri.
#include <iostream>
using namespace std;
struct Node {
int data;
struct Node* next;
}*top = NULL, * front = NULL, * rear = NULL;
int empty() {
if (top)return 0;
else return 1;
}
void push(int x) {
Node* t = new Node;
if (t == NULL) cout << "stack overflow";
else {
t->data = x;
t->next = top;
top = t;

}
}
void Displaystack() {
struct Node* p = top;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << "\n";
}
int verificareparitate() {
struct Node* t;
if (top == NULL)cout << "stack empty" << "\n";
else {
t = top;
if (t->data % 2 == 0)return 1;
}
return 0;
}
int pop() {
struct Node* t;
int x = -1;
if (top == NULL)cout << "stack empty" << "\n";
else {
t = top;
top = top->next;
x = t->data;
free(t);
}
return x;
}
void enqueue(int x) {
struct Node* t = new Node;
if (t == NULL)cout << "Queue is full\n";
else {
t->data = x;
t->next = NULL;
if (front == NULL)
front = rear = t;
else {
rear->next = t;
rear = t;
}
}
}
int dequeue() {
int x = -1;
struct Node* t;
if (rear == front)cout << "empty queue\n";
else {
x = front->data;
t = front;
front = front->next;
free(t);
}
return x;
}
void Displayqueue() {
struct Node* p = front;
while (p) {
cout << p->data << " ";
p = p->next;
}
cout << "\n";
}

int main()
{
push(10); push(23); push(4); push(13); push(14); push(10);
push(102); push(56); push(12); push(153); push(102);
Displaystack();
while (!empty()) {
if (verificareparitate())enqueue(pop());
else pop();
}
Displayqueue();
return 0;
}

3. Sa se creeze o coada cu numerele natuale preluate de la tastatura. Se cere


să se adauge după
fiecare număr din coada, răsturnatul său. Să se afişeze conţinutul cozii
înainte şi după modificare,
fiecare afişare pe câte un rând (rasturnatul lui 46 este 64).

# include <iostream>
using namespace std;
struct coada{
int inf;
coada *leg;
};
coada *p, *prim, *ultim;
int x, i, n;

int invers(int nr)


{
int inv=0;
int n=nr;
while(n!=0)
{
inv=inv*10+n%10;
n=n/10;
}
return inv;
}

void adaug(coada *ultim, int i, int n) {


coada *p;
while (i<=2*n){
if (i%2!=0){
cout<<"valoarea_"<<i<<" = ";
cin>>x;
p=new coada;
p->inf=x;
p->leg=NULL;
ultim->leg=p;
ultim=p;
i=i+1;
}
else{
p=new coada;
p->inf=invers(ultim->inf);
p->leg=NULL;
ultim->leg=p;
ultim=p;
i=i+1;
}
}
}
int main (){
cout<<"nr elemente: "<<endl;
cin>>n; i=1;
p=new coada;
cout<<"valoarea_"<<i<<" = ";
cin>>x;
p->inf=x;
p->leg=NULL;
prim=ultim=p;
i=i+1;
adaug(ultim,i,n); cout<<endl;
i=0;
p=prim;
while (p!=NULL){
cout<<p->inf<<" ";
p=p->leg;
}
return 0;
}

LISTE

1. Sa se creeze o lista liniara simplu inlantuita ce memoreaza numere


intregi folosind crearea prin
adaugare la sfarsitul listei. Se cere:
a) Sa se afiseze continutul listei
b) Sa se determine numarul de numere prime.

# include <iostream.h>
struct lista
{
int info;
lista *leg;
};
lista *p, *prim, *ultim;
int n;
void creare(lista *&prim, lista *&ultim)
{
int i,inf;
cout<<"Dati numarul de elemente al listei n = "; cin>>n;
cout<<"Dati prima informatie "; cin>>inf;
prim=new lista;
prim->info=inf;
prim->leg=NULL;
ultim=prim;
for(i=2;i<=n;i++)
{
cout<<"Dati informatia "<<i<<" = ";
cin>>inf;

p=new lista;
p->info=inf;
p->leg=NULL;
ultim->leg=p;
ultim=p;
}
}
void afisare(lista *prim)
{
p=prim;
while(p!=NULL)
{
cout<<p->info<<" ";
p=p->leg;
}
}
int verif_prim(int x)
{
int q=1;
for(int i=2;i<=x/2;i++)
if(x%i==0) q=0;
return q;
}
int nr_prime(lista *prim)
{
int nr=0;
p=prim;
while(p!=NULL)
{
if(verif_prim(p->info)==1) nr++;
p=p->leg;
}
return nr;
}
int main(void)
{
creare(prim,ultim);
afisare(prim);
cout<<endl<<"numarul de numere prime = "<<nr_prime(prim)<<endl;

4. Se da o lista liniara simplu inlantuita cu numere naturale. Sa se creeze


doua liste, una cu
numerele pare din lista initiala, iar cea de a doua cu numerele impare. Sa
afiseze la final cele doua
liste obtinute

#include <iostream>
using namespace std;

typedef struct un_nod


{
int info;
un_nod* urm;
} TNOD;

TNOD *L,*L1,*L2;

void afisare (TNOD *q)


{
cout<<endl;
while(q)
{
cout<<q->info<<" ";
q=q->urm;
}
}

TNOD* creare()
{
TNOD *prim,*ultim,*nou;
int i,n;
cout<<"noduri lista: ";
cin>>n;
prim=new TNOD;
cout<<"info = ";
cin>>prim->info;
prim->urm=NULL;
ultim=prim;
for(i=2;i<=n;i++)
{
nou=new TNOD;
cout<<"info = ";
cin>>nou->info;
nou->urm=NULL;
ultim->urm=nou;
ultim=nou;}
return prim;
}

void doua_liste (TNOD *prim, TNOD* &prim1,TNOD* &prim2)


{
TNOD *nou1,*nou2,*ultim1,*ultim2,*p;
prim1=new TNOD;
prim1->urm=NULL;
ultim1=prim1;
prim2=new TNOD;
prim2->urm=NULL;
ultim2=prim2;
p=prim;
while(p)
{
if(p->info%2==0)
{
nou1=new TNOD;
nou1->info=p->info;
nou1->urm=NULL;
ultim1->urm=nou1;
ultim1=nou1;
}
else
{
nou2=new TNOD;
nou2->info=p->info;
nou2->urm=NULL;
ultim2->urm=nou2;
ultim2=nou2;
}
p=p->urm;
}
}
int main ()
{
L=creare();
cout<<"Lista introdusa este: "<<endl;
afisare(L);
cout<<endl;
doua_liste(L,L1,L2);
cout<<"Cele 2 liste sunt: \n";
afisare(L1->urm);
afisare(L2->urm);

return 0;
}
9. Sa se formeze o lista care contine elementele unui vector.

#include <iostream>

using namespace std;

struct Node
{
int data;
struct Node* next;
}*first=NULL;
void create(int A[], int n)
{
int i;
struct Node* t,*last;
first = new Node;
first->data = A[0];
first->next = NULL;
last = first;

for (i = 1; i < n; i++)


{
t = new Node;
t->data = A[i];
t->next = NULL;
last->next = t;
last = t;
}
}

void Display(struct Node* p) {


while (p) {
cout << p->data;
p = p->next;
}
}
int main()
{
int A[] = { 3, 5, 6, 7 };
create(A, 5);

Display(first);
return 0;
}

You might also like