BPC-ALD_Zpracované_otazky_ke_zkousce
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
c. Odebere prvek, na který ukazuje iA. (Stejskal)struct TListNode *p_old = aList->iA; //p_old ukazuje na uzel, na který ukazuje iA
aList->iA->iPrev->iNext = aList->iA->iNext;
//svázání předchůdce a následníka iA
aList->iA->iNext->iPrev = aList->iA->iPrev;
//svázání předchůdce a následníka iA
free(p_old);
d. Vymění skupinu prvků mezi ukazateli iA a iB s prvky mezi ukazateli iB a iTail.
Napadlo m
ě to jen takhle zbytečně složitě
struct QueueNode tmpA = *iA;
struct QueueNode tmpB = *iB;
iA->iNext = iB-> iNext;
iA->iNext->iPrev = iA;
iB->iPrev = iTail->iprev;
iB->iPrev->iNext = iB // doplneni provazani (Turon)
iB->iNext = tmpA.iNext;
iB->iNext->iPrev = iB;
iTail->iPrev = tmpB.iPrev;
iTail->iprev->iNext = iTail;
Přednáška 5: Abstraktní datové typy
1. Máme zadán lineárně vázaný seznam tvořený prvky TNode obsahující ukazatel iNext. Máme ukazatele na
začátek iHead a na konec iTail tohoto seznamu a dva ukazatele iA a iB ukazující na obecné místo v
seznamu. (Přičemž vždy platí, že ukazatel iB směřuje na prvek, který je v lin. seznamu umístěn až za
prvkem na který směřuje ukazatel iA.) Napište kód v jazyce C, který: (+++)
//seznam je jednosměrný
a. Odebere poslední prvek ze seznamu.
//(Turoň)
struct TNode *tmp = iHead;
while(tmp->iNext != iTail){
tmp = tmp->iNext;
}
iTail = tmp;
iTail->iNext = NULL;
free(tmp->iNext);
b. Odebere první prvek ze seznamu.
//(Turoň)
struct TNode *tmp = iHead;
iHead = iHead->iNext;
free(tmp);
c. Odebere prvek, na který ukazuje iA.
//(Turoň)
struct TNode *tmp = iHead;
while(tmp->iNext!=iA){
tmp = tmp->iNext;
}
tmp->iNext = tmp->iNext->iNext; //tmp->iNext = iA->iNext //obojí správně
free(iA);
d. Vymění skupinu prvků mezi ukazateli iA a iB s prvky mezi ukazateli iB a iTail.