我需要一个关于优先队列和搜索程序最佳实施的建议

I need an advice for optimal implementation of a program with priority queue and search

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

所以我决定把优先级队列做成一个二叉堆,因为插入和删除是O log(n),而获取待治疗的病人是O(1),对于这个程序来说已经足够好了。我将堆存储在指向 struct patient 的动态指针数组中。这很好用。

但我还必须能够通过他的安全号码找到病人,这在堆中是不可能的(到目前为止我知道)。

所以我想做一个散列 table ,当我将患者添加到堆时, hi 也将被添加到散列 table (所有这些工作都是用指针) .

这是进行下去的好方法吗?或者我必须重新考虑要使用的数据结构并使用另一个 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;

在堆和散列中插入和删除就足够了table。但是指针越多,使用的内存就越多。

这是我第一次做这种"real programs"所以如果你们能提供任何建议我将非常感谢。

谢谢!

问题:如何通过社会安全号码select患者?

如果社会安全号码是结构中的一个字段,用于在链表中创建节点。只需从链表的头指针开始,一步一步地遍历链表。在链表中的每个节点,将目标社会安全号码与节点中的条目进行比较。找到匹配项后,指向该节点的指针将指向所需的患者。

但是,了解一下社会安全号码。例如,它们不是###-##-####,而是###-##-####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.