Sunteți pe pagina 1din 12

1. În fişierul „atestat.

in” se găsesc scrise pe acelaşi rând numere reale, despărţite prin câte un
spaţiu. Cu aceste numere se formează o listă liniară simplu înlănţuită alocată dinamic.
Tipăriţi lista creată. Inseraţi între oricare două elemente din listă iniţială media aritmetică a
vecinilor săi. Vizualizaţi din nou lista.
Exemplu:
atestat.in Se va tipari, după inserare:
2 10 7 11 2,6,10,8.5,7,9,11

#include<fstream>
#include<iostream>
using namespace std;
fstream f("atestat.in");
struct nod{
float info;
nod* urm;
};
nod *prim, *ultim;

void creare()
{
cout<<"Introduceti elementele listei:"<<endl;
nod *c=new nod;//se aloca spatiu pt un element
f>>c->info;//se incarca elementul in lista
//acest element devine primul si ultimul
prim=c;
ultim=c;
do
{
c=new nod;//se aloca spatiu pt un nou element al listei
f>>c->info;//se incarca noul element in lista
//se stabilesc legaturile;acest nou element fiind adaugat dupa ultimul..
//devine el ultimul element din lista
c->urm=0;
ultim->urm=c;
ultim=c;
} while(!f.eof());//cat timp nu s-a ajuns la sfarsitul fisierului
}

void afisare()
{ nod *c=prim;
while(c)
{ cout<<c->info<<" ";
c=c->urm;
}
}

void inseraremedie()

