用类C语言写出求广义表深度以及复制广义表的算法。

admin2017-04-28  34

问题 用类C语言写出求广义表深度以及复制广义表的算法。

选项

答案定义一个广义表类型如下: typedef struct node{ int flag; union{ elemType data; struct node *pointer; }; struct node *link; }BSNode,*BSLinkList; //求广义表深度 int genlistDepth(BSLinkList list}{ /*list存放广义链表的首地址,该算法返回广义链表的深度*/ BSLinkList stackl[M],p; /*stackl用来记录子表的起始位置*/ /*stack2用来记录子表当前的深度,depth用来表示当前所求子表的深度,maxdep用来记录当前已 求出的那些子表的最大深度,stackl和stack2共用一个栈顶指针*/ int stack2 [M], depth=0,maxdep=0, top=—1; p=list—>pointer, /*将p指针指向广义链表的第一个元素所在的链接点*/ if(p!=NULL){ dof while(p!=NULL){ stackl[++top]=p; /t记录当前子表的起始位置*/ stack2[-- top]=depth; /*记录当前所求子表的深度*/ if (p—>flag==1){ /*当前链接点元素是予表*/ depth++; /*当前层次数加1*/ p=p—>pointer; /*移动到下一层*/ } else p=NULL; } if (maxdep<depth){ maxdep=depth; /*记录当前已求得的最大层次数*/ } p=stackl[top]; /*退回到上一层,移动到下一个元素,查看是否有子表*/ depth=stack2(top--]; p=p—>link; }(p! =NULL&&top! =—1); } return maxdep+1; } BSL/nkList copyBSList (BSLinkList lista) { BSLinkList listb=NULL; if {lista !=NULL) { listb=(BSLinkList) malloc ( sizeof <BSNode)) ; listb—>flaq=lista—>flag; if (lista—>flag==0) listl:—>clata=lista—>data; else listb—>pointer=copyBSList (lista—>pointer) ; listb—>link—copyBSList(lista—>link); return listb; }

解析
转载请注明原文地址:https://kaotiyun.com/show/WWRi777K
0

最新回复(0)