目的: 檢驗學員對 C 程式設計的認知
1
以下程式碼是個 XOR linked list 的實作,在這樣的資料結構可表示為:
要往下一格移動時,我們需要前一格在哪和這一格的位置。例如我們現在在 HAT
(1), 已知前一格是 (0),那麼下一格就是 link(1) XOR 0
= 2 XOR 0
= 2,也就是 CAT
。繼續,現在位於 CAT
(2),前一格在 (1),於是下一格就是 link(2) XOR 1
= 2 XOR 1
= 3,亦即 EAT
,依此類推。只要當找出來的下一格是 (0) 就結束。
請補完程式碼。
作答區
UCCU = ?
(a)
shift_lxr(p_left, p_right, p_this);(b)
shift_lxr(p_right, p_left, p_this);(c)
if (p_left) shift_lxr(p_left, p_right, p_this);(d)
shift_lxr(p_this ? p_left: p_right, p_this, p_this)(e)
shift_lxr(p_this ? p_right: p_left, p_this, p_this)VCCV = ?
(a)
shift_lxr(p_left, p_right, p_this);(b)
shift_lxr(p_right, p_left, p_this);(c)
if (p_right) (p_right, p_left, p_this);(d)
shift_lxr(p_this ? p_left: p_right, p_this, p_this)(e)
shift_lxr(p_this ? p_right: p_left, p_this, p_this)延伸問題:
1
考慮以下實作 Reference counting 的程式碼:
請補完程式碼。
作答區
ABA = ?
(a)
ref_dec(child->ref_dec)(b)
if (child) ref_dec(child->ref_dec)(c)
if (child) ref_dec(*child->ref_dec)(d)
if (child) ref_dec(&child->refcount);CDC = ?
(a)
ref_inc(*nodes->refcount)(b)
ref_inc((*node)->refcount)(c)
ref_inc(&*nodes->refcount)(d)
ref_inc((*nodes).refcount)(e)
ref_inc(&(*nodes)->refcount)(f)
ref_inc(*nodes)延伸問題: