该代码的大体思路:先把所有的水果(及其受欢迎度即就是有几个人喜欢count)插入到一棵二叉搜索树中,在进行二叉树的中序  遍历,最后进行建立小堆的操作,即就可以找出最受欢迎的3种水果。主要操作:二叉搜索树的插入,中序遍历,建堆时条件(叶子结点的处理,已经满足堆的情况),向下调整的操作。具体代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>typedef struct {char fruit[20];    // 水果int count;     // 出现次数
}   Report;typedef struct TreeNode {char fruit[20]; //  Keyint  count;struct TreeNode *pLeft;struct TreeNode *pRight;
}   TreeNode;int Insert(TreeNode **ppRoot, const char *fruit)
{if (*ppRoot == NULL) {*ppRoot = (TreeNode *)malloc(sizeof(TreeNode));assert(*ppRoot);strncpy((*ppRoot)->fruit, fruit, 20);(*ppRoot)->count = 1;(*ppRoot)->pLeft = (*ppRoot)->pRight = NULL;return 0;}int r = strncmp((*ppRoot)->fruit, fruit, 20);if (r == 0) {return -1;}if (r < 0) {return Insert(&(*ppRoot)->pLeft, fruit);}return Insert(&(*ppRoot)->pRight, fruit);
}TreeNode * Search(TreeNode *pRoot, const char *fruit)
{if (pRoot == NULL) {return NULL;}int r = strncmp(pRoot->fruit, fruit, 20);if (r == 0) {return pRoot;}if (r < 0) {return Search(pRoot->pLeft, fruit);}return Search(pRoot->pRight, fruit);
}void InOrder(TreeNode *pRoot, Report array[], int *i, int max)
{assert(*i < max);if (pRoot == NULL) {return;}InOrder(pRoot->pLeft, array, i, max);strncpy(array[*i].fruit, pRoot->fruit, 20);array[*i].count = pRoot->count;(*i)++;// 遍历根结点InOrder(pRoot->pRight, array, i, max);
}// 1. 建什么堆 小堆
// 2. 向下调整:  1) 叶子结点 2)已经满足堆
void AdjustDown(Report array[], int size, int parent)
{int left = parent * 2 + 1;int right = parent * 2 + 2;if (left >= size) {return;}int min = left;if (right < size && array[right].count < array[left].count) {min = right;}if (array[parent].count < array[min].count) {return;}Report t = array[parent];array[parent] = array[min];array[min] = t;AdjustDown(array, size, min);
}void CreateHeap(Report array[], int size)
{for (int i = (size - 2) / 2; i >= 0; i--) {AdjustDown(array, size, i);}
}void App2()
{const char * fruits[] = {"Apple", "Banana", "Watermelon", "Pineapple","Apple", "Apple", "Apple", "Banana", "Pear", "Pear","Orange"};TreeNode *pRoot = NULL;for (int i = 0; i < sizeof(fruits) / sizeof(char *); i++) {const char * fruit = fruits[i];TreeNode *pFound = Search(pRoot, fruit);if (pFound) {pFound->count++;}else {Insert(&pRoot, fruit);}}Report   array[100];int size = 0;InOrder(pRoot, array, &size, 100);Report heap[3];int i;for (i = 0; i < 3; i++) {heap[i] = array[i];}CreateHeap(heap, 3);for (i = 3; i < size; i++) {if (array[i].count > heap[0].count) {heap[0] = array[i];AdjustDown(heap, 3, 0);}}// 构建堆,数组(顺序表)// 建堆printf("插入成功\n");
}

