填空题写出下面算法的功能。voidfunction(Bitree*t){if(p!=NULL){function(p-lchild);function(p-rchild);printf(“%d”,p-data);}}

填空题
写出下面算法的功能。voidfunction(Bitree*t){if(p!=NULL){function(p->lchild);function(p->rchild);printf(“%d”,p->data);}}

参考解析

解析: 暂无解析

相关考题:

已知一棵二叉树用二叉链表存储,t指向根节点,P指向树中任一节点。下列算法为输出从t到P之问路径上的节点。[C程序]define MaxSize 1000typedef struct node {TelemType data ;struct node *ichiid,*rchiid;}BiNode,*BiTree;void Path(BiTree t,BiNode *P){BiTree *stack[Maxsize],*stackl[Maxsize],*q;int tag[Maxsize],top=0,topl;q=t;/*通过先序遍历发现P*/do{while(q!=NULL &&q!=p)/*扫描左孩子,_日.相应的节点不为P*/{ (1) ;stack[top]=q;tag[top]=0;(2) ;}if(top>0){ if(stack[top]=P) break; /*找到P,栈底到栈顶为t到P*/if(tag[top]==1)top--;else { q=stack[top];q=q->rchiid;tag[top]=1;}}} (3) ;top--;topl=0;while(top>0) {q=stack[top]; /*反向打印准备*/topl++;(4) ;top--;}while( (5) ){ /*打印栈的内容*/q=stackl[topl]jprintf(q->data);topl--;}}

