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
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…
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

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