Dodawanie elementu do listy jednokierunkowej przez funkcję
Ostatnio zmodyfikowano 2017-06-09 00:45
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 :) #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; }
|
|
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: aktualny->nast = adres->nast; adres->nast = aktualny;
|
|
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 ? |
|
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ę. struct SLista { SElement * start; }; |
|
« 1 » |