madalinaradu

SD 15.04Liste pare, imp, sterg, inversare

Apr 15th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.57 KB | None | 0 0
  1.  
  2. #include<iostream>
  3. using namespace std;
  4. class Lista {
  5. private:
  6.     typedef struct nod {
  7.         int info;
  8.         struct nod *next;
  9.     } Nod;
  10.  
  11.     Nod* prim;
  12.  
  13. public:
  14.     Lista();
  15.     void adaugare(int x);
  16.     void afisare();
  17.     void suma();
  18.     void stergerePare();
  19.     void inversareLista();
  20. };
  21.  
  22. Lista::Lista() {
  23.     prim=NULL;
  24.  
  25. }
  26.  
  27. void Lista:: adaugare(int x) {
  28.     nod * v;
  29.     v=new nod;
  30.     v->info=x;
  31.     v->next=NULL;
  32.     if(prim==NULL) {
  33.         prim=v;
  34.     } else {
  35.         nod* temp=prim;
  36.         while(temp->next!=NULL) {
  37.             temp=temp->next;
  38.         }
  39.         temp->next=v;
  40.     }
  41. }
  42. void Lista::afisare() {
  43.     nod *temp=prim;
  44.     while(temp!=NULL) {
  45.         cout<<temp->info<<"   ";
  46.         temp=temp->next;
  47.     }
  48.     cout<<endl;
  49. }
  50.  
  51. void Lista::suma(){
  52.     if(prim!=NULL && prim->next!=NULL){
  53.         nod * q,*p;//parcurge lista
  54.         q=prim;
  55.         p=q->next;
  56.         while(p!=NULL){
  57.             nod *temp;// in el se calculeaza suma a 2 elem consecutive;
  58.             temp=new nod;
  59.             temp->info=p->info + q->info;
  60.             temp->next=p;
  61.             q->next=temp;
  62.             q=p;
  63.             p=p->next;
  64.         }
  65.  
  66.     }
  67.  
  68. }
  69.  
  70. void Lista::stergerePare(){
  71.     while(prim!=NULL && prim->info%2==0){
  72.         nod *temp=prim;
  73.         prim=prim->next;
  74.         delete temp;
  75.  
  76.     }
  77.     if(prim!=NULL){
  78.         nod*p=prim;
  79.         nod*q=prim->next;
  80.         while(q!=NULL ){
  81.                 if(q->info%2==0){
  82.                      p->next=q->next;
  83.                     delete q;
  84.                     q=p->next;
  85.                 }else{
  86.                     p=q;
  87.                     q=q->next;
  88.                 }
  89.  
  90.         }
  91.  
  92.     }
  93. }
  94. void Lista::inversareLista(){
  95.     nod *r, *p, *q;
  96.     r=NULL;
  97.     p=prim;
  98.     q=NULL;
  99.  
  100.     while(p!=NULL){
  101.         q=p->next;
  102.         p->next=r;
  103.         r=p;
  104.         p=q;
  105.     }
  106.     prim=r;
  107. }
  108.  
  109.  
  110.  
  111. int main() {
  112.     int n=0;
  113.     Lista pare, impare;
  114.     cout<<"dati n= ";
  115.     cin>>n;
  116.     while(n!=-1){
  117.  
  118.        /* if(n%2==0) {
  119.             pare.adaugare(n);
  120.         } else {
  121.             impare.adaugare(n);
  122.         }*/
  123.         impare.adaugare(n);
  124.         cout<<"dati n= ";
  125.         cin>>n;
  126.     };
  127.  
  128. /*cout<<"Lista pare ";
  129. pare.afisare();*/
  130.  
  131. cout<<"Lista: ";
  132. impare.afisare();
  133.  
  134. //cout<<" Elementele inserate sunt suma a 2 consecutive"<< endl;
  135. //impare.suma();
  136. //impare.afisare();
  137.  
  138. //cout<<"stergere pare  ";
  139. //impare.stergerePare();
  140. //impare.afisare();
  141.  
  142. cout<<"inversare lista   ";
  143. impare.inversareLista();
  144. impare.afisare();
  145.     return 0;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment