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

Lista dwukierunkowa sortowanie

Ostatnio zmodyfikowano 2012-10-27 13:36
Autor Wiadomość
RayTango19
Temat założony przez niniejszego użytkownika
Lista dwukierunkowa sortowanie
» 2012-10-26 17:42:42
Witam wszystkich mam projekt z szeregowania procesów w Unixie. Potrzebuje algorytmu szeregowania listy dwukierunkowej na której są procesy. Zawsze miałem problem z listami .Narysowałem sobie działanie takiego algorytmu i napisałem go.Myślałem że będzie poprawny ,a tu odpala się ale jakiś błąd wyskakuje.Powiesić się można ;d . Oto kod :

C/C++
void sortuj()
{
    priorytet * p, * k, * el1, * el2, * el3, * el4;
    if(( poczatek->next != NULL ) &&( head->next != NULL ) )
    {
       
        for( p = head; p != koniec; p = p->next )
        {
            for( k = p; k != koniec; k = k->next )
            {
                ///jezeli czworka elementow wychodzi poza liste koncz sortowanie
                if(( k->next == koniec ) &&( k->next->next == koniec ) )
                     break;
                /// przypisywanie poszczegolnych elementow kolejki
                el1 = k->prev;
                el2 = k;
                el3 = k->next;
                el4 = el3->next;
                ////czy jest wazniejszy nastepny proces
                ////czy jest wazniejszy nastepny proces
                if( el2->uspri > el3->uspri )
                {
                    //wiem ze niepotrzebne ale na wszelki wypadek je rozdzielilem zeby bylo po kolei
                    el1->next = NULL;
                    el2->prev = NULL;
                    el2->next = NULL;
                    el3->prev = NULL;
                    el3->next = NULL;
                    el4->prev = NULL;
                    */
                    ///łączenie na nowo elementow
                    el3->next = el2;
                    el2->prev = el3;
                    el1->next = el3;
                    el3->prev = el1;
                    el2->next = el4;
                    el4->prev = el2;
                }
            }
        }
    }
P-67556
DejaVu
» 2012-10-26 18:14:09
std::priority_queue i sprawa załatwiona. Co do Twojego algorytmu... utwórz najpierw poprawną listę do której będzie można normalnie dodawać i usuwać elementy. Później zajmij się algorytmem wstawiającym nowy element w środku. Reszta będzie formalnością.
P-67557
Mrovqa
» 2012-10-26 19:06:11
Tak jak powiedział @DejaVu - użyj pojemnika, który od razu sortuje dane - będzie dużo szybciej i wygodniej. W samym STLu masz ich sporo - priority_queue, set, multiset, map, multimap (w standard C++11 się nie zagłębiałem - nie ma go na OI :P). Jeśli zależy Ci na jak najmniejszej złożoności czasowej, to możesz użyć kopca Fibonacciego (nie ma go w STLu).
P-67560
akwes
» 2012-10-26 19:20:39
Jeżeli nie musisz sortować za każdym razem to może std::sort ?
P-67564
crash
» 2012-10-26 20:38:44
Ciekawe jak on powie wykładowcy, że użył standardowego kontenera zamiast napisać samemu algorytm ;p

edit: napisz szkielet listy, to zrobię sortowanie, ale dopiero jutro jakoś z rana bo idę na flaszkę
P-67572
RayTango19
Temat założony przez niniejszego użytkownika
» 2012-10-27 13:36:14
W sumie zapytam się go .Ale zrobię także na kontenerze. Co do mojego tematu .To powiedzcie mi czy w symulatorze Unixa mozna sortowac procesy wg priorytetu ,a potem przydzielać im ten kwant czasu .Bo ja do końca nie wiem jak się za to zabrać.
P-67641
« 1 »
  Strona 1 z 1