我必须制作一个程序,从文件中读取医院病人名单,每个病人都有优先权。
所以我决定在二进制堆中创建优先级队列,因为插入和删除是O log(n),并且获得要处理的患者是O(1),这对于该程序来说已经足够了。我将堆存储在一个指向struct患者的动态指针数组中。这很好。
但我也必须能够通过他的安全号码找到一个病人,这在一堆中是不可能的(到目前为止我知道)。
所以我想创建一个哈希表,当我将一个病人添加到堆中时,hi也将被添加到哈希表中(所有这些工作都是指针)。
这是一个很好的方法吗?或者我必须重新考虑要使用的数据结构并使用另一个ADT重新制作程序? (请不要)。
结构代码:
typedef struct patient {
char name[20];
char lastName[20];
char securityNumber[20];
char birthDate[8];
int priority;
}PATIENT;
typedef struct binary_heap{
PAT** patHeap;
int n;
}HEAP;
在堆和哈希表中插入和删除都很好。但是有更多的指针是更多的内存使用。
这是我第一次制作这种“真正的节目”,所以如果你们有人能提出任何建议,我将非常感激。
谢谢!
答案 0 :(得分:0)
问题:如何通过社会安全号码选择患者?
如果社会安全号是结构中用于在链表中创建节点的字段。简单地从链表的头指针开始,一个接一个地通过链表。在链表中的每个节点处,将目标社会保障号与节点中的条目进行比较。找到匹配项后,指向该节点的指针指向所需的患者。
但是,请稍微了解社会安全号码。例如,它们不是### - ## - ####而是### - ## - #### c,其中最后的'#c。 (角色)这些天很少使用。
if you had posted the code,
then we could post matching code
for the function that finds a patient
via their social security number.
BTW:
a patients social security number is a bit of sensitive information.
so the code should encrypt that field.