Pereiti prie turinio

Iš vienakrypčio į dvikryptį tiesinį sąrašą


Rekomenduojami pranešimai

Sveiki, gan sunkiai sekėsi parašyti vienakryptį tiesinį sąrašą, tačiau dabar jį reikia perdaryti į dvikrypti. Žinau, kad reikia sukūrti dar veiną rodyklę " *prev ", tačiau nežinau, kur būtent poto ją dėti. Gal kas nors turi laisvo laiko ir galėtų pagelbėti? Ačiū.

Kodas:

#include <iostream>
using namespace std;
struct elementas
{
   int data;
   elementas *next;
};
int main()
{
   int n;
   elementas *pirmas;
   elementas *naujas;
   elementas *galas;
   naujas = new elementas;
   naujas->data=1;
   pirmas=naujas;
   galas=naujas;
   cout << "Kiek elementu bus sarase? ";
   cin >> n;
   for(int i=1; i<n; i++)
   {
       naujas = new elementas;
       naujas->data=i+1;
       galas->next=naujas;
       galas=naujas;
       galas->next=NULL;
   }
   cout << "Elementai: ";
   naujas=pirmas;
   while(naujas!=NULL)
   {
       cout << naujas->data << " ";
       naujas=naujas->next;
   }
   cout << endl;
   int funkcija;
   cout << "*******************************" << endl;
   cout << "1. Elemento iterpimas i pradzia" << endl;
   cout << "-------------------------------" << endl;
   cout << "2. Elemento iterpimas i gala" << endl;
   cout << "-------------------------------" << endl;
   cout << "3. Tiesinio saraso spausdinimas" << endl;
   cout << "-------------------------------" << endl;
   cout << "4. Pirmojo elemento trinimas" << endl;
   cout << "-------------------------------" << endl;
   cout << "5. Paskutinio elemento trinimas" << endl;
   cout << "-------------------------------" << endl;
   cout << "6. Saraso trinimas" << endl;
   cout << "*******************************" << endl;
   cout << "Pasirinkite funkcija: " ;
   cin >> funkcija;


   if(funkcija==1) //Elemento iterpimas i pradzia
   {
       naujas = new elementas;
       naujas->data=1;
       naujas->next=pirmas;
       pirmas=naujas;
       cout << endl<<"Sarasas su naujai iterptu elementu i pradzia: ";
       while(naujas!=NULL)
       {
           cout << naujas->data << " ";
           naujas=naujas->next;
       }
       cout<<endl;
       return 0;
   }
   if (funkcija==2) //Elemento iterpimas i gala
   {
       naujas = new elementas;
       naujas->data=1;
       naujas->next=NULL;
       galas->next=naujas;
       naujas=pirmas;
       cout << endl<<"Sarasas su naujai iterptu elementu i gala: ";
       while(naujas!=NULL)
       {
           cout << naujas->data << " ";
           naujas=naujas->next;

       }
       cout<<endl;
   }
   if(funkcija==3) //Tiesinio saraso spausdinimas
   {
       cout << endl<<"Elementai: ";
       naujas=pirmas;
       while(naujas!=NULL)
       {
           cout << naujas->data << " ";
           naujas=naujas->next;
       }
       cout << endl;
   }
   if(funkcija==4) //Pirmojo elemento trinimas
   {
       naujas=pirmas;
       pirmas=pirmas->next;
       free(naujas);
       cout << endl<<"Elementai: ";
       naujas=pirmas;
       while(naujas!=NULL)
       {
           cout << naujas->data << " ";
           naujas=naujas->next;
       }
       cout << endl;
   }
   if(funkcija==5) //Paskutinio elemento trinimas
   {

   }
   if(funkcija==6) //Saraso trinimas
   {
       pirmas=naujas;
       while(naujas!=0)
       {
           pirmas=naujas->next;
           delete naujas;
           naujas=pirmas;
       }
       cout << endl<<"Elementai: ";
       naujas=pirmas;
       while(naujas!=NULL)
       {
           cout << naujas->data << " ";
           naujas=naujas->next;
       }
       cout << endl;
   }
   if(funkcija>6)
   {
       cout <<endl<< "Tokios funkcijos nera!" <<endl;
   }
}

Redagavo Girtek
Nuoroda į pranešimą
Dalintis kituose puslapiuose

   struct elementas
   {
       int data;
       elementas *next;
       [b]elementas *prev;[/b]
   };
...........

   naujas = new elementas;
   naujas->data=1;
   pirmas=naujas;
   galas=naujas;
   [b]pirmas->next=galas;
   galas->prev=pirmas;[/b]
   cout << "Kiek elementu bus sarase? ";


........


   for(int i=1; i<n; i++)
   {
       naujas = new elementas;
       naujas->data=i+1;
       galas->next=naujas;
       [b]naujas->prev=galas;[/b]
       galas=naujas;
       galas->next=NULL;
   }

....

   if(funkcija==1) //Elemento iterpimas i pradzia
   {
       naujas = new elementas;
       naujas->data=1;
       naujas->next=pirmas;
       [b]pirmas->prev=naujas;[/b]
       pirmas=naujas;
       cout << endl<<"Sarasas su naujai iterptu elementu i pradzia: ";
       while(naujas!=NULL)
       {
           cout << naujas->data << " ";
           naujas=naujas->next;
       }
       cout<<endl;
       return 0;
   }
if (funkcija==2) //Elemento iterpimas i gala
   {
       naujas = new elementas;
       naujas->data=1;
       naujas->next=NULL;
       [b]naujas->prev=galas[/b]
       galas->next=naujas;
       naujas=pirmas;
       cout << endl<<"Sarasas su naujai iterptu elementu i gala: ";
       while(naujas!=NULL)
       {
           cout << naujas->data << " ";
           naujas=naujas->next;

       }
       cout<<endl;
   }
   if(funkcija==3) //Tiesinio saraso spausdinimas
   {
       cout << endl<<"Elementai: ";
       naujas=pirmas;
       while(naujas!=NULL)
       {
           cout << naujas->data << " ";
           naujas=naujas->next;
       }
       cout << endl;
   }
   if(funkcija==4) //Pirmojo elemento trinimas
   {
       naujas=pirmas;
       pirmas=pirmas->next;
      [b]pirmas->prev=NULL[/b]
       free(naujas);
       cout << endl<<"Elementai: ";
       naujas=pirmas;
       while(naujas!=NULL)
       {
           cout << naujas->data << " ";
           naujas=naujas->next;
       }
       cout << endl;
   }
   if(funkcija==5) //Paskutinio elemento trinimas
   {
        [b]naujas=galas;
        galas=galas->prev;
        galas->next=NULL;
        free(naujas)[/b]
   }
   if(funkcija==6) //Saraso trinimas
   {
       pirmas=naujas;
       while(naujas!=0) [b]Nesu tikras del cpp, bet neturetum lyginti su null? 'naujas!=NULL' ?[/b]
       {
           pirmas=naujas->next;
           delete naujas;
           naujas=pirmas;
       }
       cout << endl<<"Elementai: ";
       naujas=pirmas;
       while(naujas!=NULL)
       {
           cout << naujas->data << " ";
           naujas=naujas->next;
       }
       cout << endl;
   }

 

Nelabai turiu patirties su cpp, bet is idejos kazkas tokio lygtais.

 

Padeda tiesiog turetu kazka vizualaus, kuris vizualizuotu kaip atrodo ta duomenu struktura, pvz 1*92uL4rbcoVNErS72qzFw-g.png

Tada gan aiskiau buna kokius relations (rodykles) reikia panaikinti.

 

Keleta siaip komentaru/pastebejimu:

- Daug kas kartojasi, nemazai functionality gali refactorinti i funkcijas (`spausdintiSarasa(Elementas pirmas)` ir pns.)

- Nezinau ar universitete jums liepia, bet paprastai nera gera ideja naudoti kita kalba kaip anglu programuojant.

 

Edit: Ka tik supratau kad tag'ai neveikia tarp

 tag'u, norejau paryskinti mano pakeitimus, dabar jie tiesiog apsupti [b] tag'u
Redagavo Gruzlys
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...