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]