Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Mám problém s DDŠ. ide o cyklický obojsmerny spájaný zoznam. potrebujem z neho vymazať konkrétnu hodnotu a usporiadať zoznam. ak je zoznam prázdny alebo jednoprvkový, to ošetrené mám. nejde mi vymazanie, ak je zoznam viacprvkový.
a problém číslo 2. mám použité bublinkové triedenie, ale vymení mi len posledné dve hodnoty.ale o tom neskôr.
zoznam je zadefinovany takto:
type ukazovatel=^zaznam;
zaznam=record
predchadzajuci:ukazovatel;
hodnota:integer;
dalsi:ukazovatel;
end;a procedúra vymazania: (vymaz=nacitane cislo) predtým je ošetrený prázdny a jednoprvkový zoznam...preto to else. stačí, ak mi zadanú hodnotu zo zoznamu vymaže raz, ak sa tam nachádza viackrát.
else begin
p:=start;
repeat
if p^.hodnota<>vymaz then
p:=p^.dalsi
else begin
???
end;
until p=start;
end;vedel by mi s tým niekto pomôcť prosím?
Offline
aha..dobre. to skúsim vyriešiť. a ešte tu mám to usporiadanie:
je to bublinkove triedenie, potrebujem, aby vymieňalo len hodnotu a aby to išlo odzadu s tým, že po prvom zbehnutí je už prvý prvok na mieste, teda druhý krát ho už neporovnáva. mám nejaký kód, ale neviem či to nie je blud. vymieňa mi to akurát posledné dve hodnoty. ako to mám urobiť?
else begin
p:=start;
q:=p^.predchadzajuci;{hodnota;}
r:=p^.predchadzajuci^.predchadzajuci;
repeat
if q^.hodnota<r^.hodnota then begin
x:=q^.hodnota;
q^.hodnota:=r^.hodnota;
r^.hodnota:=x;
end
else begin
q:=q^.predchadzajuci;
r:=q^.predchadzajuci^.predchadzajuci;
end;
p:=p^.dalsi;
until p=start^.predchadzajuci;
end;Offline
není to úplná blbost, ale je to dost blbě. když jednou projedeš od konce na začátek, tak se ti dostane nejmenší číslo na správný místo. jenže to musíš projet znovu, aby se dostal na svý místo i druhej nejmenší prvek atd. atd. ostatně tam máš
p:=p^.dalsi; until p=start^.predchadzajuci;
což patří do vnějšího cyklu, zatímco to přehazování a posouvání q a r patří do vnitřního cyklu (dokud nedojdeš k p)
Offline