Guest User

Untitled

a guest
Oct 23rd, 2017
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.12 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <fstream>
  4. #include <string>
  5. using namespace std;
  6. struct Tnodo {
  7.    int info;      
  8.    Tnodo *next;
  9.    };
  10.  
  11. typedef Tnodo* Pnodo;
  12. void costruisci(Pnodo &);
  13. bool ricerca(int, Pnodo);
  14. Pnodo instesta(Pnodo, int);
  15. void creanodo(Pnodo &, int);
  16. void sposta(Pnodo &,Pnodo &, Pnodo &);
  17. void cancella(int, Pnodo &);
  18. void inserisciNodoCoda (int,Pnodo &);
  19. void stampa(Pnodo);
  20. int main(){
  21.         int info;Pnodo L3;
  22.     Pnodo L=NULL;
  23.     Pnodo temp;
  24.     cout<<"Inserisci il nodo "<<endl;
  25.     cin>>info;
  26.     creanodo(L, info);
  27.         while (info != -1)
  28.         {      cout<<"Inserisci il nodo "<<endl;
  29.         cin>>info;
  30.         if (info != -1)
  31.         inserisciNodoCoda(info, L);
  32.         }
  33.         stampa(L);
  34.         cout<<endl;
  35. Pnodo L2= NULL;
  36.     cout<<"Inserisci il nodo "<<endl;
  37.     cin>>info;
  38.     creanodo(L2, info);
  39.         while (info != -1)
  40.         {      cout<<"Inserisci il nodo "<<endl;
  41.         cin>>info;
  42.         if (info != -1)
  43.         inserisciNodoCoda(info, L2);
  44.         }
  45.         stampa(L2);
  46.         cout<<endl;
  47.         cout<<"Inserisci il nodo "<<endl;
  48.     cin>>info;
  49.     creanodo( L3, info);
  50.         while (info != -1)
  51.         {      cout<<"Inserisci il nodo "<<endl;
  52.         cin>>info;
  53.         if (info != -1)
  54.         inserisciNodoCoda(info, L3);
  55.         }
  56.         stampa(L3);
  57.         cout<<endl;
  58.         stampa(L);cout<<endl; stampa(L2);cout<<endl;stampa(L3);cout<<endl;
  59.         system("pause");
  60.         sposta(L, L2, L3);
  61. stampa(L);
  62. cout<<endl;
  63. stampa(L2);
  64. cout<<endl;
  65. stampa(L3);
  66. system("pause");
  67.    
  68.    
  69. }
  70. void costruisci(Pnodo &L){
  71. int item;
  72. if(L==NULL){
  73.      cout<<"Inserisci il valore che vuoi per la lista: "<<endl;
  74.      cin>>item;
  75.      creanodo(L, item);}
  76.      else
  77.      for(int i=0; i<3; i++){
  78.      cout<<"Inserisci il valore che vuoi per la lista: "<<endl;
  79.      cin>>item;
  80.   inserisciNodoCoda(item,L);}
  81.      }
  82.  
  83.  
  84. Pnodo instesta(Pnodo L, int item){
  85.       Pnodo temp;
  86.       creanodo(temp, item);
  87.       temp->next=L;
  88.       return temp;
  89.       }
  90. void creanodo(Pnodo &L, int item){
  91.      L=new Tnodo;
  92.      L->info=item;
  93.      L->next=NULL;
  94.      }
  95. bool ricerca(int i, Pnodo L){
  96.      if(L==NULL)
  97.      return false;
  98.      else
  99.      if(L->info==i)
  100.      return true;
  101.      else
  102.      return ricerca(i, L->next);
  103.      }
  104. void sposta(Pnodo &L,Pnodo &L2, Pnodo &L3){
  105.     Pnodo aux, aux2, aux3, temp;
  106.     aux = L; // Puntatore alla testa di L1
  107.     aux2 = L2; // Puntatore alla testa di L2
  108.     temp = NULL; // Temp per fare switch e free degli elementi comuni
  109.    
  110.     while (aux != NULL){ //Inizio a scorrere la lista (finché essa non è vuota)
  111.         while (aux2 != NULL){ //Scorro anche la seconda lista, finché anch'essa non è vuota
  112.             if (aux->info != aux2->info) aux2 = aux2->next; // Se il valore di aux (elemento n-esimo della lista L1) non è uguale al valore di aux2 (elemento n-esimo della lista L2), passo al valore successivo della lista L2)
  113.             else {temp=aux;
  114.             aux=aux->next;
  115.             L=aux;
  116.             cancella(temp->info, L2);
  117.             if(L3==NULL){
  118.             creanodo(L3, temp->info );}
  119.               else{
  120.               inserisciNodoCoda ( temp->info,L3);
  121. }
  122.                  } //Sposto val da l1 a l3 e lo elimino da l2
  123.         }
  124.         aux2 = L2; // Ritorno alla testa, così posso riscorrere la coda per controllare se il valore dell'elemento n-esimo+1 di L1 è presente in L2
  125.     if(aux !=NULL)
  126.         aux = aux-> next; // Passo all'elemento successivo di L1 da confrontare in L2
  127.     }
  128.  
  129. }
  130.  
  131. void cancella(int item, Pnodo &L2){
  132.      Pnodo temp;
  133.      if (L2 != NULL){
  134.       if(item == L2->info){
  135.               temp=L2;
  136.               L2=L2->next;
  137.               delete temp;
  138.               }
  139.       else
  140.       cancella(item, L2->next);
  141.       }}
  142. void stampa(Pnodo L){
  143.      while(L != NULL){
  144.      cout<<L->info<<" ";
  145.      L=L->next;
  146.      }}
  147. void inserisciNodoCoda ( int info1,Pnodo &L)  
  148. {// inserisce un nuovo nodo in coda alla lista
  149. Pnodo prec, curr;
  150.   if (L==NULL)
  151.      creanodo(L, info1);
  152.   else  {
  153.         curr=L; prec=NULL;
  154.         while (curr!=NULL) {
  155.         prec=curr;
  156.         curr=curr->next;
  157.       }
  158.       creanodo(prec->next, info1);
  159.   }
  160. }
Add Comment
Please, Sign In to add comment