Listy jednokierunkowe

0

Stworzyłem listę jednokierunkowa i teraz chciałbym ją posortować niemalejąco, wytłumaczyłby mi ktoś w jaki sposób mógłbym to zrobić?

#include <iostream>
#include <string>
#include <cstdlib>

using namespace std;

struct liczba
{
    int el;
    liczba *nastepna; //wskaznik na nastepny element
    liczba(); //konstruktor
};
liczba::liczba(){ //konstruktor
nastepna = 0;
}
struct lista
{
    liczba *pierwsza; // wskaznik na 1 el listy
    void dodaj_element(int el);
    void usunDuplikaty();
    void usunElement(int nr); // usuwa wybrany element z listy
    lista();
};
lista::lista(){
pierwsza = 0; //konstruktor

}
void lista::dodaj_element(int el)
{
    liczba *nowa = new liczba; // tworzy nowy el listy
    // wypelnia naszymi danymi
    nowa->el=el;
    if(pierwsza==0) // sprawdzamy czy to 1 element listy
    {
        pierwsza = nowa; //jezeli tak to nowy element jest poczatkiem listy
    }
    else
    {
    //w przeciwnym wypadku wedrujemy na koniec listy
        liczba *temp = pierwsza;
    while(temp->nastepna)
    {
        //znajdujemy wskaznik na ostatni element
        temp = temp ->nastepna;// ostatni element wskazuje na nasz nowy
    }
        temp->nastepna = nowa;  // ostatni element wskazuje na nasz nowy
        nowa -> nastepna = 0; // ostatni nie wskazuje na nic
    }
    }

int main()
{
    lista *baza = new lista;  //tworzymy liste
    // dodajemy rekordy do bazy
    baza->dodaj_element(3);
    baza->dodaj_element(2);
    baza->dodaj_element(6);
    baza->dodaj_element(12);
    cout << baza->pierwsza->el << endl;
    cout << baza->pierwsza->nastepna->el << endl;

    delete (baza);
    return 0;
}

0

Dwie metody, które Ci się przydadzą:

bool assertSwap(liczba* first, liczba* second) {
    return first->el > second->el;
}

void swap(liczba* first, liczba* second) {
    int tmp = first->el;
    first->el = second->el;
    second->el = tmp;
}

A kiedy i jak je wykorzystać to już zależy jaki chcesz zaimplementować algorytm sortowania. Nic więcej nie potrzebujesz by rozwiązać to zadanie.

I tak jak napisał @lion137 w komentarzu, zmień tę nazwę struktury liczba na node.

Edit: skoro masz kolejkę FIFO czyli bez dostępu swobodnego do każdego elementu, to polecam algorytm sortowania przez wybieranie.
Edit2: chociaż jeśli tylko masz zamieniać same liczby, a nie całe węzły to możesz równie dobrze to zrobić innym algorytmem

0

Zaimplementuj algorytm sortowania przez scalanie (merge sort).

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