Matematické Fórum

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

#1 17. 04. 2013 18:17

jane338
Příspěvky: 32
Reputace:   
 

dynamicke datove struktury

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:

Code:

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.

Code:

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

 

#2 17. 04. 2013 18:33

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: dynamicke datove struktury

stačí něco jako

Code:

p.dalsi.predchozi=p.predchozi
p.predchozi.dalsi=p.dalsi
odalokuj(p)

jenom si to musíš napsat správně pascalovsky, už si nepamatuju přesnou syntaxi

Offline

 

#3 17. 04. 2013 18:41

jane338
Příspěvky: 32
Reputace:   
 

Re: dynamicke datove struktury

↑ Stýv: funguje to. vďaka.ale má to problém pri dvojprvkovom. ak dám zmazať prvý z dvoch, vymaže celý zoznam, ak dám zmazať druhý z dvoch, zacyklil sa mi.

Offline

 

#4 17. 04. 2013 19:03

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: dynamicke datove struktury

no jasně, obecně pokud mažeš první prvek, tak si musíš ukazatel na začátek přehodit na další prvek

Offline

 

#5 17. 04. 2013 19:13

jane338
Příspěvky: 32
Reputace:   
 

Re: dynamicke datove struktury

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ť?

Code:

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

 

#6 17. 04. 2013 19:54 — Editoval Stýv (17. 04. 2013 19:56)

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: dynamicke datove struktury

q a r musíš posunout pokaždý, ať jejich hodnoty přehazuješ, nebo ne. navíc potřebuješ dva vnořený cykly

Offline

 

#7 17. 04. 2013 20:05

jane338
Příspěvky: 32
Reputace:   
 

Re: dynamicke datove struktury

tajkže ten kod nie je až taká blbosť? kam mám dať cykly? lebo to už fakt neviem že ako na to

Offline

 

#8 17. 04. 2013 20:46 — Editoval Stýv (17. 04. 2013 21:05)

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: dynamicke datove struktury

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áš

Code:

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

 

#9 17. 04. 2013 21:02

jane338
Příspěvky: 32
Reputace:   
 

Re: dynamicke datove struktury

a vo vnutornom cykle bude aka podmienka? ked tomu dobre chápem..

Offline

 

#10 17. 04. 2013 21:06

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: dynamicke datove struktury

"dokud nedojdeš k p", tj. until q=p nebo tak nějak

Offline

 

#11 17. 04. 2013 21:24

jane338
Příspěvky: 32
Reputace:   
 

Re: dynamicke datove struktury

nevychadzam z toho. ako to bude cele vyzerať? aspoň teoreticky

Offline

 

#12 20. 04. 2013 20:10 Příspěvek uživatele jane338 byl skryt uživatelem jane338.

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson