Dodawanie do uporządkowanej listy

0

Mam za zadanie napisać dodawanie do listy elementów tak, żeby od razu elementy dodawane były we właściwym miejscu. Lista ma zawierać zmienne typu Country posortowane pod względem liczby ludności. Kiedy napisałam ten sam program na liczbach zamiast danych typu Country działał poprawnie, a teraz po wprowadzeniu danych przerywa wykonanie. Nie wiem na czym może polegać mój błąd?

#include <iostream>
#include <string>

using namespace std;

struct Country
{
    string kraj;
    string kontynent;
    int ludnosc;
};

struct lista                      
{
    lista * next;
    Country data;
};

lista *add_to_list(lista *first, Country data) //dodaje wartosc na poczatek listy
{
    lista *wsk = new lista;
    wsk->data = data;
    wsk->next = first;

    return wsk;
}


std::istream& operator >> (std::istream& stream, Country &p) {
    stream >> p.kraj >> p.kontynent >> p.ludnosc;
    return stream;
}

std::ostream& operator << (std::ostream& stream, Country &p)
{
    stream << "Kontynent: " << p.kontynent << " Kraj: " << p.kraj << " Liczba ludnosci: " << p.ludnosc;
    return stream;
}

int main()
{
    lista * first;                       // wskaźnik początku listy
    lista * nowy, *p;                  // wskaźniki elementów listy
    int n;                             // liczba elementów do posortowania
    Country v;                             // wartość elementu

    first = new lista;                   // tworzymy pierwszego strażnika
    first->next = new lista;             // tworzymy drugiego strażnika
    first->next->next = NULL;              // drugi strażnik jest ostatni na liście
    first->next->data.ludnosc = 0;        // wartość drugiego strażnika
    //first->next->data.kraj = '000';
    //first->next->data.kontynent = '0000';

    cin >> n;                          // odczytujemy liczbę elementów

    for (int i = 0; i < n; i++)
    {
        cin >> v;                        // czytamy element
        // szukamy miejsca wstawienia
        if (i == 0)
        {
            first = add_to_list(first, v);
        }
        else
        {
            for (p = first; (v.ludnosc) > (p->next->data.ludnosc); p = p->next)
            {
                nowy = new lista;                 // tworzymy nowy element

                nowy->data = v;                     // inicjujemy element
                nowy->next = p->next;

                p->next = nowy;
            }
            // element wstawiamy do listy
        }
    }

    for (p = first->next; p->next; p = p->next) cout << p->data << " ";

    cout << endl;

system("pause");
return 0;
} 
1

Problem najprawdopodobniej jest w for znajdującym się  w else w funkcji main. Chyba nie tak jak powinno sprawdza dane i tam się zapętla.

1 użytkowników online, w tym zalogowanych: 0, gości: 1