最受欢迎的3种水果(综合应用)
该代码的大体思路:先把所有的水果(及其受欢迎度即就是有几个人喜欢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种水果(综合应用)相关推荐
- 第2章【综合练习题】“大润发”、“沃尔玛”、“好德”和“农工商”四个超市都卖苹果、香蕉、橘子和芒果四种水果。使用NumPy的ndarray实现以下功能。
P33综合练习题 1."大润发"."沃尔玛"."好德"和"农工商"四个超市都卖苹果.香蕉.橘子和芒果四种水果.使用Num ...
- 面试题:找出公司员工最喜欢的k种水果
1.问题 本公司现在要给公司员工发波福利,在员工工作时间会提供大量的水果供员工补充营养.由于水果种类比较多,但是却又不知道 哪种水果比较受欢迎,然后公司就让每个员工报告了自己最爱吃的k种水果,并且告知 ...
- 健客行-结石之1种水果竟能溶解体内结石
1人参与 1评论 "一种水果能溶解身体结石 肾结石的防治是至关重要的,一旦得肾结石很难根治,有70-80%的可能会复发,而且肾结石疼起来会要人命哒!日常生活中,一些天然方法来能防治肾结石,也 ...
- 青龙面板跑滴滴果园,5天种水果。
青龙安装部署教程-------点击跳转 没服务器的先自行购买,腾讯云2H4G8M首年70–点击购买 QQ交流:1014549449 --------------点击跳转 滴滴果园宣称5天就能种出水果, ...
- 【任务脚本】更新京东任务东东农场脚本,京东种水果脚本,京东活动任务半自动程序...
最近看到大牛更新了东东农场的脚本,东东农场就是京东种水果的日常任务,可以搜索"东东农场"进入(亲测猕猴桃挺好吃的),测试体验了一下脚本,有些不稳定,不过可以用,只是可能需要多运行两 ...
- 程序员自家种水果,新鲜包邮配送
上次猕猴桃的活动<好多小伙伴,买了一箱尝过后又下单了好几箱. 事实证明,品质才是销量的最佳保证. 有些粉丝找到我说,自己家也有果园自己种水果,都是当天采摘当天发货的纯天然水果.于是他们给我寄了一 ...
- 程序员自家种水果,新鲜包邮配送!
点击上面"蓝字"关注我们! 上次猕猴桃的活动一经推出,得到了广大粉丝的支持,我感到十分欣慰,非常感谢大家对我的信任.好多小伙伴,买了一箱尝过后又下单了好几箱. 事实证明,品质才是销 ...
- 假如把女生比作一种水果
1 和睡相不好的人一起睡觉是什么体验? 2 箱子里的是我方输出,外面的是对方打野 3 女儿问爸爸小时候都玩什么, 于是爸爸给她做了这个.. 4 推上一网友随手拍到的照片, 就好像是三张 ...
- 孕妇能吃哪些水果?三种水果帮你补充高营养
大多数孕妇都想在孕期时补充丰富的营养物质,让宝宝健康发育.由于水果富含多种维生素,所以很多孕妇食谱中,把孕妇吃的水果作为补充营养物质的首选食物,那么孕期吃哪些水果能补充高营养呢? 苹果,缓解孕吐反应 ...
最新文章
- oracle12测试骤,Oracle中SQL语句解析的步骤
- 海尔推“智能服务”标准 家电产业迎来“互联网+”
- 2021年春季学期-信号与系统-第十一次作业参考答案-第五小题
- setjmp和longjmp
- 为资产分类定义折旧范围_SAP折旧范围概念
- moonmq: 用go实现的高性能message queue
- JAVA性能优化笔记(一)
- M2Det的学习过程
- 下载列表失败_Mac配置的Motrix,高速下载百度云
- Lodop打印控件的学习
- 计算机专业电子技术基础教学,计算机专业“电子技术基础”教学上的难题及对策.doc...
- php开发自学经典.pdf_PHP从入门到精通(第4版) 明日科技 中文完整pdf扫描版[42MB]
- excel vba 字典使用方法学习
- docker容器的时间问题
- mysql 按条件join_MySQL Join竟然可以这么玩?根据条件进行复制
- 从本钢板B看低市盈率投资收益
- 上海车展:比亚迪宋L概念车全球首发,这是要硬扛特斯拉?
- xshell6使用技巧_Xshell 6怎么设置为中文-Xshell 6设置为中文的方法 - 河东软件园
- PC ACCESS 测试客户机出现错误 win7 64位
- python函数实验总结_Python程序设计实验报告:实验六 函数