问答题

试题五
阅读以下说明和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;
}

【参考答案】

(1) *s=str (2) p=root (3) p==NULL
(4) parent->Rch (5) p......

(↓↓↓ 点击下方‘点击查看答案’看完整答案、解析 ↓↓↓)
热门 试题

问答题
试题七 阅读以下应用说明以及用Visual Basic编写的程序代码,将应填入 (n) 处的字句写在答题纸的对应栏内。 【应用说明】 本应用程序的运行窗口中将显示一个简单的模拟时钟如下图所示: 该圆形钟面上有时针、分针和秒针在运动,不断显示系统的当前时间。 在开发该应用时,首先建立一个圆形Shape控件作为钟面(背景为白色)。设圆心为像素坐标(X0,Y0),半径为940。再在圆心处建立一个小的实心圆Shape控件作为轴心。钟面上的刻度3,6,9,12为四个标签。时针、分针、秒针(红色)为线型控件,名称分别为LineH、LineM、LineS,线宽属性值分别为:3,2,1,线长属性值分别为500,700,900。这三个线型控件的起点坐标都固定在(X0,Y0),其终点坐标随转角θ而动态变化: 设置定时器Timer1使该时钟能反映系统的当前时间,其定时间隔为0.5秒,该定时器的Interval属性值应设置为 (1) 。每隔0.5秒,秒针需要调整位置,但分针和时针只是在初始显示时以及在每次秒计数为0时才需要调整位置(可节省计算量)。 【程序代码】 Const Pi = 3.1416 Const X0 = 1750 Const Y0 = 1150 Const LH = 500, LM = 700, LS = 900 Public first As Boolean Private Sub Form_Load() LineS.X1 = X0 秒针的起点位置 LineS.Y1 = Y0 LineM.X1 = X0 分针的起点位置 LineM.Y1 = Y0 LineH.X1 = X0 时针的起点位置 LineH.Y1 = Y0 first = True End Sub Private Sub Timer1_Timer() S = Second(Time) S_seta = Pi * (2) 秒针的转角 LineS.X2 = X0 + LS * Sin(S_seta) 秒针的终点位置 LineS.Y2 = Y0 - LS * Cos(S_seta) If ( (3) ) Then M = Minute(Time) LineM.X2 = X0 + LM * Sin(Pi*M 30) 分针的终点位置 LineM.Y2 = Y0 - LM * Cos(Pi*M 30) H = Hour(Time) If (H >= 12) Then H = H - 12 H_seta = Pi * ( (4) ) 时针的转角 LineH.X2 = X0 + LH * Sin(H_seta) 时针的终点位置 LineH.Y2 = Y0 - LH * Cos(H_seta) first = (5) End If End Sub