int main() { while( gets(L[n].elem) )//得到正确的单词表L[n].elem { if( L[n].elem[0] == '#') break;//跳出循环的条件 L[n].length = strlen( L[n].elem ); G = CreateBItree( L[n].elem , G );//字符从表L[n].elem中获取 n++; } PostOrder( G ); printf("\n"); while( gets(S.elem) )//得到要检查的单词表 S.elem { if(S.elem[0] == '#') break;//跳出循环的条件 S.length = strlen( S.elem ); panduan( S ); } return 0;分析这个主函数
时间: 2024-04-26 10:24:13 浏览: 44
这是一个主函数,主要功能是对一个单词表进行建树并进行查询,其具体流程如下:
1. 使用 while 循环读取单词表 L 中的每个单词,直到读到以 # 开头的单词为止。
2. 对每个单词进行处理,包括计算单词长度和创建一棵二叉树。
3. 对建好的二叉树进行后序遍历,输出遍历结果。
4. 使用 while 循环读取要查询的单词表 S 中的每个单词,直到读到以 # 开头的单词为止。
5. 对每个单词进行处理,包括计算单词长度和查询该单词是否存在于二叉树中。
6. 最后返回程序结束。
相关问题
int main() { while( gets(L[n].elem) ) { if( L[n].elem[0] == '#') break; L[n].length = strlen( L[n].elem ); G = CreateBItree( L[n].elem , G ); n++; } INorder( G ); printf("\n"); while( gets(T.elem) ) { if( T.elem[0] == '#') break; T.length = strlen( T.elem ); IF_simple( T ); } return 0; }分析此代码时间空间复杂度
该代码主要是一个二叉树的创建和遍历操作,时间空间复杂度如下:
时间复杂度:
- while( gets(L[n].elem) ) 循环中,每次读入字符串都需要调用 strlen() 函数计算字符串长度,时间复杂度为 O(n),总共执行 n 次,所以循环部分的时间复杂度为 O(n^2)。
- CreateBItree( L[n].elem , G ) 函数的时间复杂度为 O(n),总共执行 n 次,所以该函数的时间复杂度为 O(n^2)。
- INorder( G ) 函数的时间复杂度为 O(n),因为需要遍历整个二叉树,n 为节点数。
- while( gets(T.elem) ) 循环中,每次读入字符串都需要调用 strlen() 函数计算字符串长度,时间复杂度为 O(n),总共执行 m 次,所以循环部分的时间复杂度为 O(m^2)。
- IF_simple( T ) 函数的时间复杂度为 O(n),因为需要在二叉树中查找是否存在该字符串,n 为节点数。
综上所述,该代码的总时间复杂度为 O(n^2 + m^2),其中 n 为二叉树节点数,m 为查询字符串个数。
空间复杂度:
- 在二叉树的创建过程中,需要开辟节点空间存储二叉树节点,所需空间为 O(n)。
- 在查询过程中,需要开辟若干个字符串空间存储查询字符串,所需空间为 O(m)。
综上所述,该代码的总空间复杂度为 O(n + m)。
int Parition (Sqlist L,int low,int high) { int temp = L.elem[low]; L.elem[0] = L.elem[low]; while(low < high&&L.elem[high]>=temp) { high--; L.elem[low] = L.elem[high]; } while(low < high&&L.elem[low]<=temp) { low++; L.elem[low]=L.elem[high]; } L.elem[low] = L.elem[0]; return 0; }
这是一个实现快速排序中的划分函数(Partition Function)的代码。
函数的作用是将线性表 L 中下标从 low 到 high 的元素按照关键字划分成两部分,使得左边的元素都小于等于某个值,右边的元素都大于等于该值,然后返回该值在线性表中的位置。
具体实现方法是:选取第一个元素作为基准值 temp,将其存放在一个临时变量中,然后将 L.elem[low] 赋值给 L.elem[0],L.elem[low] 就变成了一个空位,用它来存放后面交换过来的元素。
接下来,用两个指针 low 和 high 分别从表的两端开始向中间扫描。首先从 high 指针开始,往前找到第一个小于 temp 的元素,将其放到 L.elem[low] 中;然后从 low 指针开始,往后找到第一个大于 temp 的元素,将其放到 L.elem[high] 中。重复这个过程直到 low 和 high 指针相遇,此时 temp 的位置就是 low 指针所在的位置,将其放回到 L.elem[low] 中即可。
该函数的时间复杂度为 O(n),其中 n = high - low + 1。
阅读全文