Dodawanie elementów do listy powiazanej

0

Witam,

Od kilku godzin mecze się z programem. Ma on zapisywać użytkownikom informacje kiedy ostatnio rozmawiali ze swoimi znajomymi. Uzytkownicy powinni mieć możliwość dodawania nowych znajomych( ilu tylko chcą ) oraz przechowywania liczby dni, które uplynely od czasu rozmowy z danych znajomym. W programie powinna być także opcja aktualizacji przechowywanej liczby dni od czasu ostatniej rozmowy ze znajomym. Cala lista znajomych i przechowywanych dni od ostatniej rozmowy z nimi powinny być wyświetlone w postaci tabeli posortowanej na podstawie ostatniego kontaktu ze znajomymi. Na razie główny problem polega na tym, że jestem w stanie wyświetlić jedynie dane o ostatnio dodanym użytkowniku za pomocą listy powiazanej. W skrócie chcę stworzyć liste powiazana przechowującą wszystkich znajomych i liczbe dni upływających od ostatniego kontaktu z nimi oraz to wyswietlic w formie tabeli. Oto kod:

#include <iostream>
#include <cstddef>

using namespace std;

struct FriendInformations
{
    string name;
    int days;
    FriendInformations *p_new_friend;
};

FriendInformations *add_name( FriendInformations *linked_list )
{
    FriendInformations *p_friend_data = new FriendInformations;
    cout << "\nPodaj nazwe uzytkownika, ktorego chcesz dodac: ";
    cin >> p_friend_data->name;
    cout << "\nDodano uzytkownika. \n";
    p_friend_data->p_new_friend = linked_list;
    return p_friend_data;
}

FriendInformations *actualize_days( FriendInformations *p_friend_data, string *input_name, int *input_days )
{
    cout << "Podaj nazwe znajomego, ktorego chcesz zaktualizowac liczbe dni plynacych od waszej ostatniej rozmowy: ";
    cin >> *input_name;
    cout << "Podaj nowa liczbe dni plynacych od ostatniej rozmowy z powyzszym znajomym: ";
    cin >> *input_days;
    if ( *input_name == p_friend_data->name && *input_days >= 0 )
    {
        p_friend_data->days = *input_days;
        cout << "\nZaktualizowano dane o uzytkowniku. ";
    }
    else
    {
        cout << "\nKtores z wprowadzonych przez Ciebie danych jest niepoprawne. ";
    }
    return p_friend_data;
}

FriendInformations *display_friends_and_days( FriendInformations *p_friend_data )
{
    cout << p_friend_data->name;
    cout << p_friend_data->days;
}

int main()
{
    FriendInformations *next_friend;
    FriendInformations *linked_list;
    int choice;
    int input_days;
    string input_name;
    while ( choice != 0 )
    {
        cout << "\n0-wyjscie";
        cout << "\n1-wyswietl liste znajomych i liczbe dni uplywajacych od waszej ostatniej rozmowy";
        cout << "\n2-dodaj uzytkownika do twoich znajomych";
        cout << "\n3-zaktualizuj liczbe dni uplywajacych od ostatniej rozmowy z danym znajomym";
        cout << "\n\nWybierasz: ";
        cin >> choice;
        switch ( choice )
        {
            case 0:
                return 0;
            case 1:
                display_friends_and_days( linked_list );
                break;
            case 2:
                linked_list = add_name( linked_list );
                break;
            case 3:
                actualize_days( linked_list, &input_name, &input_days );
                break;
            default:
                cout << "\nNiepoprawny wybor. ";
        }
    }
}
0

Tak, bo Twoja funkcja display_friends_and_days wyświetla tylko zawartość głowy.

0

No dobra już poprawiłem ta funkcje, aby wyswietlala wszystkich uzytkownikow i liczbe dni po kolei. Jednak teraz mam problem z posortowaniem tej listy według ostatniego kontaktu z użytkownikiem, a w książce i w internecie nie mogę znaleźć odpowiednich przykładów, które miałyby mi pomoc w rozwiązaniu tego zadania. Na razie funkcja wygląda tak

FriendInformations *display_friends_and_days( FriendInformations *linked_list )
{
    while ( linked_list != NULL )
    {
        cout << linked_list->name << ": " << linked_list->days << '\n';
        linked_list = linked_list->p_new_friend;
    }
}
0

"a w książce i w internecie nie mogę znaleźć odpowiednich przykładów, które miałyby mi pomoc w rozwiązaniu tego zadania"
Żartujesz? https://duckduckgo.com/?q=sort+linked+list+c%2B%2B&t=canonical&ia=web

0

No dobra, chodzilo mi o to, ze nie moglem zrozumiec kodu bez wglebienia sie w niego, ale teraz juz chyba wiem o co chodzi. Aktualny problem polega na odpowiednim wyswietleniu tej listy. Nie wiem w jaki sposób mam przypisac zmienne do glowy, aby wszystko wyswietlalo sie prawidlowo. Prosze tylko odpowiedzi w postaci przykladowego kodu. Z gory dzieki.

    for ( current = linked_list; current != NULL; current = current->p_new_friend )
    {
        for ( next = current->p_new_friend; next != NULL; next = next->p_new_friend )
        {
            if ( current->days > next->days )
            {
                swap( current, next );
            }
        }
    }
    while ( linked_list != NULL )
    {
       cout << '\n' << linked_list->name << ": " << linked_list->days;
       linked_list = linked_list->p_new_friend;
    }
0
void printList(FriendInformations * head) {
	FriendInformations * tmp = head;
	while (tmp) {
		std::cout << tmp->name << " " << tmp->days;
		tmp = tmp->p_new_friend;
	}
	std::cout <<"\n";
}

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