Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
Autor | Správa |
---|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 | 26 Bydlisko: Kesa |
Trápi ma len taká maličkosť. Vložím si do funkcie 2 pointre a čísla medzi nimi mám zmazať (aj tie samotné pointre). Moja otázka je, či po zadaní delete help sa mi vymaže len ten konkrétny jeden prvok (na tie ostatné tým pádom stratím prístup, ale ostanú mi niekde v pamäti), ale to vyhodí všetky prvky, na ktoré help ukazuje.
Kód: struct item* erase2(struct item* first, struct item* Where1, struct item* Where2) { item* tmp = first; item* help;
if(Where1 == NULL || Where2 == NULL) return first;
while(tmp->next != Where1) { tmp = tmp->next; }
help = tmp->next;
while(help != Where2) { help = help->next; }
tmp->next = help->next;
delete help; return first; }
_________________ NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n |
|
Registrovaný: 11.01.09 Prihlásený: 12.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
delete help ti zmaze iba danu bunku, na ktoru ukazuje help. Ale nie velmi som pochopil, co vlastne chces spravit, pretoze ty mazes iba jednu bunku ( delete help ), ale chces zmazat cely rozsah od Where1 po Where2, spravne? Dalej tento blok je uplne zbytocny:
Kód: while(tmp->next != Where1) { tmp = tmp->next; }
Pretoze nakoniec sa aj tak tmp bude rovnat Where1. Ak chces, tuna si mozes prestudovat, ako spravne vykonat mazanie prvkov v zozname: http://www.cs.bu.edu/teaching/c/linked-list/delete/
V skratke ide o to, ze zacnes hladat zaciatok a mazes az pokial nenarazis na koniec, bunku po bunke.
|
|
Registrovaný: 09.04.11 Prihlásený: 11.01.14 Príspevky: 257 Témy: 26 | 26 Bydlisko: Kesa |
Ono mi to funguje. Najskôr prídem v zozname po where1. Následne sa budem kópiou toho zoznamu pohybovať ďalej až po where2. Potom ten hlavný zoznam (ten mi zostal pred pointrom where1) prepojím s nasledujúcim prvkom tej kópie, ktorá sa zastavila pred where2. Tým pádom mi v zozname zostane to čo som chcel a v tej kópie mi zostanú len tie prvky, ktoré som chcel zmazať. A mojou otázkou bolo, ako zmazať tie prvky. Takže keď vravíš, ťe delete mi zmaže len jednu bunku, tak mi napadá spraviť to rekurzívne, že sa dostanem na konec a odkonca začnem zmazať prvky. (alebo si spraviť struct item* back;)
_________________ NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n |
|
Registrovaný: 11.01.09 Prihlásený: 12.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova |
Myslim, ze pouzit rekurziu na nieco take je ako strielat kanonom po vrabcoch. Neviem, ci si si pozrel link, ktory som uviedol, ale je tam presne co potrebujes a je to na paru riadkov. Vezmime si priklad:
- mame zoznam, kde kazdy prvok oznacme velkym pismenom abecedy a bude v rozsahu od A po F
- chceme zmazat prvky od C po E
Postup bude taky, ze budes v slucke porovnat pomocny pointer ( nazvime ho temp ) ukazujuci na zaciatk zoznamu ( A ) a budes mu priradzovat stale hodnotu ->next, pokial sa nebude rovnat prvku, ktory chceme zmazat ( C ). Ak sa rovna, mozes vyskocit z aktualnej slucky ( aby zbytocne neboli vnorene cykly, ale to uz je na tebe, ako to implementujes ) a v dalsom cykle budes nastavovat prvku temp->next hodnotu dalsieho prvku->next, cize najsamprv to bude C->next a hodnotu C zmazez. Toto budes opakovat az pokial sa nedojde na koncovy pointer, cize po E.
Neviem, ci som to dobre vysvetlil, ale kazdopadne to najdes aj s prikladom na prilozenom linku. Rekurzia je ozaj zbytocne komplikovane riesenie, ale rozhodni sa uz ako chces.
|
|
Stránka: 1 z 1
| [ Príspevkov: 4 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Assembler, C, C++, Pascal, Java | 4 | 2015 | 23.02.2011 18:13 mack0 | | v HTML, XHTML, XML, CSS | 10 | 2384 | 05.08.2007 10:20 HAE07 | | v JavaScript, VBScript, Ajax | 1 | 1970 | 25.06.2012 0:08 shaggy | | v HTML, XHTML, XML, CSS | 17 | 3058 | 23.06.2007 22:06 sento | | v Perl, Python, Ruby, CGI | 1 | 730 | 14.06.2013 21:35 reDo | | v Redakčné systémy | 10 | 941 | 23.08.2006 19:38 gumy | | v Ostatné | 3 | 837 | 26.10.2010 19:53 shaggy | | v PHP, ASP | 3 | 594 | 05.03.2008 10:33 mondzo | | v Redakčné systémy | 1 | 821 | 21.02.2007 11:20 Freelan | | v Internetový marketing, SEO, reklama | 9 | 74029 | 30.12.2010 9:51 JanoF | | v Ostatné programy | 3 | 757 | 10.07.2008 20:07 dadmtb | | v HTML, XHTML, XML, CSS | 12 | 880 | 19.06.2010 13:20 shaggy | | v Počítačové hry | 4 | 749 | 22.12.2011 21:15 m4rty | | v Počítačové hry | 6 | 989 | 03.10.2011 10:14 dixi | | v Operačné systémy Microsoft | 1 | 571 | 06.08.2009 23:22 Jaro | | v Počítačové hry | 23 | 5839 | 24.06.2010 15:18 Spard |
|