Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dołączanie elementu do listy po elemencie o zadanie wartości

Ostatnio zmodyfikowano 2017-02-11 00:38
Autor Wiadomość
xorb89
Temat założony przez niniejszego użytkownika
[C++] Dołączanie elementu do listy po elemencie o zadanie wartości
» 2017-02-10 23:27:01
Witam,
do podanego programu mam dołączyć możliwość dodania elementu do listy po elemencie o danej wartości i kompletnie nie wiem jak mam to zrobić. Byłbym wdzięczny za każdą pomoc.

Program:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

struct element_listy
{
    int liczba;
    element_listy * nastepny;
};

element_listy * usun_element( element_listy * glowa, int wartosc )
{
    element_listy * tmp = glowa;
    element_listy * poprzedni = glowa;
    while( tmp != NULL )
    {
        if( tmp->liczba == wartosc )
        if( tmp == glowa )
        {
            glowa = glowa->nastepny;
            delete tmp;
            tmp = glowa;
            poprzedni = glowa;
        }
        else
        {
            poprzedni->nastepny = tmp->nastepny;
            delete tmp;
            tmp = poprzedni->nastepny;
        }
        else
        {
            poprzedni = tmp;
            tmp = tmp->nastepny;
        }
    }
    return glowa;
}

//----------
int main()
{
    element_listy * glowa = NULL;
    element_listy * ogon = NULL;
    element_listy * nowy;
    char odp;
    int d;
   
    cout << "Czy chcesz podac element listy? t/n: ";
    cin >> odp;
    while( odp != 'n' )
    {
        cout << "Podaj dane: ";
        cin >> d;
        try
        {
            nowy = new element_listy;
        }
        catch( bad_alloc )
        {
            cout << "Nie ma juz miejsca na nastepny element";
            break;
        }
        nowy->nastepny = NULL;
        nowy->liczba = d;
        if( glowa == NULL )
        {
            glowa = nowy;
            ogon = glowa;
        }
        else
        {
            ogon->nastepny = nowy;
            ogon = nowy;
        }
       
        cout << "Chcesz podac kolejny element listy? t/n: ";
        cin >> odp;
    }
   
    element_listy * tmp = glowa;
    cout << "Oto utworzona przez ciebie lista:\n";
    while( tmp != NULL )
    {
        cout << tmp->liczba << " ";
        tmp = tmp->nastepny;
    }
   
    cout << "Czy usunac elementy? t/n: ";
    cin >> odp;
    if( odp == 't' )
    {
        cout << "Jakie dane usunac? ";
        cin >> d;
        glowa = usun_element( glowa, d );
    }
   
    //usuwanie listy
    while( glowa != NULL )
    {
        tmp = glowa;
        glowa = glowa->nastepny;
        delete tmp;
    }
   
    return 0;
}
P-157590
pekfos
» 2017-02-10 23:36:15
A umiesz wstawić element w środek listy? Od tego już prosto.
P-157591
xorb89
Temat założony przez niniejszego użytkownika
» 2017-02-10 23:55:26
Na razie umiem wstawiać kolejne, do środka nie zabardzo
P-157593
Nazgul
» 2017-02-11 00:38:08
Wstawienie elementu do środka listy
masz sobie listę

A->B->C->D->E->F->G

(strzałeczka oznacza, że element trzyma wskaźnik na ten element na który wskazuje;D)

do tego masz wskaźnik na element D.

to możesz sobie wstawić element Y w taki sposób że uzyskasz:
A->B->C->D->Y->E->F->G

wystarczy że zrobisz:
C/C++
Y->nastepny = D->nastepny;
D->nastepny = Y;

to masz algorytm do wstawiania do środka listy

potem sobie robisz wyszukiwanie
czyli zaczynasz od głowy:
C/C++
int wartosc;
cin >> wartosc;
element_listy * sprawdzany = glowa;
while( sprawdzany != NULL )
{
    if( sprawdzany->liczba == wartosc )
    {
        //........uzupelnij sobie tym algorytmem do wstawiania do srodka
        break;
    }
    sprawdzany = sprawdzany->nastepny;
}
//EDIT (źle wpisałęm operator ("=", a powinno być "==")) jak coś to już poprawiłem;)
P-157596
« 1 »
  Strona 1 z 1