Sortowanie listy jednokieruknowej

Sortowanie listy jednokieruknowej
P0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Witam,

posiadam takowe funkcje dla pascala:

Kopiuj
procedure push(var f:wskaznik; y:string; z:byte);
 var
   prev,p,nowy:wskaznik;
 begin
   new(nowy);
   nowy^.imie:=y;
   nowy^.wynik:=z;
   nowy^.next:=nil;
   //if f^.wynik > z then
     begin
       nowy^.next:=f;
       f:=nowy;
       exit;
     end;

   p:=f;
   while (p^.imie <= y) do
     begin
       prev:=p;
       p:=p^.next;
       if p=nil then
         begin
           prev^.next:=nowy;
           exit;
         end;
     end;
   nowy^.next:=prev^.next;
   prev^.next:=nowy;
 end;

procedure wyniki(f:wskaznik);
  var licz:byte;
   begin
     licz:= 1;
     clrscr;
     Writeln;
     Writeln('Lp.  Wynik:             Imi©:');
     Writeln('_______________________________');

     while f <> nil do
       begin
         write(licz:2,'. ');
         write(f^.wynik:7,' ');
         write(f^.imie:17);
         f:=f^.next;
         writeln;
         inc(licz);
       end;

     writeln;
   end; 

Pierwsza umieszcza kolejny element na liście jednokierunkowej, druga ma za zadanie ją wyświetlać. Chciałbym, aby podczas wyświetlenia wyniki były wyświetlone rosnąco - tym samym posortować listę/wyniki do wyświenia wg zmienniej "wynik".

Z góry dziękuję za pomoc

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Weź przeczytaj jakiś kurs. Z pytania wynika że nie rozumiesz nic a nic w podanym fragmencie kodu.

P0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

Jestem po lekturze, co jest złego w kodzie?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Nic złego, tylko gdyby rozumiałeś co masz w funkcji pusz to nie miałbyś problemów z odpowiedzią na swoje pytanie.

P0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 15
0

_13th_Dragon Mogę otrzymać rzeczową odpowiedź? Nadal błądzę we mgle.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
  1. Zrób push_result która dodaje wg wyniku.
  2. Dodaj do pustej listy za pomocą push_result wszystkie elementy
  3. Wyświetl
  4. Usuń nową listę
olesio
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 4191
0
  1. Nie powielaj w tagach słów z tematu, nie o to w nich chodzi.
  2. Wklejaj kod w konkretne znaczniki kolorujące kod, nie ogólne.

Tym razem to poprawiłem. Ale następnym razem taki wątek trafi do Kosza.

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
0

@patryk0493 - podałeś procedury nie funkcje, a to spora różnica;

Jak zauważył poprzednik, procedura push służyć ma jedynie do dodawania nowego węzła do listy, więc nijak nie pasuje do Twojego zadania; Tobie potrzebna jest dodatkowa procedura, która posortuje listę, a dopiero inna ją wyświetli;

Napisz sobie nową procedurę, która przyjmie w parametrze wskaźnik na głowę listy; W niej zastosuj jakiś algorytm sortujący (jest ich sporo), np. sortowanie bąbelkowe - jest banalne; Następnie napisz sobie (lub nie - jak wolisz) procedurę, która zamieni miejscami węzły listy; Nie musisz faktycznie bawić się w swapa wskaźników węzłów listy - wystarczy zamienić miejscami dane tych elementów, a wskaźniki zostawić nietknięte; Przynajmniej nie popsujesz sobie struktury listy;

To w sumie tyle - samo wyżej wymienione sortowanie to jedynie dwie zagnieżdżone pętle, prosty warunek porównujący dane i procedura realizująca zamianę danych w elementach; Nie powinieneś mieć najmniejszego problemu, o ile faktycznie coś na temat listy jednokierunkowych poczytałeś, a także znasz podstawy programowania.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.