Cozi

Aspecte teoretice:

Coada este o structură de date abstractă, pentru care operația de inserare a unui element se realizează la un capăt, în timp ce operația de extragere a unui element se realizează la celălalt capăt. Singurul element din coadă la care avem acces direct este cel de la început.
Operații caracteristice:

Singurele operații ce pot fi executate cu o coadă sunt:

  • crearea unei cozi vide;
  • inserarea unui element în coadă;
  • extragerea unui element din coadă;
  • accesarea unui element.

Executarea acestor operații asupra unei cozi presupune cunoaşterea începutului cozii (să-l notăm Inc) şi a sfârşitului acesteia (să-l notăm Sf).
Modul de funcționare a unei cozi este foarte uşor de intuit: toată lumea a „stat la coadă”, măcar o dată. Orice situație în care sunt mai multe cereri de acces la o resursă unică (de exemplu, mai mulți clienți şi o singură vânzătoare; o singură pompă de benzină şi mai multe maşini, un singur pod şi mai multe capre, etc) necesită formarea unei „linii de aşteptare”. Dacă nu apar alte priorități, cererile sunt satisfăcute în ordinea sosirii. Datorită faptului că întotdeauna este extras („servit”) primul element din coadă, iar inserarea oricărui nou element se face la sfârşit („la coadă”), coada este definită ca o structură de date care funcționează după principiul FIFO (First In First Out – Primul Intrat Primul Ieşit).

Implementare C++ operații cu cozi:

// CoadaCPP.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include<iostream>
#include<conio.h>
 
using namespace std; 
 
struct nod
{
	int info;
	nod *next;
};
 
void pune(nod* &v,nod* &sf,int x)
{
	nod *c;
	if(!v)
	{
		v=new nod;
		v->info=x;
		v->next=0;
		sf=v;
	}
	else
	{
		c=new nod;
		sf->next=c;
		c->info=x;
		sf=c;
		sf->next=0;
	}
}
 
void afisare(nod *v)
{
	nod *c;
	c=v;
	while(c)
	{
		cout<<c->info<<" ";
		c=c->next;
	}
}
 
void scoate(nod* &v)
{
	nod* c;
	if(!v)
		cout<<"coada este vida si nu mai ai ce elimina!!!";
	else
	{
		c=v;
		v=v->next;
		delete c;
	}
 }
 
void main()
{
	int n,a,i;
	nod *varf=0,*ultim=0;//varful si ultimul element al cozii
	cout<<"numarul initial de noduri ";
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cout<<"valoarea de adaugat in coada ";
		cin>>a;
		pune(varf,ultim,a);
	}
	cout<<endl;
	afisare(varf);
	int nre,nra;
	cout<<endl<<"cate adaugari ?";
	cin>>nra;
	for(i=1;i<=nra;i++)
	{
		cout<<"valoarea de adaugat ";
		cin>>a;
		pune(varf,ultim,a);
	}
	cout<<endl<<"dupa adaugare"<<endl;
	n=n+nra;
	cout<<"coada are  "<<n<<" elemente"<<endl;
	afisare(varf);
	cout<<endl<<"cate eliminari ?";
	cin>>nre;
	for(i=1;i<=nre;i++)
		   scoate(varf);
	cout<<endl<<"dupa eliminare"<<endl;
	n=n-nre;
	cout<<"coada are  "<<n<<" elemente"<<endl;
	afisare(varf);
	//prelucrez varful cozii: de exemplu se poate dubla continutul:
	varf->info=2*varf->info;
	cout<<endl<<"dupa dublarea valorii varfului "<<endl;
	afisare(varf);
	system("pause");
 }
 

Leave a comment