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

R. 45 - zadanie domowe - ppkt b

Ostatnio zmodyfikowano 2019-07-03 22:07
Autor Wiadomość
oriv
Temat założony przez niniejszego użytkownika
» 2019-07-03 21:56:00
Sugerując się wskazówka do Problemu 3, ze lista nie jest już wskaźnikiem na węzeł listy, wprowadziłem wskaźnik Wezel *wezel
(jest to wskaźnik lista z przykładu do zadania domowego) tylko po to, by wyświetlić wszystkie wprowadzone liczby. Pytanie czy to dobry pomysł? czy da się to rozwiązać za pomocą samej struktury Lista? Kod mi w dalszym ciągu nie działa..
C/C++
#include <iostream>


struct Wezel
{
    Wezel * ogon;
    int liczba;
};
struct Lista
{
    Wezel * poczatek;
    Wezel * koniec;
};
//Utworzenie listy
void utworz( Lista & lista )
{
    lista.poczatek = NULL;
    lista.koniec = NULL;
}

// Wypisz wszystkie elementy listy
void wypisz( Wezel * wezel )
{
    if( wezel ) {
        std::cout << wezel->liczba << ", ";
        wypisz( wezel->ogon );
    }
   
}

// Zwróć: wskaźnik na ostatni element listy
Wezel * ostatni( Wezel * wezel )
{
    // Przechodzenie po liście *iteracyjnie*
    if( wezel )
    while( wezel->ogon )
         wezel = wezel->ogon;
   
    return wezel;
}

// Dodaj element na koniec listy
void dodajKoniec( Lista & lista, Wezel *& wezel, int liczba )
{
    // Tworzymy nowy element listy
    Wezel * nowy = new Wezel;
    nowy->liczba = liczba;
    nowy->ogon = NULL;
   
    // Dopisujemy na koniec
    if( lista.poczatek )
    {
        ostatni( wezel )->ogon = nowy;
        nowy->ogon = nowy;
        lista.koniec = nowy->ogon;
       
    }
    else
    {
        lista.poczatek = nowy;
        wezel = nowy;
    }
   
   
}


// Usuwanie wskaznikow
void zniszcz( Lista & lista, Wezel *& wezel )
{
    while( lista.poczatek )
    {
        delete lista.poczatek;
    }
    while( wezel )
    {
        Wezel * tmp = wezel;
        wezel = wezel->ogon;
        delete tmp;
    }
   
    lista.poczatek = NULL;
    lista.koniec = NULL;
    wezel = NULL;
   
}


int main()
{
    int liczba;
    Lista lista;
    utworz( lista );
    Wezel * wezel = NULL;
   
    std::cout << "Podaj liczby, 0 lub blad konczy:\n";
   
    while( std::cin >> liczba && liczba )
         dodajKoniec( lista, wezel, liczba );
   
    std::cout << "Koniec, oto liczby:\n";
   
    wypisz( wezel );
    zniszcz( lista, wezel );
}
P-174886
pekfos
» 2019-07-03 22:07:02
czy da się to rozwiązać za pomocą samej struktury Lista?
Biorąc pod uwagę, że w poprawnie wykonanym zadaniu wezel jest zawsze równe lista.poczatek - tak, a nawet nie ma sensu robić tego inaczej. Oryginalnie listę opisywał tylko wskaźnik na pierwszy element, Ty bardzo trafnie opisałeś listę osobną strukturą, ale usiłujesz to zrobić obok poprzedniego rozwiązania, a nie zamiast.
P-174887
1 « 2 »
Poprzednia strona Strona 2 z 2