Sunteți pe pagina 1din 4

#include<iostream>

#define MAX 100


#include<conio.h>
using namespace std;
struct nod
//structura unui nod al listei
{
int inf;
int urm;
};
nod lista[MAX];
//tabloul memoreaza lista
int s[MAX],prim=-1,nr,adr;
int exista_spatiu();
//verifica daca exista spatiu liber in tablou
void aloca(int&adr);
//stabileste pozitia nodului
nod al listei
void elibereaza(int adr); //demarcheaza elementul de tablou devenit liber
void adauga(int&prim,int x);
//creaza lista prin adaugare la sf.
void parcurgere(int prim);
//parcurge si afiseaza continutul listei
int cautare(int x);
//identifica pozitia unui nod in tablou
void inserare_inainte(int adr,int x); //insereaza un nod inaintea unui nod dat
void inserare_dupa(int adr,int x);
//insereaza un nod dupa un nod dat
void stergere(int adr);
//sterge un nod din lista
int main()
{
int p,opt,x,y;
do
{
cout<<"1:Creare"<<endl;
cout<<"2:Parcurgere"<<endl;
cout<<"3:Cautare"<<endl;
cout<<"4:Inserare dupa"<<endl;
cout<<"5:Inserare inainte"<<endl;
cout<<"6:Stergere"<<endl;
cout<<"7:Iesire"<<endl;
cout<<"Optiunea:";cin>>opt;
switch(opt)
{
case 1:cout<<"nod:";cin>>x;
if(exista_spatiu())
adauga(prim,x);
else
cout<<"nu exista spatiu";
break;
case 2:parcurgere(prim);
break;
case 3:cout<<"nod=";cin>>x;
p=cautare(x);
if(p!=-1)
cout<<lista[p].inf;
else
cout<<x<<"nu exista";
break;
case 4:cout<<"nodul dupa care se insereaza=";cin>>x;
p=cautare(x);
if(p!=-1)
{
cout<<"nodul care se insereaza="; cin>>y;
if(exista_spatiu())
inserare_dupa(p,y);

else
cout<<"nu exista spatiu";
}
else
cout<<"nu exista nodul"<<x;
break;
case 5:cout<<"nodul inaintea caruia se insereaza=";cin>>x;
p=cautare(x);
if(p!=-1)
{
cout<<"nodul de inserat=";cin>>y;
if(exista_spatiu())
inserare_inainte(p,y);
else
cout<<"nu exista spatiu";
}
else
cout<<"nu exista nodul"<<x;
break;
case 6:cout<<"nod=";cin>>x;
p=cautare(x);
if(p!=-1)
stergere(p);
else
cout<<"nu exista nodul"<<x;
break;
}
}
while(opt!=7);
}
int exista_spatiu()
{
if (nr<MAX)
return 1;
return 0;
}
void aloca(int & adr)
{
int i=0;
while(s[i])
i++;
adr=i;
s[i]=1;
nr++;
}
void elibereaza(int adr)
{
s[adr]=0;
nr--;
if(adr==prim)
prim==-1;
}
void adauga(int & prim,int x)
{

int p=prim ;
aloca(adr) ;
lista[adr].inf=x ;
lista[adr].urm=-1 ;
if(prim==-1 )
prim=adr ;
else
{while(lista[p].urm!=-1)
p=lista[p].urm ;
lista[p].urm=adr ;
}
}
void parcurgere(int prim)
{int p=prim ;
if(prim==-1)
cout<<"lista vida!";
else
{while(p!=-1)
{cout<<lista[p].inf<<" ";
p=lista[p].urm;
}
}
}
int cautare(int x)
{
int p=prim;
while(p!=-1&&lista[p].inf!=x)
p=lista[p].urm;
return p;
}
void inserare_inainte(int adr,int x)
{
int p;
aloca(p);
lista[p]=lista[adr];
lista[adr].inf=x;
lista[adr].urm=p;
}
void inserare_dupa(int adr,int x)
{
int p;
aloca(p);
lista[p].inf=x;
lista[p].urm=lista[adr].urm;
lista[adr].urm=p;
}
void stergere(int adr)
{
int q,p=lista[adr].urm;
if(p!=-1)
lista[adr]=lista[p];
else
{
q=prim;
p=lista[q].urm;
if(p!=-1)
{
while(lista[p].urm!=-1)

{
q=p;
p=lista[p].urm;
}
lista[q].urm=-1;
}
else
p=prim;
}
elibereaza(p);
}