Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program Project1;
- {$APPTYPE CONSOLE}
- {$R *.res}
- //Lista jednokierunkowa
- uses
- System.SysUtils;
- type ptr=^element;
- element=record
- key:integer;
- next:ptr;
- end;
- var
- first:ptr;
- //Dodawanie elementu na początek listy
- procedure Dodaj (k:integer);
- var temp: ptr;
- begin
- New(temp);
- temp^.key:=k;
- temp^.next:=first;
- first:=temp;
- end;
- //Wyświetlanie całej listy
- procedure Wyswietl;
- var temp: ptr;
- begin
- temp:=first;
- while(temp<>nil) do
- begin
- writeln(temp^.key);
- temp:=temp^.next;
- end;
- end;
- //Wstawianie elementu na listę posortowaną
- procedure wstawianie(k:Integer);
- var
- temp: ptr;
- prev: ptr;
- begin
- New(temp);
- temp^.key:=k;
- //1 przyp - kiedy lisat jest pusta lub znajduje się na niej jeden element
- if (first = nil) or (temp^.key < first^.key) then
- begin
- temp^.next:=first;
- first:=temp;
- end
- else
- begin
- prev:=first;
- while (prev^.next<>nil) and (prev^.next.key < k) do
- prev:=prev^.next;
- temp^.next:=prev.next;
- prev^.next:=temp;
- end;
- end;
- //usuwanie elementu o kluczu k. usuwa tylko pierwszy napotkany element o danym kluczu
- //Dispose - funkcja usuwajaca
- procedure Usun(k:integer);
- var
- toDel: ptr;
- prev: ptr;
- begin
- if first <> nil then
- begin
- if first^.key = k then
- begin
- toDel:=first;
- first:=first^.next;
- Dispose(toDel);
- end
- else
- begin
- prev:=first;
- while (prev^.next <> nil) and (prev^.next.key <> k) do
- prev:=prev^.next;
- if prev^.next <> nil then
- begin
- toDel:=prev^.next;
- prev^.next:=toDel^.next;
- Dispose(toDel);
- end;
- end;
- end;
- end;
- //zamiana elementu o kluczu k z kolejnym
- procedure zam (K:Integer);
- var
- t1, t2, prev: ptr;
- begin
- //jeśli element jest na początku listy
- if first^.key=k then
- begin
- t1:=first; //1 element
- t2:=first^.next; //adres następnika 1 elementu
- first:=t2; // adres first jest przypisany adresowi jego nastepnika (bez wartości)
- t1^.next:=t2^.next; // 1 element zostaje następnikiem t2 czyli następnikiem firsta (z wartością k)
- t2^.next:=t1;
- end
- else
- //jeśli element jest w środku listy
- begin
- prev:=first;
- while prev^.next^.key <> k do
- prev:=prev^.next;
- t1:=prev^.next; //t1 następnik od prev
- t2:=t1^.next; //t2 nastepnik od t1
- prev^.next:=t2; //następnikiem preva t2
- t1^.next:=t2^.next; //następnikiem t1 następnik t2
- t2^.next:=t1; //następnikiem t2 jest t1
- end;
- end;
- //wyjęcie elementu z listy bez usuwania i zwrócenie jego adresu jako wynik
- function wyjmij(n:Integer):ptr;
- var
- t, prev: ptr;
- begin
- if first<>nil then //warunek zabezpieczający
- begin
- if n=1 then
- begin
- t:=first;
- first:=t^.next;
- result:=t;
- end
- else
- begin
- prev:=first;
- while n>2 do
- begin
- prev:=prev^.next;
- n:=n-1;
- end;
- t:=prev^.next;
- prev^.next:=t^.next;
- result:=t;
- end;
- end
- else
- begin
- prev:=first;
- while (n>2) and (prev^.next <> nil) do
- begin
- prev:=prev^.next;
- n:=n-1;
- end;
- if prev^.next <> nil then
- begin
- t:=prev^.next;
- prev^.next:=t^.next;
- result:=t;
- end;
- end;
- end;
- //zamiana elementu o indeksie n z n+1-szym
- procedure zamien(n:Integer); //zamienianie dla indeksu
- var
- t1, t2, prev: ptr;
- begin
- //jeśli element jest na początku listy
- if n=1 then
- begin
- t1:=first; //1 element
- t2:=first^.next; //adres następnika 1 elementu
- first:=t2; // adres first jest przypisany adresowi jego nastepnika (bez wartości)
- t1^.next:=t2^.next; // 1 element zostaje następnikiem t2 czyli następnikiem firsta (z wartością k)
- t2^.next:=t1;
- end
- else
- //jeśli element jest w środku listy
- begin
- prev:=first;
- while n>2 do
- begin
- prev:=prev^.next;
- n:=n-1;
- end;
- t1:=prev^.next; //t1 następnik od prev
- t2:=t1^.next; //t2 nastepnik od t1
- prev^.next:=t2; //następnikiem preva t2
- t1^.next:=t2^.next; //następnikiem t1 następnik t2
- t2^.next:=t1; //następnikiem t2 jest t1
- end;
- end;
- //sortowanie bąblekowe listy
- procedure sort_b(n:Integer);
- var
- i,j:Integer;
- current:ptr;
- begin
- for i := 1 to n-1 do
- current:=first;
- begin
- for j := 1 to n-1 do
- begin
- if current^.key>current^.next^.key then
- zamien(j)
- else
- current:=current^.next;
- end;
- end;
- end;
- begin
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement