Napisz !!! czekam na twoje uwagi

Dynamiczne struktury danych

Procedury służące do dynamicznego przydzielania i zwalniania pamięci, zmienne typów wskaźnikowych są wykorzystywane do programowania dynamicznych struktur danych, którym pamięć jest przydzielana i zwalniana w trakcie wykonywania programu. Ze względu na organizację oraz sposoby dołączania, wstawiania
i usuwania składników można wyróżnić między innymi następujące metody:

powrót do głównego menu

następny program

Program wpisujący nazwiska do kolejki.

Program Kolejka1;

Type Wskaznik_Kolejki=^Element_Kolejki;

    Element_Kolejki=Record

      Nazwisko:String[30];

      Wsk:Wskaznik_Kolejki;

    End;

Var Kolejka,Biezacy,Nowy:Wskaznik_Kolejki;

Begin

    Repeat

      New(Nowy);

      Write('Podaj nazwisko : ');

      ReadLn(Nowy^.Nazwisko);

      If Nowy^.Nazwisko <> '' Then

        Begin

        Nowy^.Wsk:=Nil;

        If Kolejka=Nil Then

          Begin

          Kolejka:=Nowy;

          Biezacy:=Nowy;

        End

        Else

          Begin

          Biezacy^.Wsk:=Nowy;

          Biezacy:=Nowy;

        End;

      End;

    Until Nowy^.Nazwisko='';

    Biezacy:=Kolejka;

    While Biezacy<>Nil Do

      Begin

      WriteLn('Nazwisko : ',Biezacy^.Nazwisko);

      Biezacy:=Biezacy^.Wsk;

    End;

End.

powrót do głównego menu

na koniec programu

Program wpisujący nazwiska na listę i usuwanie tych samych nazwisk z listy.

Program lista;

    Uses Crt;

    Type litery=set of 'A'..'Z';

    wskaznik_listy=^skladnik_listy;

      skladnik_listy=Record

      dane:string;

      wsk:Wskaznik_listy;

    End;

Var pierwszy,biezacy:Wskaznik_listy;

    tekst:string;

    koniec:Boolean;

    i,k:integer;

Procedure DoListy(var element :string;

    Var biezacy:Wskaznik_listy );

    Var poprzedni,nastepny:Wskaznik_listy;

Begin

    If biezacy<> Nil Then

      Begin

      poprzedni:=biezacy;

      nastepny:=biezacy^.wsk

    End

    Else Begin

      poprzedni:=Nil;

      nastepny:=Nil;

    End;

    New(biezacy);

    With biezacy^ do

    Begin

      dane:=element;

      wsk:=nastepny;

    End;

    If poprzedni<> Nil

      Then poprzedni^.wsk:=biezacy

    End;

Procedure miejsce(Var k:Integer;

    Var pierwszy,biezacy:Wskaznik_listy);

    Var nastepny:Wskaznik_listy;

    i:Integer;

Begin

    If pierwszy<>Nil Then

    If k=1 Then biezacy:=pierwszy

    Else If(k=2) and(pierwszy^.wsk=nil)

    Then k:=0

    Else

      Begin

      nastepny:=pierwszy;

      i:=1;

      Repeat

        i:=i+1;

        If nastepny^.wsk<>Nil Then

          nastepny:=nastepny^.wsk

        Until(nastepny^.wsk=nil) or (i=k);

        If(nastepny^.wsk=nil) and(i<k) Then

          k:=0

        Else biezacy:=nastepny

      End

    End;

Procedure ZListy (Var element:string;

    Var biezacy:Wskaznik_listy;

    Var pierwszy:Wskaznik_listy);

    Var poprzedni,nastepny:Wskaznik_listy;

Begin

    If (pierwszy<>Nil) and(biezacy<>Nil) Then

    If pierwszy<>biezacy Then

Begin

    Poprzedni:=pierwszy;

    nastepny:=poprzedni^.wsk;

    If nastepny<>biezacy Then

      Repeat

      poprzedni:=nastepny;

      nastepny:=poprzedni^.wsk;

    Until nastepny=biezacy;

    With biezacy^ do

    Begin

      element:=dane;

      poprzedni^.wsk:=wsk;

    End;

    dispose(biezacy);

    biezacy:=poprzedni;

End

Else

Begin

    With pierwszy^ do

      Begin

      element:=dane;

      pierwszy:=wsk;

    End;

    dispose(biezacy); {usunięcie składnika}

    biezacy:=pierwszy;

End

End;

Begin

    ClrScr;

    Textcolor (14);

    GotoXY(35,1);

    Writeln('LISTA');

    Writeln;

    Textcolor(11);

    WriteLn;

    Writeln(' WPROWADŹ NAZWISKA : ');

    WriteLn;

    biezacy:=Nil;

    i:=0;

    koniec:=false;

    Repeat

      i:=i+1;

      Textcolor(14);

      Write(' Nazwisko ',i,': ');

      Readln(tekst);

      If tekst= '' Then

        koniec:=True

      Else

    Begin

      DoListy(tekst,biezacy);

      If i=1 Then

      pierwszy:=biezacy

    End

      Until tekst='';

      If i>1 Then

    Begin

      ClrScr;

      Textcolor(14);

      GotoXy(30,1);

      Writeln('LISTA UTWORZONA');

      i:=i-1;

      Textcolor(10);

      GotoXY(28,3);

      Writeln('LISTA SKŁADA SIĘ : ',i);

      koniec:=false;

        Repeat

        Textcolor(12);

        WriteLn;

        Write('Ile usunąć ','');

        Write('z listy (0-koniec) : ');

        Readln(k);

        If k < 1 Then

        koniec:=true

        Else

          Begin

          Miejsce(k,pierwszy,biezacy);

          If k=0 then

          Writeln(' największy nr : ',i)

          Else

            Begin

            ZListy(tekst,pierwszy,biezacy);

            i:=i-1;

            Begin

            Textcolor(9);

            Writeln(' Nazwiska pozostałe w liście : ');

            End;

            If biezacy=Nil Then

              Begin

              Textcolor(12);

              Writeln (' BRAK NAZWISK');

              koniec:=true

            End

            Else for k:=1 to i do

              Begin

              Miejsce(k,pierwszy,biezacy);

              Textcolor(10);

              WriteLn;

              Write(' Nazwisko ',k,' : ');

              Writeln(biezacy^.dane)

            End

          End

        End

      Until koniec;

      For k:=1 to i do

    Begin

    Miejsce(k,pierwszy,biezacy);

    ZListy(tekst,pierwszy,biezacy);

    End;

    Textcolor(128+12);

    WriteLn;

    Writeln(' KONIEC!!! LISTA JEST JUŻ PUSTA');

    Delay(4000);

End

End.

powrót do głównego menu