我需要一个建议,以优化实现具有优先级队列和搜索的程序

时间:2015-03-15 17:39:56

标签: c pointers queue adt

我必须制作一个程序,从文件中读取医院病人名单,每个病人都有优先权。

所以我决定在二进制堆中创建优先级队列,因为插入和删除是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;

在堆和哈希表中插入和删除都很好。但是有更多的指针是更多的内存使用。

这是我第一次制作这种“真正的节目”,所以如果你们有人能提出任何建议,我将非常感激。

谢谢!

1 个答案:

答案 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.