●试题三阅读下列函数说明和C函数,将应填入(n)处的字句写在答题纸的对应栏内。【函数3说明】函数DeleteNode(Bitree*r,int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:typedef struct Tnode{int data;/*结点的键值*/struct Tnode*Lchild,*Rchild;/*指向左、右子树的指针*/}*Bitree;在二叉查找树上删除一个结点时,要考虑三种情况:①若待删除的结点p是叶子结点,则直接删除该结点;②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点p;③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s ,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。【函数3】int DeleteNode(Bitree*r,int e){Bitree p=*r,pp,s,c;while( (1) ){/*从树根结点出发查找键值为e的结点*/pp=p;if(e<p->data)p=p->Lchild;else p=p->Rchild;}if(!p)return-1;/*查找失败*/if(p->Lchild p->Rchild) { /*处理情况③*/s= (2) ;pp=p;while( (3) ){pp=s;s=s->Rchild;}p->data=s->data;p=s;}/*处理情况①、②*/if( (4) )c=p->Lchild;else c=p->Rchild;if(p==*r)*r=c;else if( (5) )pp->Lchild=c;else pp->Rchild=c;free(p);return 0;}

假设双链表结点的类型如下: Typedef struct linknode {int data; /*数据域*/ struct linknode *llink; /*llink是指向前驱结点的指针域*/ struct linknode *rlink; /*rlink是指向后续结点的指针域*/ }bnode 下面给出的算法段是要把一个q所指的新结点作为非空双向链表中的p所指结点的前驱结点插入到该双链表中,能正确完成要求的算法段是(32)。A.q->rlink=p;q->llink=p->llink;p->llink=q;p->llink->rlink=q;B.p->llink=q;q->rlink=p;p->llink->rlink=q:q->llink=p->llink;C.q->llink=p->llink:q->rlink=p;p->llink->rlink=q;p->llink=q;D.以上都不对

阅读以下说明和C语言函数,将应填入(n)处。[说明]二叉排序树或者是一棵空树,或者是具有如下性质的二叉树:若它的左子树非空,则左子树上所有结点的值均小于根结点的值;若它的右子树非空,则右子树上所有结点的值均大于根结点的值;左、右子树本身就是两棵二义排序树。函数insert_BST(char *str)的功能是:对给定的字符序列按照ASCⅡ码值大小关系创建二叉排序树,并返回指向树根结点的指针。序列中重复出现的字符只建一个结点,并由结点中的Count域对字符的重复次数进行计数。二叉排序树的链表结点类型定义如下:typedef struct BSTNode{char Elem; /*结点的字符数据*/int Count; /*记录当前字符在序列中重复出现的次数*/struct BSTNode *Lch,*Rch; /*接点的左、右子树指针*/}*BiTree;[函数]BiTree insert_BST(char *str){ BiTree root,parent,p;char (1); /*变量定义及初始化 */root=(BiTree)malloc(sizeof(struct BSTNode));if(!root||*s=='\0') return NULL;root->Lch=root->Rch=NULL; foot->Count=1; root->Elem=*s++;for(; *s!='\0';s++) {(2); parent=NULL;while (p){ /*p从树跟结点出发查找当前字符*s所在结点 */parent = p;if(*s==p->Elem)/*若树中已存在当前字符结点,则当前字符的计数值加1*/{p->Count++; break;}else /*否则根据字符*s与结点*p中字符的关系,进入*p的左子树或右子树*/if (*s>p->Elem) p=p->Rch;else p=p->Lch;}/*while*/if( (3)) {/* 若树中不存在字符值为*s的结点,则申请结点并插入树中 */p=(BiTree)malloc(sizeof(struct BSTNode));if(!p)return NULL;p->Lch=p->Rch=NULL; p->Count=1; p->Elem=*s;/*根据当前字符与其父结点字符值的大小关系,将新结点作为左子树或右子树插入*/if(p->Elem>parent->Elem) (4)=p;else (5)=p;}}/*for*/return root;}

阅读下列C函数和函数说明,将应填入(n)处的字句写在对应栏内。【说明】函数DeleteNode (Bitree *r, int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:typedef struct Tnode{int data; /*结点的键值*/struct Tnode *Lchild, *Rchild; /*指向左、右子树的指针*/}*Bitree:在二叉查找树上删除一个结点时,要考虑3种情况:①若待删除的结点p是叶子结点,则直接删除该结点;②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点p;③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。【函数】int DeleteNode (Bitree *r,int e) {Bitree p=*r,pp,s,c;while ( (1) ){ /*从树根结点出发查找键值为e的结点*/pp=p;if(e<p->data) p=p->Lchild;else p=p->Rchild;}if(!P) return-1; /*查找失败*/if(p->Lchild p->Rchild) {/*处理情况③*/s=(2);pp=pwhile (3) {pp=s;s=s->Rchild;}p->data=s->data; p=s;}/*处理情况①、②*/if ( (4) ) c=p->Lchild;else c=p->Rchild;if(p==*r) *r=c;else if ( (5) ) pp->Lchild=c;else pp->Rchild=c;free (p);return 0;}

简述非坚持、1-坚持及P-坚持算法的特点。

阅读下列函数说明和C函数,将应填入(n)处。【函数3说明】函数DeleteNode(Bitree * r,int e)的功能是:在树根结点指针为r的二叉查找(排序)树上删除键值为e的结点,若删除成功,则函数返回0,否则函数返回-1。二叉查找树结点的类型定义为:typedef struct Tnode{int data; /*结点的键值*/struct Tnode * Lchild,*Rchild; /*指向左、右子树的指针*/} * Bitree;在二叉查找树上删除一个结点时,要考虑三种情况:①若待删除的结点p是叶子结点,则直接删除该结点;②若待删除的结点p只有一个子结点,则将这个子结点与待删除结点的父结点直接连接,然后删除结点P;③若待删除的结点p有两个子结点,则在其左子树上,用中序遍历寻找关键值最大的结点s,用结点s的值代替结点p的值,然后删除结点s,结点s必属于上述①、②情况之一。【函数3】int DeleteNode(Bitree * r,int e){Bitree p=*r,pp,s,c;while((1)){ /*从树根结点出发查找键值为e的结点*/pp=p;if(e<p->data)p=p->Lchild;else p=p->Rchild;{if(!p)return-1; /*查找失败*/if(p->Lchild p->Rchild){/*处理情况③*/s=(2); pp=p;while((3)){pp=s;s=s->Rchild;}p->data=s->data;p=s;}/*处理情况①、②*/if((4))c=p->Lchild;else c=p->Rchild;if(p==*r)*r=c;else if((5))pp->Lchild=c;else pp->Rchild=c;free(p);return 0;}

p指向线性链表中某一结点,则在线性链表的表尾插入结点s的语句序列是()。A.while(p->next!=NULL)p=p->next;p->next=s;s->next=NULL;B.while(p!=NULL)p=p->next;p->next=s;s->next=NULL;C.while(p->next!=NULL)p=p->next;s->next=p;p->next=NULL;D.while(p!=NULL)p=p->next->next;p->next=s;s->next=p->next;

阅读以下应用程序说明和C程序,将C程序段中(1)~(7)空缺处的语句填写完整。【说明】某超市集团为发展业务向社会公开招聘N个工种的工作人员,每个工种各有不同的编号(1至M)和计划招聘人数。每位应聘者需申报两个工种,并参加集团组织的考试。该集团公司将按应聘者的成绩从高分至低分的顺序进行排队录取。具体录取原则是:从高分到低分依次对每位应聘者先按其第一志愿录取;当不能按其第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其第二志愿录取。以下C程序为输出各工种实际招聘的应聘人员,每个工种都保留一个录取者的有序队列。录取处理循环直至招聘额满或已对全部应聘者都作了录取处理后跳出。C程序中,类型STU包含有应聘者的基本信息:编号、成绩、志愿、排队成绩和录取志愿号。数组 rzl)的每个元素对应一个工种,包含有计划招聘人数和已录取的人数。【C程序】includedefine N 36define EDMARK 5typedef struct stu {int no, total, z[2], sortm, zi;struct stu *next;} STU;struct rznode {int lmt, count;STU *next;} rz [N];STU *head = NULL, *over = NULL;int allFILE *fp;char dataf [ ] = "zp2008.dat" ;print(STU *p){ for (;p!=NULL; p = p->next)printf( "%d(%d) \t" , p->no, p->total}insert(STU **p, STU *u){ STU *v, *q;for (q = *p;q != NULL; v = q , (1) )if (q-> sortm < u->sortm)break;if ( q == *p)(2);else(3);u->next = q ;}main ( ){ int zn, i, no, total, zl, z2 ;STU *p, *v, *q;fp = fopen(dataf, "r" );if (fp == NULL){ printf ("Can't open file %s.kn" ,dataf);exit (0);}fscanf (fp, "%d" ,zn);for (all = 0, i = 1; i <= zn; i++){ fscanf (fp, "%d", rz [ i ].lmt ;rz[i].count = 0;rz[i].next = NULL;all +=(4);}for (;;){ if (( fscanf(fp, "%d%d%d%d" ,no,total,zl,z2)) != 4 )break;p = ( STU *) malloc (sizeof (STU));p->no = no;p->total = p->sortm = total;p->zi = 0;p->z[0] = z1;p->z[1] = z2;(5);}fclose (fp);for (;all head != NULL;){ p = head;head = head->next;if (rz[p->z[p->zi]].count <(6)){ rz[p->z[p->zi]].count ++;insert(rz[p->z[p->zi]].next,p);all--;continue;}if (p->zi >= 1 ){ p->next = over;ver = p;continue;}p->sortm -= DEMARK;(7);insert(head,p);}for (i = 1; i <= zn; i++ ){ printf("%d:\n" ,i);print( rz[i ].next);printf(" \n");}printf( "over:\n" );print(head);print(over);printf(" \n");}

阅读以下说明和C语言函数,将应填入(n)处的字句写在对应栏内。[说明]完成以下中序线索化二叉树的算法。[函数]Typedef int datatype;Typedef struct node {Int ltag, rtag;Datatype data;*lchild,* rchild;}bithptr;bithptr pre;void inthread ( p );{if{inthread ( p->lchild );if ( p->lchild==unll ) (1);if ( P->RCHILD=NULL) p->rtag=1;if (2){if (3) pre->rchild=p;if ( p->1tag==1 )(4);}INTHREAD ( P->RCHILD );(5);}}

阅读以下说明,回答问题1~5,将解答填入对应的解答栏内。[说明] 若s和t是用单链表存储的两个串,设计一个函数将s串中首次与串t匹配的字串逆置。linkstring * invert - substring ( s, t)linkstring * s, * t;{linkstring *prior, *p, *t1, *r, *q, *u;prior =s;p=s;t1 =t;if ( (1) ) printf ( "error\n") ;else{while { p ! = NULL t1! = NULL){if ( p- >data = = t1 - >data){p = p- >link;t1 = t1- >link;}else{(2)p = prior - > link;}t1 = t- >link;}if ( t1 ! : NULL) printf ("cannot find");else{(3)r = q- >link;q- >link = p;while (r ! = p){u = r- >link;(4)q=r;r = u;}(5)}}}

函数min()的功能是:在带头结点的单链表中查找数据域中值最小的结点。请填空includestruc 函数min()的功能是:在带头结点的单链表中查找数据域中值最小的结点。请填空include <stdio.h>struct node{ int data;struct node *next;};int min(struct node *first)/*指针first为链表头指针*/{ struct node *p; int m;p=first->next; re=p->data; p=p->next;for( ;p!=NULL;p=【 】)if(p->data<m ) re=p->data;return m;}

阅读以下函数说明和C语言函数,将应填入(n)处的字句写在对应栏内。[说明]已知一棵二叉树用二叉链表存储,t指向根结点,p指向树中任一结点。下列算法为输出从t到P之间路径上的结点。[C程序]define Maxsize 1000typedef struct node{TelemType data;struct node*1child,*rchild;}BiNode,*BiTree;void Path(BiTree t,BiNode*P){ BiTree*stack[Maxsize],*stackl[Maxsize],*q;int tag[Maxsize],top=0,topl;q=t;/*通过先序遍历发现P*/do(while(q!=NULL q!=p)/*扫描左孩子,且相应的结点不为P*/{ (1);stack[top]=q;tag[top]=0;(2);}if(top>0){ if(stack[top]==P) break; /*找到P,栈底到栈顶为t到P*/if(tag[top]==1)top--;else{q=stack[top];q=q->rchild;tag[top]=1;}}} (3);top--; topl=0;while(top>0){q=stack[top]; /*反向打印准备*/topl++;(4);top--;}while((5)){ /*打印栈的内容*/q=stackl[topl];printf(q->data);topl--;}}

阅读下列说明和C程序,将应填入(n)处的字句写在对应栏中。[说明]借助一个栈结构,可实现二叉树的非递归遍历算法。InOrderTraverse数实现中序非递归遍历,遍历过程如下:若不是空树,根节点入栈,进入左子树;若已经是空树,则栈顶元素出栈,访问该元素(根节点),进入该节点的右子树,继续直到遍历完成。函数中使用的预定义符号如下:typedef struct BiTNode{int data;struct BiTNode *iChiid,*rChiid;} BiTNode,*BiTree;typedef struct SNode{/*链栈的节点类型*/BiTree elem;struct SNode *next;}SNode;[函数]int InOrderTraverse(BiTree root){BiTree P;SNode *q,*stop=NULL;/*不带头节点的单链表作为栈的存储结构*/P=root;while(p !=NULL || stop !=NULL){if( (1) ){ /*不是空树*/q=(SNode*)malloc(sizeof q);if(q==NULL)return-1;/*根节点指针入栈*/(2);q->elem=P;stop=q;P=(3); /*进入根的左子树*/}else{q=stop;(4); /*栈顶元素出栈*/printf("%d|,q->elem->data); /*防问根节点*/P=(5); /*进入根的右子树*/free(q); /*释放原栈顶元素*/}/*if*/}/*while*/return 0;}/*InOrderTraverse*/(1)

阅读以下程序说明和C语言程序,将应填入(n)处的字句写在对应栏内。【说明】希赛教育集团公司为发展生产向社会公开招聘M个工种的工作人员,每个工种各有不同的编号(1至M)和计划招聘人数。每位应聘者需申报两个工种,并参加公司组织的考试。公司将按应聘者的成绩从高分至低分的顺序进行排队录取。公司的录取原则是:从高分到低分依次对每位应聘者先按其第一志愿录取;当不能按其第一志愿录取时,便将他的成绩扣去5分后,重新排队,并按其第二志愿考虑录取。程序为输出各工种实际招聘的应聘人员,每个工种都保留一个录取者的有序队列。录取处理循环直至招聘额满或已对全部应聘者都做了录取处理。程序中,类型STU包含有应聘者的基本信息:编号、成绩、志愿、排队成绩和录取志愿号。数组rz[]的每个元素对应一个工种,包含有计划招聘人数和已录取的人数。【程序】include<stdio.h>include<malloc.h>define M 20define PEMARK 5typedef struct stu{int no, total, z[2], sortm, zi;struct stu *next;}STU;struct rzmode{int Imt, count;STU *next;}rz[M];STU *head=NULL, *over=NULL;int allFILE *fp;char dataf[]="pp07.dat";print(STU *p){for(;p!=NULL;p=p->next)printf("%d(%d)\t",p->no,p->total);}insert(STU **p, STU *u){STU *v, *q;for(q=*p;q!=NULL;v=q,(1))if(q->sortm<u->sortm)break;if(q==*p)(2);else (3);U->next=q;}main(){int zn, i, no, total, z1, z2;STU *p, *v, *q;fp=fopen(dataf, "r");if(fp==NULL){printf("Can't open file %s.\n",dataf);exit(0);}fscanf(fp, "%d",zn);for(all=0,i=1;i<=zn;i++){fscanf(fp,"%d",rz[i].Imt);rz[i].count=0;rz[i].next=NULL;all+=(4);}for(;;){if((fscanf(fp, "%d%d%d%d",no,total,z1,z2))!=4)break;p=(STU*)malloc(sizeof(STU));p->no=no;p->total=p->sortm=total;p->zi=0;p->z[0]=z1;p->z[1]=z2;(5);}fclose(fp);for(;all head !=NULL;){p=head; head=head->next;if(rz[p->z[p->zi]].count<(6)){rz[p->z[p->zi]].count++;insert(rz[p->z[p->zi]].next,p);all--;continue;}if(p->zi>=1){p->next=over;over=p;continue;}p->sortm-=DEMARK; (7);insed(head,p);}for(i=1;i<=zn;i++){printf("%d:\n",i);print(rz[i].next);printf("\n");}printf("over:\n");print(head);print(over);printf("\n");}

有如下程序: #includeiostream usingnamespacestd; classBase{ public: virtualvoidfunctionl(){cout'0';} voidfunction2(){out'1';} }; classDerived:publicBase{ oublic: voidfunctionl(){cout'2';} voidfunction2(){cout'3';} }; intmain(){ Base*p=newDerived(); p-functionl(); p-function2(); return0; } 运行时的输出结果是( )。A.01B.21C.03D.23

阅读下列函数说明和C函数,将应填入(n)处的字句写在对应栏内。[说明]二叉树的二叉链表存储结构描述如下:lypedef struct BiTNode{ datatype data;street BiTNode *lchiht, *rchild; /*左右孩子指针*/ } BiTNode, *BiTree;下列函数基于上述存储结构,实现了二叉树的几项基本操作:(1) BiTree Creale(elemtype x, BiTree lbt, BiTree rbt):建立并返回生成一棵以x为根结点的数据域值,以lbt和rbt为左右子树的二叉树;(2) BiTree InsertL(BiTree bt, elemtype x, BiTree parent):在二叉树bt中结点parent的左子树插入结点数据元素x;(3) BiTree DeleteL(BiTree bt, BiTree parent):在二叉树bt中删除结点parent的左子树,删除成功时返回根结点指针,否则返回空指针;(4) frceAll(BiTree p):释放二叉树全体结点空间。[函数]BiTree Create(elemtype x, BiTree lbt, BiTree rbt) { BiTree p;if ((p = (BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL;p->data=x;p->lchild=lbt;p->rchild=rbt;(1);}BiTree InsertL(BiTree bt, elemtype x,BiTree parent){ BiTree p;if (parent= =NULL) return NULL;if ((p=(BiTNode *)malloc(sizeof(BiTNode)))= =NULL) return NULL;p->data=x;p->lchild= (2);p->rchild= (2);if(parent->lchild= =NULL) (3);else{p->lchild=(4);parent->lchild=p;}return bt;}BiTree DeleteL(BiTree bt, BiTree parent){ BiTree p;if (parent= =NULL||parent->lchild= =NULL) return NULL;p= parent->lchild;parent->lchild=NULL;freeAll((5));return bt;

若已建立如下图所示的单向链表结构:在该链表结构中,指针p、s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是______。A.p=p->next;s->next=p;p->next=s;B.p=p->next;s->next=p->next;p->next=s;C.s->next=NULL;p=p->next;p->next=S;D.p=(*p).next;(*S).next=(*p).next;(*p).next=s;

若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是 ( )A.s->next=NULL;p=p->next;p->next=s;B.p=p->next;s->next=p->next;p->next=s;C.p=p->next;s-next=p;p->next=s;D.p=(*p).next;(* s).next=(* p).next;(* p).next=s;

int AA(LNode *HL , ElemType x){int n=0; LNode *p=HL;while (p!=NULL){if (p->data= =x) n++;p=p->next; }return n;}对于结点类型为LNode的单链表,以上算法的功能为:()

写出下面算法的功能。voidfunction(Bitree*t){if(p!=NULL){function(p-lchild);function(p-rchild);printf(“%d”,p-data);}}

写出下面算法的功能。Bitree*function(Bitree*bt){Bitree*t,*t1,*t2;if(bt==NULL)t=NULL;else{t=(Bitree*)malloc(sizeof(Bitree));t-data=bt-data;t1=function(bt-left);t2=function(bt-right);t-left=t2;t-right=t1;}return(t);}

函数depth实现返回二叉树的高度,请在空格处将算法补充完整。intdepth(Bitree*t){if(t==NULL)return0;else{hl=depth(t-lchild);hr=());if(())returnhl+1;elsereturnhr+1;}}

写出算法的功能。int L(head){ node * head; int n=0; node *p; p=head; while(p!=NULL) { p=p-next; n++; } return(n); }

填空题写出下面算法的功能。Bitree*function(Bitree*bt){Bitree*t,*t1,*t2;if(bt==NULL)t=NULL;else{t=(Bitree*)malloc(sizeof(Bitree));t-data=bt-data;t1=function(bt-left);t2=function(bt-right);t-left=t2;t-right=t1;}return(t);}

填空题函数depth实现返回二叉树的高度,请在空格处将算法补充完整。intdepth(Bitree*t){if(t==NULL)return0;else{hl=depth(t-lchild);hr=());if(())returnhl+1;elsereturnhr+1;}}

填空题写出算法的功能。int L(head){ node * head; int n=0; node *p; p=head; while(p!=NULL) { p=p-next; n++; } return(n); }