Skocz do zawartości

dołączanie elementu na początek listy


marcinekm681

Polecane posty

Witam

Chciałbym napisać procedurke dołączającą na początek listy element. Niestety próbuje to zrobić ale z marnym skutkiem:-( (procedura dolacznapoczatek). Jak by ktos wiedział jak ją by poprawić byłbym bardzo wdzięczny. Z góry dziękuje za jakąkolwiek pomoc.

 

Program mojalista;
uses crt2;
type
wsk=^elem;
elem= record[[OXĆvĆvw6łVćCf f'7Cw6łĆłFWC6ĆźŃ()ąŃĄŹŃ(
 pom,bierz:wsk;
begin
 new(pom);
 pom^.l:=x;
 pom^.nas[[YYO[[[YNB[b&Vv&W'ŁŁW'w7vĆR&W'ćć7BfCfwCź(x(x(;
 end;

procedure wypiszListe(pierwszy:wsk);
begin
 whilHYI[Y[][YW
NW'w7ŁW'w7ćć7CVćCVćC&6VGW&RvAĄŹ((Ź((Ąąierwszy<>nil do
  begin
    pom:=pierwszy^.nast;
  JYJNYNN[[VGW&RFĆ7Ść7ŚFVf\"W'w7w6f\"EĆ7FśVĆŹ(((Ąą(ąx9ą(eleme^.nast:=pierwszy;
pierwszy:=eleme;
end;


 var L1:T_NQSYZ NL^ZGBb33&W6WBĆf'7CŁćvĆRćB6VVśVbąŹź((ĄąŹąąź(ąŃĄslowo);
   end;
  close(plik);
  wypiszliste(first);
   X]ZĘ
NZ[ZYXĘ
NXYTB

Link do komentarza
Udostępnij na innych stronach

Przerobiłem tą procedurke troche inaczej.(taką miałem w podręczniku). I da sie dodać element, ale tylko raz.

Dlaczego

Program mojalista;
uses crt2;
type
 wsk=^elem;
 elem= reco[[w6łĆłFWC6Ćvó7G&ćswŚ6#&6VGWąŃĄŹŃ((ąŹ
 begin
  new(pom);
  pom^.l:=x;
  pom^.nast:=nil;
   iYO[[[YNB[BY[&W'ŁŁW'w7vĆR&W'ćć7BfCfwCćFx(x(( end;

procedure wypiszListe(pierwszy:wsk);
 begin
  whilHYI[Y[][YWW'w7ŁW'w7ćć7CVćCVćC&6VGWąAĄŹ((Ź(   while pierwszy<>nil do
   begin
     pom:=pierwszWJYJNYNN[CVćC&6VGW&RFĆ7Ść7ŚFV7G&ćrf\"wŹŃ(((ŃĄ(  new(first);
 writeln('nowy element');
 read©;
X[[[[bY[Wrw&FVĆb33śćwb33&VB2ćŁ3((((((((( delete(idx:integer);
 var p,q:wsk;
 i:integer;
 begin
 YY[NH HYY[ŁŁćć7CVćCćć7CŁćć7CFĄ(
((((((    %8((ą
  clrscr;
  assign(plik,'d:\wskaznik.txt');
]
ZĘN[[[HYZ[ZĘH&Vv&VBĆ6ĆvFĆ7Gf'7B6Ćv((ąĄąŹ(((Ńą1 wypisz liste');
   writeln('2  dolacz na p[oczateNĘN][  NZ[ZYXNĘN][wŁ&VFśW66Rw&\"`b33łb33łwąŃĄ(ąŃŹĄąź(   '3':   zwolnijpamiec(first);
    else
    clrsc][      NXYINĘN[[wb33łsTB

Link do komentarza
Udostępnij na innych stronach

Chyba jestem głupi, albo my o czym innym rozmawiamy:-))

Napisze ci po koleji co w mam na mysli robiąc moją procedure( w necie spotkałem niemal identyczną).

 

[pascal][/pascal]

 

Byłbym bardzo wdzięczny gdybyś mógł mi ja poprawić bo ja juz opadam z sił. Szlak mnie bierze bo wciąż nie wiem o co chodzi:-((

Link do komentarza
Udostępnij na innych stronach

Zamiast lamentowac wez kartke i sobie narysuj. Ja tak uczylem sie pisac kolejke, jak zalapiesz o co chodzi to zobaczysz ze jest to proste.

 

jesli masz zmienna o nazwie np Poczatek. i jest ona wskaznikiem na wezel, ktory to wezel moze wskazywac na kolejny wezel itd. to zastanow sie jakie moga wystapic sytuacjie:

1) poczatek = nil, czyli kolejki wogole nie ma. Jesli wiec dolaczasz cos na poczatek to to co stworzyles powinno byc wskazywane przez zmienna poczatek. Natomias Nast = nil. (bo nie bylo kolejki)

2) poczatek nil, czyli wskazuje na jakas liste. Czyli tworzysz nowy wezel nazwijmy go wez1. Teraz wez1.nast = poczatek, dlaczego ? bo nie chcemy stracic tego co juz bylo w kolejce. Na sam koniec poczatek powinien wskazywac na nowo stworzony obiekt czyli wez.

 

Wez kartke rozrysuj sobie wszystko po czym wywal stary program i napisz go od nowa patrzac na to co narysowales. Koniec kropka, nie ma sie co rozczulac.

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Zrobiłem coś takiego:-) Działa już duzo lepiej niż ostatnio, tylko że nadal jak usuwam wybrany string, to musze wypisywać całą linijke, dokładnie jak w liście bo inaczej program sie wywala;-/. Czy ktoś może wie, jak można zrobić żeby usuwało wybrany wyraz, a nie całą linijke??

Z góry dziękuje za podpowiedz, pozdrawiam:-)

program:

 

program Lista;
uses crt2;
 type
   wsk = ^TEl_listy;
    [HHX[H[ć7FWw6łVćC&6ąŃĄąŹŃ((wsk;
   begin
    new(pom);
    pom^.dane:=x;
    pom^.nN[[YO[[[NB6P&Vv&W'ŁŁvĆvvĆR&W'ćć7ąź(xŃ(rz^.nastepny:=pom;
     end;
    end;

 procedure WstawNa]ZĘW[H[HĘN[w6ł&VvFVŁvĆvćWrvĆvvFvĆxź(}(Ńemp;
   end;
 end;  {procedure WstawNaPoczatek}

 functioZ[[Y[
Z[H[HĘNFVw6ł&VvFVŁvĆvw&FRb33'ŚW7ąŃ(ĄąŃąź      Write('.');       { liczba kropek na ekranie oXYHXYH]X[bY[[HHFćRFV'&VV6RFVŁFVćć7FWVćCĄą(]Ń1(iąŃ(nction Znajdz}

 function WypiszListe(glowa : wsk):integer;[XZ[YYĆ7ŚćŁw&FTĆbvĆvćFVw&Ń11ŃŃ(ą(    WriteLn('Zawartosc listy ');
     temp := glowa[H[    [Y[][[ćFćRb33b33FVŁFVćć7FW%ĄąŹ(Ąą(ą(]Ńn;
   WypiszListe := licznik;

 end;

 procedure delete(vN[ĘNN[YY[w&FVĆb33w76ĆvFW7VćV6b33&VFĆ2ąxŃĄ((Ąą(ąwa:=glowa^.nastepny
  end
   else
  begin
   p:=glowa;
[JI[
H[
W[ICfwC2FŁćć7FWF76Rćć7FWxŃxŃxŃ(((((Ńon UsunListe(var glowa : wsk):integer;
   var
     temp   XZ[YY[XZHw&FTĆw&FRb33W7WvćRĆ7Gb33vĆRąąź(]Ń(%c(licznik);
     temp := glowa^.nastepny;
     Dispose(gloJNHH[[[_B[HĆ7ŚćłVćCśgVć7FW7VĆ7FWf vĆvŹ(QŹ(ąźŃ(=Ą    i      : integer;
   plik:text;
begin
 Glowa := nil;
[H[XYYZ NLw6śŚćGBb33&W6WBĆvĆvŁćvĆRĄąŹź((ĄąŹąąź(dolisty(glowa,slowo);
    end;
  close(plik);

 repeat
 ]S]S        NK]H]ZNĘNw&FTĆb33śBŚćŚGVĆVVBb33w&FTĆb33rŃąŃ(]Ń1U element z pamieci.');

   WriteLn('x. Koniec.'N]S]J       NX        NĘNXY6Ś66RW66R6Ś`b33b33&Vv(]Ń1(]ŃAąź ');
             ReadLn(slowo);
             WstawNaP]ZĘJN[YHY[[Y[HBw7Ć7FRvĆvVćCb33\"b(]Ń1(]Ńodaj slowo: ');
             ReadLn(slowo);
         & nbsp;]ÓRYXĘJN[YHY[[Y[Hw7Ć7FRvĆ
vVćC(]Ń1(Write('Podaj slowo: ');
              ReadLn(slowo);]TZJN[YHvVĆVVGR
w7Ć7FRvĆv((]Ń1(           Write('Podaj szukane slowo: ');
        XYĘN[HZ[[Y[
vĆvbFVćFVw&FTĆb337Vśą(         else WriteLn('Znaleziono element zawierajacy: &N[[JN[   NNĆ7FRvĆvb33Rb33&Vvw&FT((ąŃĄąąąź(( 'X' : ;
     else WriteLn('Niepoprawna opcja.&NĘN[_B[[
HH        N   NĘH
Śb33b33w&FTĆw&FTĆw&FRb33v669QH(I1)

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...