Creați listă liniară din n numere întregi introduse de la tastatură. Să se formeze a doua
listă care conține elementele distincte din listă dată, împreună cu frecvența lor de
apariție. urgent va rog!!
Răspunsuri la întrebare
Răspuns:
#include <iostream>
using namespace std;
struct nod
{
int info;
nod* urm;
};
nod *p, *Cap=NULL;
struct nodAp
{
int nr,ap;
nodAp* urm;
};
nodAp *prim=NULL;
void creareLista(nod *&Cap)
{
int i,inf,n;
nod *p, *q;
Cap=NULL;
cout<<"Dati numarul de elemente al listei n = ";cin>>n;
cout<<"Dati prima informatie ";cin>>inf;
p=new nod;
p->info=inf;
p->urm=NULL;
Cap=p; q=p;
for(i=2;i<=n;i++)
{
cout<<"Dati informatia "<<i<<" = ";
cin>>inf;
p=new nod;
p->info=inf;
p->urm=NULL;
q->urm=p;
q=p;
}
}
void afisare(nod *Cap)
{
nod *p=Cap;
while (p != NULL)
{
cout << p->info << " ";
p = p->urm;
}
cout << "\n";
}
void CreareLista2(nodAp *&prim, nod *Cap)
{
nodAp *q, *r;
q=new nodAp;
q->nr=Cap->info;
q->ap=0;
q->urm=NULL;
prim=q;
nod *p=Cap;
while (p!=NULL)
{
q=prim;
while (q->nr!=p->info && q->urm!=NULL)
{
q=q->urm;
}
if (q->nr==p->info) ++q->ap;
else
{
r=new nodAp;
r->nr=p->info;
r->ap=1;
q->urm=r;
q=r;
}
p=p->urm;
}
}
void afisareLista2(nodAp *prim)
{
nodAp *q=prim;
while (q != NULL)
{
cout << "(" << q->nr << "," << q->ap << ") ";
q=q->urm;
}
}
int main()
{
creareLista(Cap);
afisare(Cap);
CreareLista2(prim,Cap);
afisareLista2(prim);
}
Explicație: