Witamy:

Twoje IP
38.107.179.230
Kraj
United States United States
PrzeglÄ…darka
Unknown Browser Unknown Browser
System operacyjny
Unknown Operating System Unknown Operating System
Zaproszenie

Witamy na stronach edukacyjnych

dla nauczycieli, studentów i uczniów szkół średnich w zakresie

informatyki i systemów mikroprocesorowych

Home Turbo Pascal Rozszerzenie Lista dwukierunkowa
malastandardduza
Lista dwukierunkowa
program Lista_dwukierunkowa;

uses
  Crt;

type
  TWskaznik = ^TElement;
  TElement  = record
                Liczba : Byte;
                Pop, Nast : TWskaznik;
              end;

var
  ListaLewy, ListaPrawy : TWskaznik;
  Liczba : Byte;
  Znak : Char;
  P : Pointer;

procedure UstawZLewej (Liczba: Byte);
{lewa strony listy}
var
  E : TWskaznik;
begin
  New (E);
  E^.Liczba := Liczba;
  E^.Pop := Nil;
  if (ListaLewy = nil) then
  begin
    E^.Nast := Nil; ListaLewy := E; ListaPrawy := E;
  end
  else
  begin
    ListaLewy^.Pop := E; E^.Nast := ListaLewy; ListaLewy := E;
  end;
end;

procedure UstawZPrawej (Liczba: Byte);
{prawa strony listy}
var
  E : TWskaznik;
begin
  New (E);
  E^.Liczba := Liczba;
  E^.Nast := Nil;
  if (ListaPrawy = nil) then
  begin
    E^.Pop := Nil; ListaPrawy := E; ListaLewy := E;
  end
  else
  begin
    ListaPrawy^.Nast := E; E^.Pop := ListaPrawy; ListaPrawy := E;
  end;
end;

procedure Usun (Liczba : Byte);
{usuwa klucz Liczba}                                          }
var
  E, Nast, Pop : TWskaznik;
begin
  if ListaLewy <> nil then
  begin
    E := ListaLewy;
    while E<>nil do
      if E^.Liczba = Liczba then
      begin
        if E^.Pop = Nil then { pierwszy z lewej }
          if E^.Nast = Nil then { takze pierwszy z prawej }
          begin
            ListaLewy := Nil; ListaPrawy := Nil
          end
          else { Pierwszy, ale nie jedyny }
          begin
            Nast := E^.Nast; Nast^.Pop := E^.Pop; ListaLewy := Nast;
          end
        else { nie jest pierwszy z lewej }
          if E^.Nast = Nil then { ale pierwszy z prawej }
          begin
            Pop := E^.Pop; Pop^.Nast := E^.Nast; ListaPrawy := Pop;
          end
          else
          begin
            Nast := E^.Nast; Pop := E^.Pop;
            Pop^.Nast := E^.Nast; Nast^.Pop := E^.Pop;
          end;
        Pop := E;
        E := E^.Nast;
        Dispose (Pop);
      end
      else
        E := E^.Nast
  end;
end;

procedure WypiszListeZLewej;
var
  E : TWskaznik;
begin
  E := ListaLewy;
  while E <> nil do
  begin
    write (E^.Liczba, ' ');
    E := E^.Nast;
  end;
end;

procedure WypiszListeZPrawej;
var
  E : TWskaznik;
begin
  E := ListaPrawy;
  while E <> nil do
  begin
    write (E^.Liczba, ' ');
    E := E^.Pop;
  end;
end;

begin
  ListaLewy := nil;
  ListaPrawy := nil;

  repeat
    ClrScr;
    write ('Lista: ');
    WypiszListeZLewej; write (' - od tylu: '); WypiszListeZPrawej;
    writeln;
    writeln ('L - ustaw z lewej, P - ustaw z prawej, U - usun, K - koniec');
    Znak := UpCase(ReadKey);
    if znak in ['U', 'L', 'P'] then
    begin
      repeat
        write ('Podaj liczbe z zakresu (1..255): ');
        readln (Liczba);
      until Liczba>0;
      if Znak = 'L' then
        UstawZLewej (Liczba)
      else if Znak = 'P' then
        UstawZPrawej (Liczba)
      else
        Usun (Liczba);
    end;
    if ((Znak='L') or (Znak='P')) then
    begin
      write ('Nowa kolejka: ');
      WypiszListeZLewej; write (' - od tylu: '); WypiszListeZPrawej;
      writeln; writeln ('Wcisnij Enter');
      readln;
    end;
  until (Znak = 'K');
end.
 

Statystyka

Użytkowników : 826
Artykułów : 61
Odsłon : 2250019

Online

NaszÄ… witrynÄ™ przeglÄ…da teraz 8 goÅ›ci