试编写递归算法,逆转广义表中的数组元素。例如:将广义表:(a,(b,c),) , (((d),e),f)逆转为: ((f.,(e,(d))),(() , (c,b)) ,a).
void GList_Reverse (GList A)//递归逆转广义表A{GLNode*ptr[MAX_SIZE];if (A->tag&&A->ptr.tp)//当A不为原子且表尾非空时才需逆转{for (i=0.p=A;p;:p=p->ptr.tp,i++){if (p->ptr.hp)GList_Reverse (p->ptr.hp);//递归逆转各子表ptr[i]=p->ptr.hp;}for (p=A;p;p=p->ptr.tp) //重新按逆序排列各子表的顺序p->ptr.hp=ptr[--i];}}//GList_Reverse
举一反三
- 一般情况下,将递归算法转换成等价的非递归算法应该设置: A: 堆栈 B: 队列 C: 广义表 D: 数组
- 下列关于广义表的叙述中,正确的是( )。 A: 广义表可以是一个多层次的结构、 B: 广义表至少有一个元素。 C: 广义表可以被其他广义表所共享。 D: 广义表不能是递归表。 E: 广义表的长度总是有限的。 F: 广义表必须至少有一个元素是子表。 G: 广义表不可以是自身的子表。 H: 广义表的深度总是有限的。
- 已知广义表A=((a,b,c),(d,e,f))试写出从表A中取出原子元素e的运算。
- 广义表A((a,b,c),(d,e,f))的表尾______
- 广义表A=((a,b),(c,d),(e,f)),则A表尾为( )。 A: e,f B: (e,f) C: (c,d),(e,f) D: ((c,d),(e,f))
内容
- 0
对于一组广义表A,B(a,b),C(c,(e,f,g)),D(B,A,C),E(B,D),其中的E是() A: 线性表 B: 纯表 C: 递归表 D: 再入表
- 1
广义表A((a,b,c),(d,e,f))的表尾为()。
- 2
广义表((a,b,c,d),e,(f,g))的表尾是()。 A: e,(f,g) B: (e,(f,g)) C: (abcd) D: (),e,(f,g)
- 3
广义表((a),(b,c),(d,e,(f,g,h)))的表尾是 。
- 4
以下关于广义表的叙述中,()是不正确的。 A: 广义的元素可以是子表 B: 广义表可装其他广义表所共享(引用) C: 广义表可以是递归的表 D: 广义表不能为空表