【发布时间】:2015-07-17 18:19:06
【问题描述】:
对不起,如果这听起来有点过于具体,但我的问题的答案将是一个更广泛的问题的答案。所以这是我的问题的背景:
在Abstract Data Types excersize 中,我在两个ADT(调度程序和堆)之间构建了一个“粘合层”,称为容器。调度程序为它提供了一个比较函数,它应该将一个函数传递给堆,该函数返回该比较函数对任何输入的否定结果。 这样做的原因是Heap是一个最大堆,但是Scheduler要求绘制一个最小元素。 我不允许将堆更改为最小堆或根本不更改。很可能,我不允许更改调度程序的比较函数以返回它通常返回的负数,或者再次返回。由 Container 来反转函数并将其提供给 Heap。 问题是它到底是怎么做到的?!
我使用的类型是:
typedef void* Data;
typedef int (*DataCompareFunc)(const Data data1,const Data data2);
调度器调用函数:
Container* ContainerCreate(DataCompareFunc compFunc)
HeapCreate 的签名是:
Heap* HeapCreate(DataCompareFunc compFunc);
ContainerCreate 可以通过什么方式将取反函数转入HeapCreate?
【问题讨论】:
-
能不能把Scheduler的比较函数包裹在另一个函数中,对结果取反?
-
您应该查看 lambda 函数和闭包,但是在 C 中实现它们可能仅限于 GCC
-
我一定遗漏了一些东西,直到最后一句,你的问题的写作方式,你想要的东西与你目前被允许使用的东西完全相反,但不能改变任何东西。我们可以再试一次吗? 是你可以改变什么?
-
Heap* HeapCreate (CoontainerCreate (DataCompareFunc (compFunc));会更有意义
标签: c abstract-data-type