3. Jednosmerný lineárny zoznam
3.6 Odstránenie prvku zo zoznamu
Operáciu odstránenia označeného prvku zo zoznamu môžeme
realizovať takto: najskôr nájdeme prvok, ktorý v zozname predchádza
označenému prvku a v ňom potom zmeníme hodnotu ukazovateľa dalsi . Označený prvok zrušíme - uvoľníme pamäť, ktorá mu bola pridelená. Zrušenie prvého prvku je špeciálnym prípadom.
void odstran(TPrvok **z, TPrvok *ten)
{
TPrvok *pom ;
if (*z == ten) *z = *z->dalsi; /* odstránenie prvého */
else {
/* nájdenie predchodcu odoberaného prvku */
pom = *z;
while (pom->dalsi != ten) pom = pom->dalsi;
/* spojenie predchodcu s nasledovníkom odober. prvku */
pom->dalsi = ten->dalsi;
}
/* zrušenie dynamickej premennej - odstránenie prvku */
free((void*)ten);
}
|
OBRÁZOK |
Pri odstraňovaní posledného prvku je potrebné zmeniť aj hodnotu ukazovateľa k. Upravte funkciu tak, aby ošetrovala aj tento prípad !
V konkrétnych aplikáciách lineárnych zoznamov
bývajú operácie vloženia alebo odobratia prvku často spojené s
vyhľadaním prvku alebo miesta pre jeho vloženie.
Precvičme si
Doplňte
program z predchádzajúcej časti (program umožňujúci vo forme menu
pracovať s lineárnym zoznamom) o možnosť odobrať zvolený
prvok zo zoznamu. Ak sa taký prvok vyskytuje v zozname viackrát,
odstráni sa len jeho prvý výskyt.
|
[Riešenie]
|
V
prvkoch jednosmerného lineárneho zoznamu sú uložené celé čísla. Napíšte
program, ktorý upraví pôvodný zoznam tak, že z neho vynechá všetky tie
prvky, ktorých hodnota sa rovná najväčšiemu číslu v zozname (t.j.
odstráni všetky výskyty maxima). |
[Riešenie]
|
|