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;
}