问答题 完善下列程序,每小题在Pascal语言(a)和C语言(b)中任选一题。下面是一个将广义表逆置的过程。例如,原来广义表为((a,b),c,(d,e)),经逆置后为((e,d),c,(b,a))。 typedef:ruct glist:node {int:tag; 8truct:glistnode*next; union{char data; struct{struct gl~stnode*hp, *tp;)ptr; }val; }*gli8t,gnode; glist reverse(p) glist:p; {glist q,h,t,s; if(p==NULL) q=NuLL; else {if (1) {q=(gli8t)malloc(s~zeof(gnode));q一>tag=0; q一>Val.data=p->va1.data; } else{(2) if(3) {t=reVerse(p一>Tal.pt:r.tp);8=t; while(8一>Tal.pt:r.tp!=NULL) S---"S一>val.p七r.tp; 8一>val.ptr.tp=(glist:)malloc(sizeof(gnode)); S=S一>val-pt:2=.tp;s一>tag=1;s一>Val.ptr.tp=NULL; s一>val.ptr.hp=h;(4)} else{q=(glist:)malloc(sizeof(gnode))jq一>tag=1; q一>Tal.ptr.tp=NULL;(5);} } } return(q); }【上海大学2002六、3(10分)】
【正确答案】正确答案:逆置广义表的递归模型如下:
【答案解析】