阅读下列函数说明、图和C代码,回答问题 [说明] 在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树。 程序构造一棵二叉排序树,每个节点存储一个单词,按字典序列,

admin2012-02-20  23

问题 阅读下列函数说明、图和C代码,回答问题
[说明]
   在进行文法分析的时候,通常需要检测一个单词是否在我们的单词列表里。为了提高查找和定位的速度,通常都要画出与单词列表所对应的单词查找树。
   程序构造一棵二叉排序树,每个节点存储一个单词,按字典序列,较小的在左子树,较大的在右子树。
   函数中使用的预定义符号如下:
   typedef struct TreeNode{/*二叉排序树节点*/
   char *word;
   struct TreeNode *left, *right;
   }BNODE;
   [函数]
   int getWord(FILE *fpt, char *word)
   /*从文件fpt中读取单词到word中,到达文件结束时返回0*/
   {
   char c;
   c = fgetc(fpt);
   if(c == EOF)return 0;
   /*跳过单词间的非字母字符*/
   while(!(tolower(c) >= ’a’ && tolower(c) <= ’z’)){
   c = fgetc(fpt);
   if(c == EOF)return 0;
   }
   /*不区分大小写*/
   while(tolower(c) >= ’a’ && tolower(c) <= ’z’){
   *word++ = c;
   c = fqetc(fpt);
   }
   *word = ’\0’;
   return 1;
   }
   void BTree(BNODE **t, char *word)
   {
   BNODE *ptr, *p;
   int compres;
   p = NITLL;
     (1)  ;
   while(ptr){
   compres = strcmp(word,  (2)  );
   if(!compres){
   return;
   }else{
     (3)  ;
   ptr = compres > 0 ? ptr->right : 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 *root = NULL;
   if((fpt = fopen("text.in", "r")) == NULL){
   printf("不能打开文件text.in! \n");
   return 1;
   }
   while(getWord(fpt, word) == 1){
   BTree  (5)  ;
   }
   fclose(fpt);
   return 0;
   }

选项

答案ptr=*t ptr->word p=ptr *t=ptr &root,word

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

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