1
{nod *p,*q,*c;
p=prim;
while(p->urm!=NULL)
{ q=p->urm;
c=new nod;
c->info=(p->info+q->info)/2;
c->urm=q;
p->urm=c;
p=q;
}

int main()
{
creare();
afisare();
cout<<endl;
inseraremedie();
afisare();
return 0;
}

2. Se citesc de la tastatură pe rând numere întregi până la întâlnirea numărului 13 cu care se


formează o listă liniară simplu înlănţuită (numărul 13 nu face parte din listă). Vizualizaţi
lista, ştergeţi prima apariţie a primului număr negativ din listă sau daţi mesajul „Nu există
numere negative” în caz că lista nu are numere negative.

#include<iostream>
using namespace std;

struct nod
{
int info;
nod *urm;
};
nod *p,*u,*c ,*q;
int i,n;

void creare()
{
cout<<"Introduceti elementele listei:"<<endl;
c=new nod;//se aloca spatiu pt un element
cin>>c->info;//se incarca elementul in lista
//acest element devine primul si ultimul
if(c->info!=13)
{
p=c;

2
u=c;
while(c->info!=13)
{
c=new nod;//se aloca spatiu pt un nou element al listei
cin>>c->info;//se incarca noul element in lista
//se stabilesc legaturile;acest nou element fiind adaugat dupa ultimul..
//devine el ultimul element din lista
if(c->info!=13)
{
c->urm=0;
u->urm=c;
u=c;
}
}
}
else
cout<<"Primul nr citit a fost 13";
}

void afisare()
{
c=p;
while(c)
{
cout<<c->info<<" ";
c=c->urm;
}
}
void stergere()
{
if(p->info<0)
{
q=p;
p=p->urm;
delete q;}
else
{
c=p;
while(c->urm!=NULL && c->urm->info>=0) c=c->urm;
if(c->urm==NULL) cout<<"Nu exista numere negative";
else
{ q=c->urm;
c->urm=q->urm;
delete q;
}}
}
int main()
{

3
int x;
creare();
afisare();
cout<<endl;
stergere();
cout<<endl;
afisare();
return 0;
}

3. Să se creeze o listă liniară dublu înlănţuită cu “n” cuvinte care se citesc de la tastatură (n
dat, citit de la tastatură). Vizualizaţi lista creată, determinaţi câte cuvinte în listă sunt de
lungime minimă.
Ex: n=6 şi cuvintele“notă”, “la”, “atestat”, “în”, “luna”, “aprilie” => “2”.

#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;

struct nod
{
char info[20];
nod *ant,*urm;
};
nod *p,*u,*c ;
int i,n,minim;

void creare()
{
cin>>n;
c=new nod;//se aloca spatiu pt un element
cin>>c->info;//se incarca elementul in lista
//acest element devine primul si ultimul
p=c;
u=c;
minim=strlen(c->info);
for(i=2;i<=n;i++)
{
c=new nod;//se aloca spatiu pt un nou element al listei
cin>>c->info;//se incarca noul element in lista
//se stabilesc legaturile;acest nou element fiind adaugat dupa ultimul..
//devine el ultimul element din lista
if(strlen(c->info)<minim)
minim=strlen(c->info);
c->urm=0;
u->urm=c;
u=c;

4
c->ant=u;
}

void afisare()
{
c=p;
while(c)
{
cout<<c->info<<" ";
c=c->urm;
}
}

int numarare()
{int k=0;
c=p;
while(c)
{
if(strlen(c->info)==minim)
k++;
c=c->urm;
}return k;
}
int main()
{
creare();
afisare();
cout<<endl;
cout<<numarare();
return 0;
}

4. Se citesc din fişierul „atestat.in” numere reale cu care se formează o listă liniară dublu
înlănţuită alocată dinamic. Tipăriţi lista. Adăugaţi în faţa primului element suma numerelor
din listă. Vizualizaţi din nou.

#include<iostream>
#include<fstream>
using namespace std;

struct nod
{
float info;
nod *ant,*urm;
};
nod *p,*u,*c ;

5
int i,n;

fstream f("atestat.in",ios::in);

void creare(float &s)


{
c=new nod;//se aloca spatiu pt un element
f>>c->info;//se incarca elementul in lista
//acest element devine primul si ultimul
s=c->info;
p=c;
u=c;
do
{
c=new nod;//se aloca spatiu pt un nou element al listei
f>>c->info;//se incarca noul element in lista
//se stabilesc legaturile;acest nou element fiind adaugat dupa ultimul..
//devine el ultimul element din lista
s=s+c->info;
c->urm=0;
u->urm=c;
u=c;
c->ant=u;
}while(!f.eof());//cat timp nu s-a ajuns la sfarsitul fisierului
}

void afisare()
{
c=p;
while(c)
{
cout<<c->info<<" ";
c=c->urm;
}
}

int main()
{
float s;
creare(s);
afisare();
cout<<endl;
c=new nod;
c->info=s;
c->urm=p;
c->ant=NULL;
p=c;
afisare();

6
return 0;
}

5. Fişierul „atestat.in” conţine numere naturale cu cel mult 4 cifre, cu care se formează o listă
liniară dublu înlănţuită alocată dinamic. Tipăriţi lista. Ştergeţi prima apariţie a unui număr
par din listă. Vizualizaţi din nou.

#include<iostream>
#include<fstream>
using namespace std;

struct nod
{
unsigned info;
nod *ant,*urm;
};
nod *p,*u,*c,*q ;
int i,n;

fstream f("atestat.in",ios::in);

void creare()
{
c=new nod;//se aloca spatiu pt un element
f>>c->info;//se incarca elementul in lista
//acest element devine primul si ultimul

p=c;
u=c;
do
{
c=new nod;//se aloca spatiu pt un nou element al listei
f>>c->info;//se incarca noul element in lista
//se stabilesc legaturile;acest nou element fiind adaugat dupa ultimul..
//devine el ultimul element din lista
c->urm=0;
u->urm=c;
u=c;
c->ant=u;

}while(!f.eof());//cat timp nu s-a ajuns la sfarsitul fisierului


}

void afisare()
{
c=p;
while(c)
{

7
cout<<c->info<<" ";
c=c->urm;
}
}

void stergere()
{
if(p->info%2==0)
{
q=p;
p=p->urm;
delete q;}
else
{
c=p;
while(c->urm!=NULL && c->urm->info%2!=0) c=c->urm;
if(c->urm==NULL) cout<<"Nu exista numere pare";
else
{ q=c->urm;
c->urm=q->urm;
delete q;
}}
}
int main()
{
creare();
afisare();
cout<<endl;
stergere();
afisare();
return 0;
}

6. Se citesc din fişierul „atestat.in” numere reale cu care se formează o listă circulară simplă
înlănţuită, alocată dinamic. Tipăriţi lista. Găsiţi valoarea minimă a elementelor listei.

#include<fstream>
#include<iostream>
using namespace std;
fstream f("atestat.in",ios::in);
struct nod{
float info;
nod* urm;
};
nod *prim, *ultim;

void creare()
{

8
nod *c=new nod;//se aloca spatiu pt un element
f>>c->info;//se incarca elementul in lista
//acest element devine primul si ultimul
prim=c;
ultim=c;
do
{
c=new nod;//se aloca spatiu pt un nou element al listei
f>>c->info;//se incarca noul element in lista
//se stabilesc legaturile;acest nou element fiind adaugat dupa ultimul..
//devine el ultimul element din lista
ultim->urm=c;
ultim=c;
ultim->urm=0;
} while(!f.eof());//cat timp nu s-a ajuns la sfarsitul fisierului
ultim=prim;
}

void afisare()
{ nod *c=prim;
while(c)
{ cout<<c->info<<" ";
c=c->urm;
}
}
float minim()
{ nod *c=prim;
float min;
f>>c->info;
min=c->info;
while(c)
{ f>>c->info;
if(c->info<min)
min=c->info;
c=c->urm;
}
return min;
}

int main()
{
creare();
afisare();
cout<<endl;
cout<<minim();
return 0;
}

9
7. Din fişierul „atestat.in” se citeşte de pe primul rând n, apoi de pe următoarele n rânduri, n
numere întregi. Creaţi o coadă alocată dinamic. Vizualizaţi coada. Ştergeţi din coadă 3
numere, dacă se poate, sau tipăriţi un mesaj corespunzător, dacă acest lucru nu se poate.

#include<fstream>
#include<iostream>
using namespace std;
fstream f("atestat.in",ios::in);
struct nod
{
int info;
nod *urm;
};nod *c;

void adaugare(nod* &v,nod* &sf,int x)


{
// nod *c;
if(!v)
{v=new nod;
v->info=x;
v->urm=0;
sf=v;}
else
{c=new nod;
sf->urm=c;
c->info=x;
sf=c;
sf->urm=0;}
}

void afisare(nod *v)


{
// nod *c;
c=v;
while(c)
{
cout<<c->info<<" ";
c=c->urm;}
}

void extrage(nod* &v)


{
//nod* c;
if(!v)
cout<<"coada este vida si nu mai ai ce elimina!!!";
else
{
c=v;

10
v=v->urm;
delete c;}
}

int main()
{
int i,n,a;
nod *varf=0,*ultim=0;//varful si ultimul element al cozii
f>>n;
for(i=1;i<=n;i++)
{
f>>a;
adaugare(varf,ultim,a);
}
afisare(varf);
cout<<endl;
if(n>=3)
{
for(i=1;i<=3;i++)
extrage(varf);
afisare(varf);
}
else
cout<<"Nu exista 3 numere in coada";
return 0;
}

8. Se citesc din fişierul „atestat.in” numere reale cu care se formează o listă liniară tip stivă,
alocată dinamic. Tipăriţi stiva. Adăugaţi în stivă un nou element care va fi egal cu media
aritmetică a elementelor din stivă. Vizualizaţi din nou stiva.

#include<fstream>
#include<iostream>
using namespace std;
fstream f("atestat.in",ios::in);

struct nod
{
float info;
nod *back;
};
nod *varf;

void adaugare(nod* &v,float x)


{
nod *c;
if(!v)
{

11
v=new nod;
v->info=x;
v->back=0;}
else
{
c=new nod;
c->back=v;
c->info=x;
v=c;
}
}

void afisare(nod *v)


{
nod *c;
c=v;
while(c)
{
cout<<c->info<<" ";
c=c->back;
}
}

int main()
{
int i,n;
float a,ma,s=0,k=0;
f>>n;
for(i=1;i<=n;i++)
{
f>>a;
adaugare(varf,a);
s=s+a;
k++;
}
ma=s/k;
afisare(varf);
cout<<endl;
adaugare(varf,ma);
afisare(varf);
return 0;
}

12

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