阅读下列函数说明、图和C代码,回答问题[说明] 在进行文法分析的时候,通常需要检测一个单词是否在
阅读下列函数说明、图和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
如下图,在三棱锥A-BCD中,E,F,G,H分别是边AB,AC,CD,BD的中点,且AD=BC,那 数学 2020-04-26 …
下图在某地北京时间9月23日13时20分的景观照片。据此完成13~14题。小题1:该日A.拉萨日出 语文 2020-05-13 …
超难的数学题3、如下图,在一个尖朝下的等边三角形中,连接各边中点,得到1个尖朝上的三角形和3个尖朝 数学 2020-06-23 …
如图,在角ABC中,AB=AC,点P为角角ABC内一点,且角ACP=角CBP,角A=50度,则角B 数学 2020-06-27 …
国民党军队由全面进攻解放区改为重点进攻陕北和山东解放区的主要原因在于国民党A.在陕北和山东的兵力处 其他 2020-07-11 …
几何问题(立体图形)33.如下图,在棱长为3的正方体中由上到下,由左到右,由前到后,有三个底面积是 数学 2020-08-02 …
1.如下图,在三角形ABC中,BD=2DC,AE=2ED,FC=7,求AF.(注:D在BC边上;F在 数学 2020-11-03 …
下列关于地图的叙述,不正确的是A.地图是我们学习地理必不可少的工具B.地图上常用的图例符号有统一的规 其他 2020-11-28 …
如图,在等边三角新abc中,点d为ab上一点,联结cd,直线l与线段ca,cd,c如图,在等边三角新 数学 2020-12-07 …
国民党军队重点进攻陕北和山东解放区,主要是因为A.在陕北和山东兵力处于优势B.用于进攻的机动兵力已大 其他 2020-12-12 …