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
Stránky: 1
první příklad:
Rozpůlení spojového seznamu
Mějme deklaraci následující procedury:
procedure RozdelSeznam(var ukazatel_na_prvni_prvek : pcislo; var druha_pulka : pcislo);
var
...
begin
...
end;
Dopište tělo procedury tak, aby vstupní seznam rozdělila na dvě části, tak aby rozdíl v počtu prvků
jednotlivých částí byl maximálně 1. Procedura musí zachovat pořadí prvků a nesmí používat žádná
pomocná pole ani volat proceduru new/dispose. Cíle by měla dosáhnout v čase O(N) pouze pomocí
manipulace s ukazateli. Např. vstupní seznam 1,2,3,4,5,6,7 rozdělí na seznamy 1,2,3,4 a 5,6,7.
(resp. 1,2,3 a 4,5,6,7). První parametr je vstupní spojový seznam. Druhý parametr je pouze
výstupní, tj. na začátku neinicializovaný.
2 příklad:
Vkládání doprostřed spojového seznamu
Napište proceduru, která dostane ukazatel na začátek spojového seznamu a číslo, které vloží
doprostřed spojového seznamu.
Např. Pro seznam 1->1->1->1 a číslo 4 bude výsledkem seznam 1->1->4->1->1.
Offline

Koukám, že nám toto téma zůstalo viset nevyřešené ... druhý příklad se dá najít mnohde na webu, třeba zde: http://rosettacode.org/wiki/Singly-Link … %29#Pascal
První je trchu trikový -- vyšleme dva ukazatele, s jedním skáčeme o dva prvky, se druhým o jeden. První dorazí na konec seznamu když první dorazí před polovinu. Jako výstup vrátíme ukazatel na následující prvek (tj. ten za polovinou), hodnotu ukazate na následující prvek vynulujeme.
Offline
Tak to tady ted prochazim a tady to je samej seznam :)
1. Priklad
Nevim jestli to bude splnovat nejhorsi slozitost n, ale mohlo by...
Kdyz nevis jak dlouhej je ten seznam tak normalne budes skakat po dvou prvkach az dojdes na konec. No a az tam dojdes tak ti bude jasny, ze ten seznam ma bud n nebo n+1 prvku (kde n je sudy cislo). To rozdelis na pul a od zacatku dojdes na tu pozici v seznamu a rozdelis to
2. Priklad
To stejny jenom to nerozdelujes ale vkladas tam neco...
Offline
Stránky: 1