Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.47 KB | None | 0 0
  1.  #include<iostream>
  2.     using namespace std;
  3.     typedef struct elem {
  4.                         int info;
  5.                         struct elem *pred,*urm;
  6.                         } element;
  7.     typedef struct {
  8.                     element *st,*cr,*sf;
  9.                     int lung;
  10.                    } dubla;
  11.     dubla L;
  12.     int n;
  13.  
  14.  
  15.     int printme(dubla lista,int direction)
  16.     {
  17.         cout<<endl;
  18.         if (direction==1)
  19.         {
  20.             element *plimb;
  21.             plimb=lista.st;
  22.             while (plimb!=NULL) {
  23.                     cout<<plimb->info<<" ";plimb=plimb->urm;
  24.                                 }
  25.         return 1;
  26.         }
  27.         else
  28.         if (direction==0)
  29.         {
  30.             element *plimb;
  31.             plimb=lista.sf;
  32.             while (plimb!=NULL) {
  33.                     cout<<plimb->info<<" ";plimb=plimb->pred;
  34.                                 }
  35.         return 1;
  36.         }
  37.         else return 0;
  38.     }
  39.  
  40.  
  41.     dubla initlist()
  42.     {
  43.         dubla somelist;
  44.         somelist.lung=0;
  45.         somelist.st=somelist.cr=somelist.sf=NULL;
  46.         return somelist;
  47.  
  48.     }
  49.  
  50.     int isempty(dubla lista)
  51.     {
  52.         return (lista.lung==0);
  53.     }
  54.  
  55.     int foundme(dubla *lista, int valoare)
  56.     {
  57.             element *plimb;
  58.             if (!isempty(*lista))
  59.             {
  60.                 plimb=lista->st;
  61.                 int gasit=0;
  62.                 while ((!gasit)&&(plimb!=NULL))
  63.                 {
  64.                     if (plimb->info==valoare) { gasit=1;}
  65.                     else plimb=plimb->urm;
  66.                 }
  67.                 if (gasit) { lista->cr=plimb; return 1;}
  68.                 else return 0;
  69.             }
  70.             else return 0;
  71.     }
  72.  
  73.  
  74.     dubla addme(dubla lista,int nou,int direction)
  75.     {
  76.         if (direction==1)
  77.         {
  78.         if (!isempty(lista))
  79.               {
  80.                     element *adaugat=new element;
  81.                     adaugat->info=nou;
  82.                     if (lista.cr!=lista.sf)
  83.                                 {
  84.                                  element *stanga,*dreapta;
  85.                                  stanga=lista.cr;
  86.                                  dreapta=lista.cr->urm;
  87.                                  stanga->urm=adaugat;
  88.                                  adaugat->pred=stanga;
  89.                                  adaugat->urm=dreapta;
  90.                                  dreapta->pred=adaugat;
  91.                                  lista.lung++;
  92.                                  lista.cr=adaugat;
  93.                                  return lista;
  94.                                 }
  95.                      else
  96.                      {//curent=sfarsit
  97.                       element *stanga;
  98.                       stanga=lista.cr;
  99.                       stanga->urm=adaugat;
  100.                       adaugat->pred=stanga;
  101.                       adaugat->urm=NULL;
  102.                       lista.cr=adaugat;
  103.                       lista.sf=adaugat;
  104.                       lista.lung++;
  105.                       return lista;
  106.                      }
  107.              }
  108.            else
  109.            { // vida !
  110.                       element *adaugat=new element;
  111.                       adaugat->info=nou;
  112.                       adaugat->pred=NULL;
  113.                       adaugat->urm=NULL;
  114.                       lista.st=lista.cr=lista.sf=adaugat;
  115.                       lista.cr=adaugat;
  116.                       lista.lung++;
  117.                       return lista;
  118.  
  119.            }
  120.         }
  121.         else
  122.         //!!!!!!!
  123.         {// la stanga curentului  !
  124.         if (!isempty(lista))
  125.               {
  126.                     element *adaugat=new element;
  127.                     adaugat->info=nou;
  128.                     if (lista.cr!=lista.sf)
  129.                                 {
  130.                                  element *stanga,*dreapta;
  131.                                  dreapta=lista.cr;
  132.                                  stanga=lista.cr->urm;
  133.                                  dreapta->urm=adaugat;
  134.                                  adaugat->pred=dreapta;
  135.                                  adaugat->urm=stanga;
  136.                                  dreapta->pred=adaugat;
  137.                                  lista.lung++;
  138.                                  lista.cr=adaugat;
  139.                                  return lista;
  140.                                 }
  141.                      else
  142.                      {//curent=sfarsit
  143.                       element *stanga;
  144.                       stanga=lista.cr;
  145.                       stanga->urm=adaugat;
  146.                       adaugat->pred=stanga;
  147.                       adaugat->urm=NULL;
  148.                       lista.cr=adaugat;
  149.                       lista.sf=adaugat;
  150.                       lista.lung++;
  151.                       return lista;
  152.                      }
  153.              }
  154.            else
  155.            { //vida !
  156.                       element *adaugat=new element;
  157.                       adaugat->info=nou;
  158.                       adaugat->pred=NULL;
  159.                       adaugat->urm=NULL;
  160.                       lista.st=lista.cr=lista.sf=adaugat;
  161.                       lista.cr=adaugat;
  162.                       lista.lung++;
  163.                       return lista;
  164.  
  165.            }
  166.         }
  167.     }
  168.  
  169.     dubla delme(dubla lista,int direction)
  170.     {
  171.         if (direction==1)
  172.         {
  173.         element *stanga,*dreapta;
  174.         stanga=lista.cr->pred;
  175.         dreapta=lista.cr->urm;
  176.         delete lista.cr;
  177.         stanga->urm=dreapta;
  178.         dreapta->pred=stanga;
  179.         lista.cr->info=dreapta->info;
  180.         lista.cr->urm=dreapta->urm;
  181.         lista.cr->pred=dreapta->pred;
  182.         lista.lung--;
  183.         return lista;
  184.         }
  185.         else if(L.cr->urm==NULL)
  186.         {
  187.             element *stanga;
  188.             stanga=lista.cr->pred;
  189.             delete lista.cr;
  190.             stanga->urm=NULL;
  191.             lista.cr->urm=stanga->urm;
  192.             lista.cr->info=stanga->info;
  193.             lista.cr->pred=stanga->pred;
  194.             lista.lung--;
  195.             return lista;
  196.         }
  197.         else if(L.cr->pred==NULL)
  198.         {
  199.             element *dreapta;
  200.             dreapta=lista.cr->urm;
  201.             delete lista.cr;
  202.             dreapta->pred=NULL;
  203.             lista.cr->urm=dreapta->urm;
  204.             lista.cr->info=dreapta->info;
  205.             lista.cr->pred=dreapta->pred;
  206.             lista.lung--;
  207.             return lista;
  208.         }
  209.         else
  210.         if (direction==0)
  211.         {
  212.        element *stanga,*dreapta;
  213.         stanga=lista.cr->pred;
  214.         dreapta=lista.cr->urm;
  215.         delete lista.cr;
  216.         stanga->urm=dreapta;
  217.         dreapta->pred=stanga;
  218.         lista.cr->info=stanga->info;
  219.         lista.cr->urm=stanga->urm;
  220.         lista.cr->pred=stanga->pred;
  221.         lista.lung--;
  222.         return lista;
  223.         }
  224.         else return lista;
  225.     }
  226.  
  227.  
  228.     int main()
  229.     {
  230.         int somevalue;
  231.         int right=1;
  232.         int left=0;
  233.         L=initlist();
  234.         cout<<"N=";cin>>n;
  235.         for(int i=1;i<=n;i++) L=addme(L,i,right);
  236.         printme(L,right);
  237.         printme(L,left);
  238.         cout<<" Value = ";cin>>somevalue;
  239.         foundme(&L,somevalue);
  240.  
  241.         cout<<endl<<" Current "<<L.cr->info<<endl;
  242.         printme(L,right);
  243.         printme(L,left);
  244.  
  245.         delme(L,0);
  246.         cout<<endl<<" Current "<<L.cr->info<<endl;
  247.         printme(L,right);
  248.         printme(L,left);
  249.  
  250.         delme(L,0);
  251.         cout<<endl<<" Current "<<L.cr->info<<endl;
  252.         printme(L,right);
  253.         printme(L,left);
  254.  
  255.  
  256.         return 0;
  257.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement