**任务描述
从food.txt中读取食材的基本信息,实现基于二叉排序树的查找。
编程要求
输入食材英文名称后,若查找成功,则输出该食材对应的全部信息,并输出查找成功时的平均查找长度ASL,否则,输出“查找失败”。
测试说明
平台会对你编写的代码进行测试:
测试输入:
corn
预期输出:
中文名称:玉米
英文名称:corn
养生功效:补中开胃,益肺宁心,延缓衰老。辅助治疗小便不通,功效膀胱结石、肝炎、高血压。
营养与功效:玉米含有丰富的营养成分。其中,纤维素含量很高,纤维素具有刺激胃肠蠕动、加速粪便排泄的特性,纤维素可防治便秘、肠炎、肠癌等。而营养元素硒和镁具有防癌抗癌作用,硒能加速体内过氧化物的分解,使恶性肿瘤因得不到氧分子的供应而受到抑制,镁一方面能抑制癌细胞的发展,另一方面能促使体内废物排出体外。玉米所含的不饱和脂肪酸,尤其是亚油酸的含量高达60%上,与玉米胚芽中的维生素E协同作用,可降低血液中胆固醇浓度,有效防止胆固醇沉积在血管壁,由此看来,玉米具备了防治冠心病、动脉粥样硬化、高脂血症及高血压等心脑血管疾病的作用。玉米中的维生素E可以促进人体细胞分裂,增强人体新陈代谢,调整神经系统功能,能使皮肤细嫩光滑,延缓皱纹产生。玉米还含有一种特殊的长寿因子——谷胱甘肽,在硒的参与下,生成谷胱甘肽氧化酶,具有恢复青春,延缓衰老的功能
专家提醒:玉米发霉后会产生致癌物,所以发霉玉米绝对不能食用。皮肤病患者忌食玉米。
相关链接:玉米与糙皮病∶糙皮病(癞皮病)又称玉蜀黍疹,与烟酸缺乏有关,流行在以玉米或高粱为主食的地区。患病的原因是人们从食物中获取烟酸和色氨酸,而色氨酸在人体内可转化为烟酸,但玉米和高粱中的烟酸以结合形式存在,不能被人体利用,同时色氨酸含量又低,因此导致烟酸缺乏。烟酸在体内参与糖、脂肪和蛋白质的氧化分解与组织呼吸,当其含量不足时可导五谷杂想致代谢紊乱,表现为腹泻、痴呆、皮炎,因此又称为"3D症"。专家提示说,吃玉米时应与豆类食品搭配食用,而皮肤病患者尽量不要食用玉米。
养生保健食谱:
黑芝麻双米粥——小米洗净后,放入清水中浸泡;黑芝麻碾成芝麻粉;鹌鹑蛋煮熟去壳备用。锅中加适量的清水,大火煮开,加小米、黑芝麻粉和玉米粒,再次煮开后,改小火煮熟。投入冰糖,待糖化开后,放入鹌鹑蛋,即可。有润肠通便的功效,适合便秘者食用。
排骨玉米——玉米棒切厚片;排骨、豆角、蘑菇分别放入沸水中汆烫。油锅烧热,放入糖,炒至红亮后放入排骨,快速翻炒,排骨发红时加水炖煮,并加入葱、姜。排骨炖至八分熟后,投入蘑菇块、南瓜块、玉米块、豆角等,共同煮到肉烂。最后加入盐、酱油、胡椒粉、味精等调味即可。有健脾养胃、补气养血的功效,适合于病后体虚、贫血者服用。
红薯米粥——红薯250克,玉米楂200克,白糖适量,加水,煮至红薯软烂、玉米开花,汤稠为度。此粥强健脾胃,补中益气。对夜盲症、大便带血、便秘、温热黄疸等症有良好的食疗作用。
食疗验方:
玉米须——玉米须30克,车前子15克,甘草6克,用水煎服。可用于小便不通,膀胱炎及小便疼痛等症的辅助治疗。
玉米沙拉——将玉米粒煮熟,捞出沥干,晾凉后放入盘中;猕猴桃、去核山楂、菠萝、小西红柿等新鲜水果分别去皮、洗净、切块,然后与玉米一同放入盘中;杏仁打碎后撒在水果表面,再浇上一层沙拉酱,拌匀后即可食用。此菜鲜美爽口,有健脾开胃、增进食欲的功效。适合消化不良、食欲不振者食用。
ASL为:7.73**
#include <bits/stdc++.h>
#define MAXSIZE 10000
using namespace std;
typedef struct{
char name[100]; // 中文名称
char sname[100]; // 英文名称
char health[10000]; // 养生功效
char nutrition[10000]; // 营养与功效
char expert[10000]; // 专家提醒
char link[10000]; // 相关链接
string recipe[30]; // 养生保健食谱
int recipe_size = 0; // 食谱数量
string therapy[30]; // 食疗验方
int therapy_size = 0; // 验方数量
} Food;
typedef struct BSTNode{
Food data; // 食材信息
struct BSTNode *lchild; // 左孩子指针
struct BSTNode *rchild; // 右孩子指针
} BSTNode, *BSTree;
void InitBSTree(BSTree &T){
// 二叉排序树初始化
}
void InsertBST(BSTree &T, Food e){
// 当二叉排序树T中不存在关键字等于e.sname的数据元素时,则插入该元素
}
int ReadFile(BSTree &T, string filename){
// 读取文件,调用InsertBST函数将每个食材数据插入二叉排序树
// 返回食材的总数
}
void Print(BSTNode *T){
// 输出食材信息
}
BSTNode *SearchBST(BSTree &T, char *sname){
// 查找对应食材
}
int GetSumCmp(BSTree T, int sumCmp){
// 统计查找成功时的总比较次数
}
double GetASL(BSTree &T, int count){
// 返回基于二叉排序树查找的ASL
}
int main(){
BSTree T = NULL;
InitBSTree(T);
int count = 0;
string originFilename = "/data/workspace/myshixun/1.2.4-基于二叉排序树的查找/food.txt";
count = ReadFile(T, originFilename);
char sname[100];
cin.getline(sname, 100);
BSTNode *t = SearchBST(T, sname);
if (t != NULL){
Print(t);
double ASL = GetASL(T, count);
cout << "ASL为:" << fixed << setprecision(2) << ASL << endl;
}
else
cout << "查找失败" << endl;
return 0;
}