• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wyswietlenie elementow listy jednokierunkowej

0 głosów
46 wizyt
pytanie zadane 19 stycznia w C i C++ przez dzuulie Nowicjusz (120 p.)

Witam!

Mam problem z wyswietleniem listy w menu. Gdy dodaje elementy to ta lista mi sie ladnie pokazuje, ale gdy pozniej chce przejsc do pozycji drugiej - czyli wyświetlanie wszystkich elementów listy, to juz jej nie ma. Bardzo prosze o pomoc! 

#include <iostream>
using namespace std;

struct tListaItem
{
    int dane;
    tListaItem *nastepny;
};

void nowy(tListaItem** glowa, int wartosc)
{
    if (*glowa == NULL)
    {
        *glowa = new tListaItem();
        (*glowa)->nastepny = NULL;
        (*glowa)->dane = wartosc;
    }
    else {
        tListaItem *tmp = *glowa;
        tListaItem *nowy = new tListaItem();
        
        nowy->nastepny = NULL;
        nowy->dane = wartosc;
        
        while (tmp->nastepny)
        {
            tmp = tmp->nastepny;
        }
        tmp->nastepny = nowy;
        
    }
}

void pokaz(tListaItem* glowa)
{
    int element =0;
    while (glowa)
    {
        cout << glowa-> dane << endl;
        element++;
        glowa = glowa->nastepny;
    }
    cout << "Lista ma " << element << " elementow" << endl;
}

int main()
{
poczatek:
    tListaItem *glowa = NULL;
    int a ,liczba;
    char wybor;
    cout << "MENU" << endl;
    cout <<"a. dodawanie elementow na koncu listy \nb. wyswietlenia wszystkich elementow listy \nc. usuniecie dowolnego elementu listy \nd. zakoncz program" << endl;
    cin >> wybor;
    switch(wybor)
    {
        case 'a':
        {
            cout << " Ile chcesz dodac elementow? " << endl;
            cin >> liczba;
            for(int i=0; i<liczba; i++)
            {
                cout << "Podaj" << i <<  "element:" << endl;
                cin >> a;
                nowy(&glowa, a);
                pokaz(glowa);
            }
            break;
        }
        case 'b':
        {
            pokaz(glowa);
            break;
        }
        case 'c':
        {
            
        }
        case 'd':
        {
            exit(0);
            break;
        }
    }

    goto poczatek;
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 20 stycznia przez gagyn Mądrala (5,560 p.)

Problem jest spowodowany tym, że za każdym razem, kiedy przechodzisz na początek, wskaźnik glowa ustawiasz na null, tym samym tracisz dostęp do listy.

tListaItem *glowa = NULL;

Linijka poczatek: musi znajdować się po przypisywaniu wartości null, tak aby nastąpiło to tylko raz - na początku programu.

komentarz 20 stycznia przez Hiskiel Pasjonat (22,880 p.)
To ja może naprostuję - linijka poczatek: i goto poczatek; nie musi i nie może tam być.
komentarz 20 stycznia przez dzuulie Nowicjusz (120 p.)

@gagyn, Faktycznie. Dzięki wielkie!

Podobne pytania

0 głosów
1 odpowiedź 215 wizyt
pytanie zadane 12 maja 2017 w C i C++ przez AndekQR Użytkownik (880 p.)
0 głosów
0 odpowiedzi 78 wizyt
0 głosów
3 odpowiedzi 344 wizyt
pytanie zadane 23 października 2017 w C i C++ przez kris6700 Nowicjusz (220 p.)
Porady nie od parady
Pytania na temat serwisu SPOJ należy zadawać z odpowiednią kategorią dotyczącą tej strony.SPOJ

64,198 zapytań

110,595 odpowiedzi

231,808 komentarzy

46,959 pasjonatów

Przeglądających: 241
Pasjonatów: 22 Gości: 219

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...