考虑广义表的头尾链表表示:
typedef enum {ATOM,LIST}ElemTag;
typedef struct GLNode{
ElemTag tag;
union{
AtomType atom;
struct{ struct GLNode *hp,*tp;} ptr;
}
}*GList;
第一步,取广义表
(
(
a
,
b
)
,
(
c
,
d
)
)
((a,b),(c,d))
((a,b),(c,d))的表尾:在对广义表进行取头尾操作时,尤其要注意,所取出来的广义表尾必定是广义表。因此,第一步取广义表尾时,取得的广义表为表尾为空的广义表,即
(
(
c
,
d
)
)
((c,d))
((c,d))。
第二步,取广义表
(
(
c
,
d
)
)
((c,d))
((c,d))的表头。显然,该表是一个表尾为空,表头为广义表的广义表,因此取表头之后结果为
(
c
,
d
)
(c,d)
(c,d)。
第三步,取广义表
(
c
,
d
)
(c,d)
(c,d)的尾。所取出的广义表尾仍然为广义表。因此,所取出的表尾是一个表头为原子类型的,表尾为空的广义表,即
(
d
)
(d)
(d)。