Ewal'

Pagalbos su dvikryptčių tiesiniu sąrašu C++

Recommended Posts

Sveiki,
Gal kas galėtumetė padeti su dvikrypčių tiesinių sąrašu? 
Kaip nueiti iki 3 nuo galo elemento ir jį ištrinti arba įterpti i jo vietą naują elementą?
Bandžiau iki 3 nuo galo elemento nueiti taip:

elementas * temp=galas;
temp->data;
temp=temp->prev;
temp->data;
temp=temp->prev;
temp->data;
temp=temp->prev;

Viskas kaip ir ok, spausdina 3 nuo galo elementą, bet negaliu padaryti auksčiau išvardintų veiksmų ;/ gal kas pagelbėtų?

Kodas: 

#include <iostream>
using namespace std;
struct elementas
{
    int data;
    elementas *next;
    elementas *prev;
};
int main()
{
    cout << "Evaldas Kislovskis, IS18A, tiesinis dvikryptis sarasas"<<endl;
    elementas *pirmas;
    elementas *naujas;
    elementas *galas;
    elementas *temp;
    int n;
    cout << "Is kiek elementu bus sudarytas sarasas? ";
    cin >> n;
    naujas = new elementas;
    cout << "Iveskite 1 elementa: ";
    cin >> naujas->data;
    naujas->prev=NULL;
    pirmas=naujas;
    for(int i=1; i<n; i++)
    {
        temp=naujas;
        naujas->next=new elementas;
        naujas=naujas->next;
        cout << "Iveskite " << i+1 << " elementa: ";
        cin >> naujas->data;
        naujas->prev=temp;
    }
    galas=naujas;
    int funkcija;
    while (true)
    {
        cout << endl <<endl;
        cout << "*******************************" << endl;
        cout << "1. Saraso spausdinimas" << endl;
        cout << "-------------------------------" << endl;
        cout << "2. Saraso spausdinimas nuo galo" << endl;
        cout << "-------------------------------" << endl;
        cout << "3. Elemento iterpimas i pradzia" << endl;
        cout << "-------------------------------" << endl;
        cout << "4. Elemento iterpimas i gala" << endl;
        cout << "-------------------------------" << endl;
        cout << "5. Pirmo elemento trinimas" << endl;
        cout << "-------------------------------" << endl;
        cout << "6. Paskutinio elemento trinimas" << endl;
        cout << "-------------------------------" << endl;
        cout << "7. Viso tiesinio saraso istrinimas" << endl;
        cout << "*******************************" << endl << endl;
        cout << "Pasirinkite funkcija: " ;
        cin >> funkcija;
        cout << endl <<endl;
        if(funkcija==1)
        {
            naujas=pirmas;
            for(int i=0; i<n; i++)
            {
                cout << naujas->data << "->";
                naujas=naujas->next;
            }

        }
        if (funkcija==2)
        {
            naujas=galas;
            for(int i=0; i<n; i++)
            {
                cout << naujas->data << "->";
                naujas=naujas->prev;
            }

        }
        if(funkcija==3)
        {
            naujas = pirmas->prev;
            naujas = new elementas;
            naujas->next=pirmas;
            pirmas->prev=naujas;
            pirmas=naujas;
            int iterpiamas;
            cout << "Iveskite elementa kuri norite iterpti: ";
            cin >> iterpiamas;
            pirmas->data=iterpiamas;
            n++;
        }
        if(funkcija==4)
        {
            naujas = galas->next;
            naujas = new elementas;
            galas->next=naujas;
            naujas->prev=galas;
            galas=naujas;
            int iterpiamas;
            cout << "Iveskite elementa kuri norite iterpti: ";
            cin >> iterpiamas;
            galas->data=iterpiamas;
            n++;
        }
        if(funkcija==5)
        {
            naujas=pirmas->next;
            delete(pirmas);
            pirmas=naujas;
            n--;
            cout << "Pirmas elementas istrintas!";
        }
        if(funkcija==6)
        {
            naujas=galas->prev;
            delete(galas);
            galas=naujas;
            n--;
            cout << "Paskutinis elementas pasalintas!";
        }
        if(funkcija==7)
        {
            naujas=pirmas;
            for(int i=0; i<n; i++)
            {
                pirmas=naujas->next;
                delete(naujas);
                naujas=pirmas;
            }
            n=0;
            cout << "Sarasas sekmingai istrintas!";
        }
        if(funkcija==8)
        {
            naujas=pirmas;
            for(int i=0; i<n-3; i++)
            {
                cout << naujas->data << "->";
                naujas=naujas->next;            }
        }
        if(funkcija>7)
        {
            cout <<endl<< "Tokios funkcijos nera!" <<endl;
        }
    }
}

 

Dalintis šį pranešimą


Nuoroda iki šio pranešimo
Dalintis per kitą puslapį

Kadangi angliškai užvadinai struktūros elementus, kodėl ir ne visą programą.

Element* erase( Element* head, const unsigned pos ) {
    Element* temp = head;
    
    for ( unsigned i = 1; pos != i; ++i ) {
        temp = temp->next;
    }
    
    temp->next->prev = temp->prev;
    temp->prev->next = temp->next;
    
    delete temp;
    
    return head;
}

Element* replace( Element* head, const unsigned pos, const int new_data ) {
    Element* temp = head;
    
    for ( unsigned i = 1; pos != i; ++i ) {
        temp = temp->next;
    }
    
    temp->data = new_data;
    
    return head;
}

Gali prisitaikyt pagal mano praeitą atsakymą darydamas šitaip (kur push_back yra iterpti_gale, o print_listspausdinti_sarasa)

#include <iostream>

/* ... */

int main() {
    Element* head = nullptr;
    
    unsigned n;
    std::cin >> n;
    
    for ( unsigned i = 0; n != i; ++i ) {
        head = push_back( head, i );
    }
    
    print_list( head );
    head = replace( head, 2, 900 );
    print_list( head );
    head = erase( head, 3 );
    print_list( head );
    
    return 0;
}

 

Redaguota , nario [m]

Dalintis šį pranešimą


Nuoroda iki šio pranešimo
Dalintis per kitą puslapį

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

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


  • Šiame puslapyje naršo:   0 nariai

    Nėra registruotų narių peržiūrinčių šį forumą.

  • eneba
  • eneba
  • eneba



  • SuperGames programele
  • SuperGames programele