[ Príspevkov: 4 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Zreťazený zoznam

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26 | 26
Bydlisko: Kesa
NapísalOffline : 25.03.2012 20:58 | Zreťazený zoznam

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
Offline

Skúsený užívateľ
Skúsený užívateľ
Zreťazený zoznam

Registrovaný: 11.01.09
Prihlásený: 25.04.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 25.03.2012 21:33 | Zreťazený zoznam

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.


Offline

Užívateľ
Užívateľ
Zreťazený zoznam

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26 | 26
Bydlisko: Kesa
Napísal autor témyOffline : 25.03.2012 22:04 | Zreťazený zoznam

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
Offline

Skúsený užívateľ
Skúsený užívateľ
Zreťazený zoznam

Registrovaný: 11.01.09
Prihlásený: 25.04.26
Príspevky: 1399
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOffline : 26.03.2012 17:06 | Zreťazený zoznam

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.


 [ Príspevkov: 4 ] 


Zreťazený zoznam



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Zretazeny zoznam

v Backend

4

2101

23.02.2011 18:13

mack0

V tomto fóre nie sú ďalšie neprečítané témy.

zoznam

v Frontend

10

2522

05.08.2007 10:20

HAE07

V tomto fóre nie sú ďalšie neprečítané témy.

Zoznam

v Frontend

1

2112

25.06.2012 0:08

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

zoznam

v Frontend

17

3180

23.06.2007 22:06

sento

V tomto fóre nie sú ďalšie neprečítané témy.

zoznam kontaktov

v Ostatné

3

903

26.10.2010 19:53

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

problem zoznam

v Backend

3

652

05.03.2008 10:33

mondzo

V tomto fóre nie sú ďalšie neprečítané témy.

Zoznam uživateľov

v CMS

1

881

21.02.2007 11:20

Freelan

Táto téma je zamknutá, nemôžete posielať nové príspevky alebo odpovedať na staršie.

Zoznam katalógov

v SEO, marketing a reklama

9

76965

30.12.2010 9:51

JanoF

V tomto fóre nie sú ďalšie neprečítané témy.

zoznam-program

v Ostatné programy

3

825

10.07.2008 20:07

dadmtb

V tomto fóre nie sú ďalšie neprečítané témy.

Jednoduchý zoznam

v Frontend

12

969

19.06.2010 13:20

shaggy

V tomto fóre nie sú ďalšie neprečítané témy.

Zoznam hier

v Hry a herné konzoly

4

826

22.12.2011 21:15

m4rty

V tomto fóre nie sú ďalšie neprečítané témy.

NFS zoznam

v Hry a herné konzoly

6

1051

03.10.2011 10:14

dixi

V tomto fóre nie sú ďalšie neprečítané témy.

Zoznam systemov

v Windows

1

623

06.08.2009 23:22

Jaro

V tomto fóre nie sú ďalšie neprečítané témy.

zoznam mail

v Internet, služby a sociálne siete

0

1315

03.12.2019 20:24

Duso11x

V tomto fóre nie sú ďalšie neprečítané témy.

zoznam serverov

v Hry a herné konzoly

23

5977

24.06.2010 15:18

Spard

V tomto fóre nie sú ďalšie neprečítané témy.

Python zoznam

v Backend

1

809

14.06.2013 21:35

reDo



© 2005 - 2026 PCforum, edited by JanoF