Lista jednokierunkowa
Ostatnio zmodyfikowano 2013-01-16 19:41
rooker Temat założony przez niniejszego użytkownika |
Lista jednokierunkowa » 2013-01-13 17:03:55 Napisalem liste ktora wczytuje liczby az do napotkania 0(proszę o sprawdzenie), wspieralem sie troche notatkami wiec chcialem zapytac co wlasciwie oznacza ta linijka kodu: aktualny->nastepny=NULL; , wiem ze to oznacza ze wskaznik bedzie pokazywal wtedy na nic, ale po co to robic? struct el { int dane; el * nastepny; };
int main() { el * glowa, * aktualny, * ogon; int n; glowa = NULL; aktualny = NULL; do { cin >> n; aktualny = new el; ogon = aktualny; aktualny->dane = n; aktualny->nastepny = NULL; if( ogon == NULL ) { glowa = aktualny; } else { ogon->nastepny = aktualny; } } while( n != 0 ); return 0; } |
|
jsc |
» 2013-01-13 17:52:56 Gdyby tak nie było to w wskaźniku byłyby śmiecie, które pokazywałyby, że następny element jest gdzieś tam, co gwarantuje katastrofę. |
|
rooker Temat założony przez niniejszego użytkownika |
» 2013-01-13 18:01:25 Dobra na wstępie dodam że czytałem dużo o listach jednokierunkowych ale jest to dla mnie dość trudne więc mam problemy. Mam napisać program, który tworzy listę dynamiczną elementów o strukturze el wczytując od użytkownika liczby całkowite dopóki nie pojawi się 0 i drukuje to listę. Zrobiłem coś takiego, ale wyskakują jakieś błędy więc proszę o pomoc. #include <iostream>
using namespace std; struct el { int dane; el * nastepny; }; el * utworzliste() { el * glowa, * aktualny, * ogon; int n; glowa = NULL; aktualny = NULL; cout << "wprowadz" << endl; do { cin >> n; aktualny = new el; ogon = aktualny; aktualny->dane = n; aktualny->nastepny = NULL; if( ogon == NULL ) { glowa = aktualny; } else { ogon->nastepny = aktualny; } } while( n != 0 ); return glowa; } void drukuj( el * adres ) { do { cout << adres->dane << " "; adres = adres->nastepny; } while( adres != NULL ); }
int main() { el * glowa; glowa = utworzliste(); drukuj( glowa ); return 0; } |
|
jsc |
» 2013-01-13 20:05:48 A co dokładniej wyskakuje. |
|
Admixior |
» 2013-01-13 21:06:37 uno: do ogona nie przypisujesz nulla więc zera więc: if( ogon == NULL ) nigdy się nie spełni duo: przed tym warunkiem masz aktualny = new el; ogon = aktualny; zastanów się nad sensem tych instrukcji i zamianą. W skrócie w złym miejscu dałeś if i nie inicjalizowałeś zmiennej ogon el * utworzliste() { el * glowa, * aktualny, * ogon; int n; glowa = NULL; aktualny = NULL; ogon NULL; cout << "wprowadz" << endl; do { cin >> n; aktualny = new el; if( glowa == NULL ) glowa = aktualny; else ogon->nastepny = aktualny; ogon = aktualny; aktualny->dane = n; aktualny->nastepny = NULL; } while( n != 0 ); return glowa; }
|
|
rooker Temat założony przez niniejszego użytkownika |
» 2013-01-13 23:37:50 dzięki wielkie, właśnie też mi się coś nie zgadzało, ale tak miałem gdzieś w notatkach więc wbijałem sobie do głowy że jest ok. |
|
rooker Temat założony przez niniejszego użytkownika |
» 2013-01-16 17:49:05 Nie rozumiem tylko tego,że jak po if daje intrukcje w klamry i po else równieź to pojawiają się błędy o co chodzi?? |
|
RazzorFlame |
» 2013-01-16 18:34:33 Podaj kod z tym "if,else". Możesz miec coś źle a my się domyślać nie będziemy. |
|
« 1 » 2 |