阅读下列函数说明、图和C代码,将应填入(n)处的字句写在答题纸对应栏内。 【说明】 在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树。程序构造一棵二叉排序树,每个节点存储一

admin2014-10-11  56

问题 阅读下列函数说明、图和C代码,将应填入(n)处的字句写在答题纸对应栏内。
【说明】
在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树。程序构造一棵二叉排序树,每个节点存储一个单词,按字典序列,较小的在左子树,较大的在右子树。
函数中使用的预定义符号如下:
    typedef struct TreeNode{/*二叉排序树节点*/
    char*word;
    struct TreeNode  *left,  *right;
    }BNODE;
    【函数】
    int getWord(FILE*fpt,  char*word)
    /*从文件fpt中读取单词Nword中,到达文件结束时返回0*/
    {
charc ;
    C=fgetc(fpt);
    if(C==EOF)return 0;
    /*跳过单词间的非字母字符*/
    while(!(tolower(c)  >=  ‘a’  &&toloWer(c)  <=  ‘z’)){
    C=fgetc(fpt);
    if(c==EOF)return0;
    }
    /*不区分大小写*/
    while(tolower(c)  >=  ‘a’  &&toloWer(c)  <=  ‘z’){
    *word++=C:
    C=fgetc(fpt);
    }
    *word=‘\0’;
    return 1;
}
Void BTree(BNODE**t,char*word)
{
    BNODE*ptr,*p;
    int compres;
    p=NULL;
    (1)  ;
    while(ptr){
    compre$=strcmp(word,(2));
    if(!compres){
    return;
    )else{
    (3);
    ptr=compres  >0  7 p七r一>r~ght  :  ptr一>left;
    }
    }
    ptr=  (BNODE*)malloc(sizeof ptr);
    ptr一>left=ptr一>right=NULL;
    ptr一>word=  (char*)malloc(strlen(word)  +1);
    strcpy(ptr一>word,  word);
    if(p==NULL){
    (4)  ;
    }else if(compres>0){
    p一>right=ptr;
    )else{
    p一>left=ptr;
    }
}
int main()
{
    FILE*fpt;
    char word[40];
    BNODE*rool=NULL:
    if((fpt=fopen(“text.in”,  “r”)}==NULL){
    printf(“不能打开文件text.in!\n”);
    return1;
    }
    whi1e(getWord(fpt,word)==1){
    BTree((5));
    }
    fclose(fpt);
    return0;
}

选项

答案(1)ptr=*t(2)ptr一>word(3)p=ptr (4)*t=ptr(5)&root,word

解析 ptr指针在使用前需要初始化,空(1)应填ptr=*t。构造的是二叉排序树,空(2)自然是比较单词word与ptr指针所指的节点单词,故应填ptr一>word。空(3)接下来的修改指针ptr使ptr手旨向了其子节点,为了正确插入节点,需要记录父节点指针。因此ptr需要保存下来,故空(3)应填p=ptr。p==NULL对应的是空树的情况,因此空(4)应填*t=ptr。参照BTree函数的定义,空(5)应填&root,word。注意是&root而不是root。
转载请注明原文地址:https://jikaoti.com/ti/YUi7FFFM
0

相关试题推荐
最新回复(0)