Buna seara.as avea si eu nevoie de o un program la lista liniara simpla cu meniu care sa aiba in componenta toate operatiile posibile(creare,adaugare in fata primului nod,adaugare in spatele ultimului nod,stergere nod din lista,stergere primu element si stergere ultimul element) am facut eu ceva dar nu imi reuseste daca ati fi draguti sa imi corecti as fi recunascator.
#include<iostream.h>
void meniu()
{
cout<<endl<<endl<<endl<<endl<<endl;
cout<<" MENIU "<<endl<<endl<<endl<<endl<<endl;
cout<<" 1.Creare "<<endl;
cout<<" 2.Inserare inaintea capului de lista"<<endl;
cout<<" 3.Inserare dupa ultimul element"<<endl;
cout<<" 4.Inserare dupa un element cu adresa precizata"<<endl;
cout<<" 5.Inserare inaintea unui element cu adresa precizata"<<endl;
cout<<" 6.Eliminarea capului de lista"<<endl;
cout<<" 7.Eliminarea ultimului nod"<<endl;
cout<<" 8Eliminarea unui nod cu adresa precizata"<<endl;
}
struct nod{int info;
nod *adr;};
nod *prim,*ultim;
void creare(nod *&prim,nod *&ultim,int x)
{cout<<"x=";
cin>>x;
prim=new nod;
prim->info=x;
prim->adr=NULL;
ultim=prim;}
void listare(nod *prim)
{nod *p;
p=prim;
cout<<" ";
cout<<"Lista este:";
cout<<" ";
while(p!=0)
{cout<<p->info<<" ";
p=p->adr;}}
void adaug_fata(nod *&prim,int inf)
{nod *q;
q=new nod;
q->info=inf;
q->adr=prim;
prim=q;}
void adaug_dupa(nod *&prim,nod *&ultim,int x)
{nod *c;
c=new nod;
c->info=x;
c->adr=NULL;
ultim->adr=c;
ultim=c;}
void adaug_int(nod *prim,int x,int inf)
{nod *r,*q;
q=prim;
while(q->info!=x)
q=q->adr;
r=new nod;
r->info=inf;
r->adr=q->adr;
q->adr=r;}
void adaug_int1(nod *prim,int x,int inf)
{nod *r,*q;
q=prim;
while(q->adr->info!=x)
q=q->adr;
r=new nod;
r->info=inf;
r->adr=q->adr;
q->adr=r;}
void sterg_prim(nod *&prim)
{nod *q;
q=prim;
prim=prim->adr;
delete q;}
void sterg_urm(nod *prim,nod *& ultim)
{nod *q;
q=prim;
while(q->adr!=ultim)
q=q->adr;
q->adr=NULL;
delete ultim;
ultim=q;}
void stergere_interior(nod *prim,int x)
{nod *q,*r;
int ok=0;
q=prim;
while(q->info!=x&&q->adr!=NULL)
{r=q;
q=q->adr;}
if(q->info==x)
{r->adr=q->adr;
delete q;
ok=1;}
if(ok==0)
cout<<"Nu e in lista!";}
int main()
{int x;
do{
meniu();
prim=0;
cout<<endl<<endl<<endl;
cout<<" Alegeti o optiune:"<<" ";
cin>>x;
cout<<endl<<endl;
switch(x)
{case 1:{ creare(prim,ultim,x);listare(prim);}break;
case 2:{cout<<" 2)Inserare inaintea capului de lista"<<endl;
int nr,i;
for(i=1;i<10;i++)
{cin>>nr;
adaug_fata(prim,nr);}listare(prim);
}break;
case 3:{cout<<" 3)Inserare dupa ultimul element"<<endl; creare(prim,ultim,x);
int nr,i;
for(i=1;i<10;i++)
{cin>>nr;
adaug_dupa(prim,ultim,nr);}listare(prim);}break;
case 4:{cout<<" 4)Inserare dupa un element cu adresa precizata"<<endl;
int nr1,nr2,nr,i;
creare(prim,ultim,x);
for(i=1;i<10;i++)
{cin>>nr;
adaug_dupa(prim,ultim,nr);}
listare(prim);
cout<<endl;
cout<<"nr1= ";
cin>>nr1;
cout<<endl;
cout<<"nr2= ";
cin>>nr2;
adaug_int(prim,nr1,nr2);
listare(prim);}break;
case 5:{cout<<" 5)Inserare inaintea unui element cu adresa precizata"<<endl;
int nr1,nr2,nr,i;
creare(prim,ultim,x);
for(i=1;i<10;i++)
{cin>>nr;
adaug_dupa(prim,ultim,nr);}
listare(prim);
cout<<endl;
cout<<"nr1= ";
cin>>nr1;
cout<<endl;
cout<<"nr2= ";
cin>>nr2;
adaug_int1(prim,nr1,nr2);
listare(prim);
}break;
case 6:{cout<<" 6)Eliminarea capului de lista"<<endl;
int nr1,nr2,nr,i;
creare(prim,ultim,x);
for(i=1;i<10;i++)
{cin>>nr;
adaug_dupa(prim,ultim,nr);}
listare(prim);
cout<<endl;
sterg_prim(prim);
listare(prim);
}break;
case 7:{cout<<" 7)Eliminarea ultimului nod"<<endl;
int nr,i;
creare(prim,ultim,x);
for(i=1;i<10;i++)
{cin>>nr;
adaug_dupa(prim,ultim,nr);}
listare(prim);
cout<<endl;
sterg_urm(prim,ultim);
listare(prim);}break;
case 8:{cout<<" 8)Eliminarea unui nod cu adresa precizata";
int nr,i,nr1;
creare(prim,ultim,x);
for(i=1;i<10;i++)
{cin>>nr;
adaug_dupa(prim,ultim,nr);}
listare(prim);
cout<<"nr1= "<<" ";cin>>nr1;
cout<<endl;
stergere_interior(prim,nr1);
listare(prim);}break;
case 9:{ x=9;break;}
}
}
while(x<=8);
return 1;
}