最受欢迎的3种水果(综合应用)相关推荐

  1. 第2章【综合练习题】“大润发”、“沃尔玛”、“好德”和“农工商”四个超市都卖苹果、香蕉、橘子和芒果四种水果。使用NumPy的ndarray实现以下功能。

    P33综合练习题 1."大润发"."沃尔玛"."好德"和"农工商"四个超市都卖苹果.香蕉.橘子和芒果四种水果.使用Num ...

  2. 面试题:找出公司员工最喜欢的k种水果

    1.问题 本公司现在要给公司员工发波福利,在员工工作时间会提供大量的水果供员工补充营养.由于水果种类比较多,但是却又不知道 哪种水果比较受欢迎,然后公司就让每个员工报告了自己最爱吃的k种水果,并且告知 ...

  3. 健客行-结石之1种水果竟能溶解体内结石

    1人参与 1评论 "一种水果能溶解身体结石 肾结石的防治是至关重要的,一旦得肾结石很难根治,有70-80%的可能会复发,而且肾结石疼起来会要人命哒!日常生活中,一些天然方法来能防治肾结石,也 ...

  4. 青龙面板跑滴滴果园,5天种水果。

    青龙安装部署教程-------点击跳转 没服务器的先自行购买,腾讯云2H4G8M首年70–点击购买 QQ交流:1014549449 --------------点击跳转 滴滴果园宣称5天就能种出水果, ...

  5. 【任务脚本】更新京东任务东东农场脚本,京东种水果脚本,京东活动任务半自动程序...

    最近看到大牛更新了东东农场的脚本,东东农场就是京东种水果的日常任务,可以搜索"东东农场"进入(亲测猕猴桃挺好吃的),测试体验了一下脚本,有些不稳定,不过可以用,只是可能需要多运行两 ...

  6. 程序员自家种水果,新鲜包邮配送

    上次猕猴桃的活动<好多小伙伴,买了一箱尝过后又下单了好几箱. 事实证明,品质才是销量的最佳保证. 有些粉丝找到我说,自己家也有果园自己种水果,都是当天采摘当天发货的纯天然水果.于是他们给我寄了一 ...

  7. 程序员自家种水果,新鲜包邮配送!

    点击上面"蓝字"关注我们! 上次猕猴桃的活动一经推出,得到了广大粉丝的支持,我感到十分欣慰,非常感谢大家对我的信任.好多小伙伴,买了一箱尝过后又下单了好几箱. 事实证明,品质才是销 ...

  8. 假如把女生比作一种水果

     1  和睡相不好的人一起睡觉是什么体验?  2  箱子里的是我方输出,外面的是对方打野  3  女儿问爸爸小时候都玩什么, 于是爸爸给她做了这个..  4  推上一网友随手拍到的照片, 就好像是三张 ...

  9. 孕妇能吃哪些水果?三种水果帮你补充高营养

    大多数孕妇都想在孕期时补充丰富的营养物质,让宝宝健康发育.由于水果富含多种维生素,所以很多孕妇食谱中,把孕妇吃的水果作为补充营养物质的首选食物,那么孕期吃哪些水果能补充高营养呢? 苹果,缓解孕吐反应 ...

最新文章

  1. oracle12测试骤,Oracle中SQL语句解析的步骤
  2. 海尔推“智能服务”标准 家电产业迎来“互联网+”
  3. 2021年春季学期-信号与系统-第十一次作业参考答案-第五小题
  4. setjmp和longjmp
  5. 为资产分类定义折旧范围_SAP折旧范围概念
  6. moonmq: 用go实现的高性能message queue
  7. JAVA性能优化笔记(一)
  8. M2Det的学习过程
  9. 下载列表失败_Mac配置的Motrix,高速下载百度云
  10. Lodop打印控件的学习
  11. 计算机专业电子技术基础教学,计算机专业“电子技术基础”教学上的难题及对策.doc...
  12. php开发自学经典.pdf_PHP从入门到精通(第4版) 明日科技 中文完整pdf扫描版[42MB]
  13. excel vba 字典使用方法学习
  14. docker容器的时间问题
  15. mysql 按条件join_MySQL Join竟然可以这么玩?根据条件进行复制
  16. 从本钢板B看低市盈率投资收益
  17. 上海车展:比亚迪宋L概念车全球首发,这是要硬扛特斯拉?
  18. xshell6使用技巧_Xshell 6怎么设置为中文-Xshell 6设置为中文的方法 - 河东软件园
  19. PC ACCESS 测试客户机出现错误 win7 64位
  20. python函数实验总结_Python程序设计实验报告:实验六 函数

热门文章

  1. 中国计量大学调剂计算机技术,2018年中国计量大学考研调剂程序
  2. 友情提示:破坏计算机信息系统罪
  3. 鼠标跟随效果html,javascript 鼠标跟随特效代码及理解
  4. 【JS】jQuery实现鼠标跟随
  5. 微信小程序项目(哔哩哔哩小程序)
  6. TL-WR740N设置WDS无线桥接模式
  7. 【第50期】游戏策划:给@人来人往的应聘攻略
  8. 新高考计算机专业选什么科目,2020新高考金融高考选什么 科目怎么选
  9. 如何成为一个不怕裁员的人?
  10. passive模式 tcp_ftp的主动模式active mode和被动模式 passive mode的配置和区别