Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C - Spajany zoznam struktur mazanie

Dobry den prajem. Mam problemy so strukturami. Chapem zaklady spajaneh zoznamu ako ukazuju jednotlive struktury v zozname na druhe a tak ale neviem prijst nato ako zmazat dajme tomu v 8prvkovom zozname stuktur strukturu na 5. mieste napadlo ma ze ked dojdem na piatu tak ta stvrta bude ukazovat namiesto piatej na siestu a piatu vymazem. Bohuzial neviem ako to funguje ci pri mazani sa dava free alebo ako priradim tej stvrtej adresu siestej atd. Neukazal by mi dakto priklad ako sa to robi?

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Musim to robit cez temp? Tuto mam jeden priklad: aktualnyZaznam=prvyZaznam; printf("%d\n",pocet); f…
Parker 26.11.2015 11:52
Parker
Na to tam musi byt nejaka temp premenna, ptz uz si si prepisal pointer na tu strukturu (aktualnyZazn…
MM.. 26.11.2015 11:55
MM..
a to temp vlastne staci na tu premennu dalsia takze nemusim ho natahovat cez malloc ze? nový
Parker 26.11.2015 11:57
Parker
temp si deklarujes len ako pointer, nerobis tam ziadne malloc. struktura* temp; temp = aktualnyZazna… nový
MM.. 26.11.2015 11:59
MM..
Dakujem uz mi to ide ako hodinky :) velmi si mi pomohol :) nový
Parker 26.11.2015 12:01
Parker
Ked to mas do skoly tak si to temp nazvi nazmazanie apod, aby sa ucitel zbytocne nepytal ze preco si… nový
MM.. 26.11.2015 12:11
MM..
a tie smerniky aktualnyZaznam a prvyZaznam som alokoval cez malloc
Parker 26.11.2015 11:56
Parker
struktura* neco; neco = aktualnyZaznam->dalsia; aktualnyZaznam->dalsia = neco->dalsia; free(neco);
MM.. 26.11.2015 11:57
MM..
Este jedna otazocka co ak chcem zmazat uplne prvu strukturu to nemozem iba vymazat to musim poposuva… nový
Parker 26.11.2015 12:06
Parker
Niekde mas ulozeny pointer na hlavu zoznamu (to je to s cim zacinas, u teba "prvyZaznam") To si nast… nový
MM.. 26.11.2015 12:13
MM..
Ak to robis vo funkcii a predavas to prvyZaznam parametrom, tak to ale neovplyvni origijnalnu premen… nový
MM.. 26.11.2015 12:17
MM..
BTW. pri objektovom programovani je dobre mat objekt typu spojkovy zoznam v ktorom je ulozeny aj ten… nový
MM.. 26.11.2015 12:18
MM..
Ahaaaa jasne chapem super dakujem moc :) poslední
Parker 26.11.2015 12:19
Parker

Musim to robit cez temp? Tuto mam jeden priklad:

aktualnyZaznam=prvyZaznam;
                        printf("%d\n",pocet);
                        for(i=0;i<pocet-1;++i)
                        {
                            aktualnyZaznam=aktualnyZaznam->dalsia;
                        }
                        aktualnyZaznam->dalsia=aktualnyZaznam->dalsia->dalsia;
                        printf("%s\n",aktualnyZaznam->nazovTovaru);
                        break;

Pocet je kolko struktur bolo prejdenych dokial som nenarazil na tu ktoru chcem zmazat. No a v tomto kode sa dostanem na strukturu pred tu ktoru chcem vymazat a podarilo sa mi tu adresu aj zmenit a preskocit ju ale neviem vymazat tu strukturu co som preskocil

Na to tam musi byt nejaka temp premenna, ptz uz si si prepisal pointer na tu strukturu (aktualnyZaznam->dalsia ukazuje uz na siestu), a teda uz nevies vobec jaka bola ta adresa ten piatej struktury.
Preco mas panicky strach z nejakej lokalnej premennej? Bez lokalnych premennych toho moc nenaprogramujes.
(P.S. tej premennej i sa nebojis? To je tiez len lokalna pomocna premenna :)

Ked to mas do skoly tak si to temp nazvi nazmazanie apod, aby sa ucitel zbytocne nepytal ze preco si to nazval temp :) (je to skratka z anglickeho temporary = nejaka docasna premenna, ono premenne by sa stejne mali nazyvat nejak normalne a nie len temp alebo temp2 aby sa to dalo aj citat)

Ak to robis vo funkcii a predavas to prvyZaznam parametrom, tak to ale neovplyvni origijnalnu premennu. Potom si musis predavat to prvyZaznam do funkcie odkazom (adresu toho prvyZaznam, t.j. dvojity pointer).

funkcia(struktura **prvyZaznam)
{
aktualnyZaznam = *prvyZaznam;
for(i=0...

a ked chces zmazat ten prvy tak potom
neco = *prvyZaznam;
*prvyZaznam = neco->dalsi;
free(neco)
}
a volas to potom ako
funkcia(&prvyZaznam);
tak ovplyvnis premennu prvyZaznam vnutri funkcie (ak si ju pamatas mimo tej fukcie)

BTW. pri objektovom programovani je dobre mat objekt typu spojkovy zoznam v ktorom je ulozeny aj ten prvyZaznam, a potom nemusis robit taketo harakiri, vsetko je vnutri objektu a predavas si len pointer na cely objekt.
P.S. resp. nepredavas si nic ale pouzivas fcie nad tym objektom t.j. volas fciu stylom mojzoznam.ZmazZaznam(cislo); apod. To je OOP, preto je OOP prehladnejsie.

Zpět do poradny Odpovědět na původní otázku Nahoru