Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- struct nod
- {
- int inf;
- nod *st,*dr;
- };
- nod *prim,*ultim;
- void creare (nod *&prim,nod *&ultim)
- {
- int n,i;
- nod *p;
- cout<<"Dati numarul de elemente: ";
- cin>>n;
- prim=new(nod);
- cout<<"Informatia numarul 1= ";
- cin>>prim->inf;
- prim->st=NULL;
- prim->dr=NULL;
- ultim=prim;
- for (i=2; i<=n; i++)
- {
- p=new(nod);
- cout<<"Informatia numarul "<<i<<"=: ";
- cin>>p->inf;
- p->dr=NULL;
- ultim->dr=p;
- p->st=ultim;
- ultim=p;
- }
- }
- void creareinv(nod *&prim,nod *&ultim)
- {
- int n,i;
- nod *p;
- cout<<"Dati numarul de elemente: ";
- cin>>n;
- prim=new(nod);
- cout<<"Informatia numarul 1= ";
- cin>>prim->inf;
- prim->st=NULL;
- prim->dr=NULL;
- ultim=prim;
- for (i=2; i<=n; i++)
- {
- p=new(nod);
- cout<<"Informatia numarul "<<i<<"=: ";
- cin>>p->inf;
- p->dr=prim;
- p->st=NULL;
- prim->st=p;
- prim=p;
- }
- }
- void add_prim(nod*& prim,nod* &ultim)
- {
- if (prim==NULL&&ultim==NULL)
- {
- prim=new(nod);
- cout<<"Informatia ce trebuie adaugata este: ";
- cin>>prim->inf;
- prim->dr=NULL;
- prim->st=NULL;
- ultim=prim;
- }
- else
- {
- nod*c;
- c=new nod;
- cout<<"Informatia ce trebuie adaugata este: ";
- cin>>c->inf;
- c->st=NULL;
- c->dr=prim;
- prim->st=c;
- prim=c;
- }
- }
- void add_ultim(nod*& prim,nod*& ultim)
- {
- nod *p;
- if (prim==NULL&&ultim==NULL)
- {
- prim=new(nod);
- cout<<"Informatia ce trebuie adaugata este: ";
- cin>>prim->inf;
- prim->st=NULL;
- prim->dr=NULL;
- ultim=prim;
- }
- else
- {
- p=new(nod);
- cin>>p->inf;
- ultim->dr=p;
- p->st=ultim;
- p->dr=NULL;
- ultim=p;
- }
- }
- void add_k(nod *&prim,nod*&ultim)
- {
- int k,infadd,i;
- nod *q,*p;
- cout<<"Pozitia pe care va fi inserat nodul este: ";
- cin>>k;
- cout<<"Informatia care se va adauga este: ";
- cin>>infadd;
- if (k==1)
- {
- q=new(nod);
- q->inf=infadd;
- q->st=NULL;
- q->dr=prim;
- prim=q;
- }
- else
- {
- p=prim;
- for (i=1; i<=k-2; i++)
- {
- p=p->dr;
- if (p==NULL) break;
- }
- if (p==NULL) cout<<"PREA MULT"<<endl;
- else
- {
- q=new(nod);
- q->inf=infadd;
- q->dr=p->dr;
- p->dr=q;
- }
- }
- }
- void add_dupaval(nod *&prim,nod*&ultim)
- {
- int valc,infadd;
- nod *q,*p=prim;
- cout<<"Valoare cautata este: ";
- cin>>valc;
- cout<<"Valoarea care se va adauga este: ";
- cin>>infadd;
- if (prim==NULL) cout<<"Nu se poate";
- else
- {
- while (p!=NULL)
- if (p->inf!=valc) p=p->dr;
- else
- {
- q=new(nod);
- q->inf=infadd;
- q->dr=p->dr;
- p->dr=q;
- p=q->dr;
- }
- if (ultim->dr!=NULL)
- {
- ultim=ultim->dr;
- ultim->dr=NULL;
- }
- }
- }
- void add_inainte(nod *&prim, nod*&ultim)
- {
- int valc,infadd;
- nod *p=prim,*q;
- cout<<"Valoare cautata este: ";
- cin>>valc;
- cout<<"Valoarea care se va adauga este: ";
- cin>>infadd;
- if (prim->inf==valc)
- {
- q=new(nod);
- q->inf=infadd;
- prim->st=q;
- q->dr=prim;
- prim=q;
- p=q->dr->dr;
- }
- while (p)
- if (p->inf!=valc) p=p->dr;
- else
- {
- q=new(nod);
- q->inf=infadd;
- p->st->dr=q;
- q->st=p->st;
- q->dr=p;
- p->st=q;
- p=p->dr;
- }
- }
- void elimin_prim(nod*&prim,nod *&ultim)
- {
- nod *p=prim;
- prim=p->dr;
- prim->st=NULL;
- delete p;
- }
- void elimin_ultim (nod *&prim,nod *&ultim)
- {
- nod *p=ultim;
- ultim=ultim->st;
- ultim->dr=NULL;
- delete p;
- }
- void elimin_k(nod *&prim,nod *&ultim)
- {
- int k,i;
- if (prim==NULL&&ultim==NULL) cout<<"Lista vida";
- cout<<"Pozitia elementului care va fi eliminat este: ";
- cin>>k;
- if (k==1)
- elimin_prim(prim,ultim);
- else
- {
- nod *p,*q;
- p=prim;
- for (i=1; i<k; i++)
- {
- p=p->dr;
- if (p->dr==NULL) break;
- }
- if (p==ultim) elimin_ultim(prim,ultim);
- else if (p==NULL) cout<<"Nu sunt destul noduri";
- else
- {
- q=p;
- p->st->dr=p->dr;
- p->dr->st=p->st;
- delete q;
- }
- }
- }
- void elimin_val(nod *&prim,nod*&ultim)
- {
- int valc;
- nod *p,*q;
- cout<<"Valoarea cautata este: ";
- cin>>valc;
- if (prim==NULL ) cout<<"Nu se poate elimina";
- else
- {
- p=prim->dr;
- while (p->dr)
- if (p->inf!=valc) p=p->dr;
- else
- {
- q=p;
- p->st->dr=p->dr;
- p->dr->st=p->st;
- delete q;
- p=p->dr;
- }
- if (ultim->inf==valc) elimin_ultim(prim,ultim);
- if (prim->inf==valc&&prim->dr==NULL)
- {
- delete prim;
- prim=NULL;
- }
- else
- if (prim->inf==valc)
- elimin_prim(prim,ultim);
- }
- }
- void modific_pozk(nod *&prim,nod *&ultim)
- {
- int k,i;
- nod *p;
- cout<<"Pozitia elementului este: ";
- cin>>k;
- if (k==1)
- prim->inf=909;
- else
- {
- p=prim;
- for (i=1; i<k; i++)
- {
- p=p->dr;
- if (p==NULL) break;
- }
- if (p==NULL) cout<<"Noduri insuficiente";
- else
- p->inf=909;
- }
- }
- void modific_inf(nod *&prim,nod*&ultim)
- {
- int valc;
- nod*p=prim;
- cout<<"Valoarea cautata este: ";
- cin>>valc;
- while (p)
- {
- if (p->inf==valc) p->inf=1052016;
- p=p->dr;
- }
- }
- void permutare_st(nod *&prim,nod*&ultim)
- {
- nod *q,*p;
- int k,i;
- cout<<"Numarul de noduri cu care se va permuta este: ";
- cin>>k;
- for (i=1; i<=k; i++)
- {
- q=new(nod);
- p=prim;
- q->inf=p->inf;
- ultim->dr=q;
- q->st=ultim;
- q->dr=NULL;
- ultim=q;
- prim=p->dr;
- prim->st=NULL;
- delete(p);
- }
- }
- void permutare_dr (nod *&prim, nod*&ultim)
- {
- nod *p,*q;
- int k,i;
- cout<<"Numarul de noduri cu care se va permuta este: ";
- cin>>k;
- for (i=1; i<=k; i++)
- {
- q=new(nod);
- q->inf=ultim->inf;
- prim->st=q;
- q->dr=prim;
- prim=q;
- p=ultim;
- ultim=ultim->st;
- ultim->dr=NULL;
- delete (p);
- }
- }
- void interchimbare_adrese(nod*&prim,nod*&ultim)
- {
- nod *p,*q,*t;
- q=prim;
- t=ultim->st;
- p=q->dr;
- q->st=ultim;
- ultim->dr=p;
- prim=ultim;
- prim->st=NULL;
- q->st=t;
- t->dr=q;
- ultim=q;
- ultim->dr=NULL;
- }
- void sortare (nod *&prim,nod *&ultim)
- {
- int ok,aux;
- nod *p;
- ok=1;
- while (ok)
- {
- ok=0;
- p=prim;
- while (p->dr)
- {
- if (p->inf>p->dr->inf)
- {
- aux=p->inf;
- p->inf=p->dr->inf;
- p->dr->inf=aux;
- ok=1;
- }
- p=p->dr;
- }
- }
- }
- void afisinv(nod *&prim,nod*&ultim)
- {
- nod *p=ultim;
- while (p)
- {
- cout<<p->inf<<" ";
- p=p->st;
- }
- cout<<endl;
- }
- void afis (nod*&prim,nod*&ultim)
- {
- nod *p=prim;
- if (prim==NULL) cout<<"LV";
- else
- while (p)
- {
- cout<<p->inf<<" ";
- p=p->dr;
- }
- cout<<endl;
- }
- int main()
- {
- int caz,ok;
- char a;
- cout << "*Cum doriti sa se creeze lista?*"<<endl;
- cout<<"a)in ordinea citirii."<<endl;
- cout<<"b)in ordine inversa citirii. "<<endl;
- cin>>a;
- if (a=='a') creare(prim,ultim);
- else if (a=='b') creareinv(prim,ultim);
- cout<<endl;
- cout << "*Cum doriti sa se afiseze lista?*"<<endl;
- cout<<"a)in ordinea citirii."<<endl;
- cout<<"b)in ordine inversa citirii. "<<endl;
- cin>>a;
- if (a=='a') ok=1;
- else if (a=='b') ok=0;
- cout<<endl;
- cout<<"****Lista de operatii:****"<<endl;
- cout<<" 1)Adaugarea unui nod pe prima pozitie"<<endl;
- cout<<" 2)Adaugarea unui nod pe ultima pozitie"<<endl;
- cout<<" 3)Adaugarea unui nod pe pozitia k"<<endl;
- cout<<" 4)Adaugarea unui nod dupa un nod cu o anumita informatie"<<endl;
- cout<<" 5)Adaugarea unui nod inaintea unui nod cu o anumita informatie"<<endl;
- cout<<" 6)Stergerea nodului de pe prima pozitie"<<endl;
- cout<<" 7)Stergerea nodului de pe ultima pozitie"<<endl;
- cout<<" 8)Stergerea nodului de pe pozitia k"<<endl;
- cout<<" 9)Stergerea nodurilor cu o anumita informatie"<<endl;
- cout<<"10)Modificarea informatiei nodului de pe pozitia k"<<endl;
- cout<<"11)Modificarea anumitei informatii din lista"<<endl;
- cout<<"12)Deplasarea primelor k noduri la final"<<endl;
- cout<<"13)Permutarea elementelor cu k pozitii la dreapta"<<endl;
- cout<<"14)Interschimbarea adreselor a 2 noduri (primul si ultimul)"<<endl;
- cout<<"15)Sortarea informatiilor in ordine crescatoare"<<endl;
- cout<<endl;
- cout<<"Dati numarul operatiei: ";
- cin >> caz;
- cout<<endl;
- cout<<"Lista creata este: "<<endl;
- afis(prim,ultim);
- cout<<endl;
- do
- {
- switch (caz)
- {
- case 1:
- add_prim(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 2:
- add_ultim(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 3:
- add_k(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 4:
- add_dupaval(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 5:
- add_inainte(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 6:
- elimin_prim(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 7:
- elimin_ultim(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 8:
- elimin_k(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 9:
- elimin_val(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 10:
- modific_pozk(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 11:
- modific_inf(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 12:
- permutare_st(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 13:
- permutare_dr(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 14:
- interchimbare_adrese(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- case 15:
- sortare(prim,ultim);
- if (ok) afis(prim,ultim);
- else afisinv(prim,ultim);
- break;
- }
- cout<<endl;
- cout<<"Dati numarul operatiei: ";
- cin >> caz;
- }while (caz);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement