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

Dodawanie elementu do listy jednokierunkowej przez funkcję

Ostatnio zmodyfikowano 2017-06-09 00:45
Autor Wiadomość
ws89
Temat założony przez niniejszego użytkownika
Dodawanie elementu do listy jednokierunkowej przez funkcję
» 2017-02-07 22:04:13
Witam,

Chciałbym dodać element do listy jednokierunkowej używając do tego funkcji.
Niestety mój program zamiast dodawać kilka elementów po sobie, nadpisuje za każdym razem drugi element na liście.
Proszę o wskazówki, a najlepiej rozwiązanie z objaśnieniem :)

C/C++
#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>

using namespace std;

struct SElement
{
    string nazwa;
    double cena;
    SElement * nast;
};

void pisz( SElement * adres )
{
    while( adres )
    {
        cout << "nazwa towaru " << adres->nazwa << endl;
        cout << "cena towaru " << adres->cena << endl;
        cout << endl;
       
        adres = adres->nast;
    };
};

void dodajelement( SElement * adres, ifstream * nazwa )
{
    SElement * aktualny;
   
    aktualny = new SElement;
    * nazwa >> aktualny->nazwa;
    * nazwa >> aktualny->cena;
    aktualny->nast = NULL;
    adres->nast = aktualny;
    adres = aktualny;
   
   
};

int main( int argc, char * argv[] )
{
    SElement * glowa, * aktualny, * ogon;
    char wybor;
   
   
    ifstream dane;
    string nazwa;
    int licznik;
   
    do
    {
        cout << "Z jakiego pliku wczytywac dane?\n";
        cin >> nazwa;
       
        dane.open( nazwa.c_str() );
        if( !dane.good() )
        {
            cerr << "Problem z otwarciem pliku " << nazwa << endl;
           
        };
    } while( !dane.good() );
   
    cout << "Stworzyc liste z danych w pliku ? t/n \n";
    cin >> wybor;
   
    if( wybor == 't' )
    {
        glowa = new SElement;
        dane >> glowa->nazwa;
        dane >> glowa->cena;
        glowa->nast = NULL;
        ogon = glowa;
       
        cout << "Dodac element do listy ? t/n \n";
        cin >> wybor;
       
        if( wybor == 't' )
             licznik = 1;
       
        while( wybor == 't' )
        {
            dodajelement( *& ogon, & dane );
            licznik++;
           
            cout << "Dodac " << licznik + 1 << " element t/n ? \n";
            cin >> wybor;
        };
       
       
       
       
       
       
       
    }
    else
    {
        cout << "Koniec programu";
        exit( 1 );
    };
   
   
   
   
   
    pisz( glowa );
   
   
   
   
    system( "pause" );
    return 0;
}

P-157454
1aam2am1
» 2017-02-08 01:41:14
1. W funkcji dodaje element tracisz wskaźnik na następny element.
2. Przypisanie aktualny do adres jest robione na wskaźniki tymczasowym.

Rozwiązanie na szybko:
C/C++
aktualny->nast = adres->nast;
adres->nast = aktualny;
P-157459
ws89
Temat założony przez niniejszego użytkownika
» 2017-06-09 00:17:58
Dziękuję, dodawanie do listy działa. A w jaki sposób napisać funkcję tak żeby dołączać elementy na końcu listy ?
P-162277
carlosmay
» 2017-06-09 00:45:12
Przewijaj listę, aż do momentu gdy
aktualny->nast
 będzie pusty
i w to miejsce dodaj nowy element.
Najlepiej opakuj listę w strukturę.
C/C++
struct SLista {
    SElement * start;
    // itd
};
P-162279
« 1 »
  Strona 1 z 1