C:将元素插入结构数组

时间:2018-10-03 06:43:10

标签: c struct insert hashtable

我有一个结构体数组,其中每个数组元素为:

struct Item {
  int code;
  char * label;
};

数组本身是一个全局变量:

struct Item * ht[SIZE];

这是我当前如何在数组中插入项目的方法:

void insert(int toadd, char *toput) {

   struct Item *item = (struct Item*) malloc(sizeof(struct Item));
   item->label = toput;  
   item->code = toadd;

   int hashIndex = 0; 

   //move in array until an empty or deleted cell
   while(ht[hashIndex] != NULL && ht[hashIndex]->code != -1) {
      //go to next cell
      ++hashIndex;

      //wrap around the table
      hashIndex %= SIZE;
   }

   ht[hashIndex] = item;
}

在另一个函数中,我调用insert方法,然后调用一些printf语句来检查正在发生的事情:

insert(ctr, trimwhitespace(line2));
printf("\nAdding to ht: String: %s Integer: %d\n", trimwhitespace(line2), ctr);

for (int i = 0; i < SIZE; i++) {
    if (ht[i] != NULL)
    printf("\nThis is what's inside ht: String: %s Integer: %d\n", ht[i] -> label, ht[i] -> code);            
}

这是输出示例:

加到ht:字符串:4个整数:6

这是ht里面的内容:字符串:四位整数:0

这是ht里面的内容:字符串:4个整数:4

这是ht里面的内容:字符串:4个整数:5

这是ht里面的内容:字符串:4个整数:6

如您所见,该结构以不同的整数值多次插入。

我认为这与insert调用所在的循环不太可能成为问题,因为如果多次进行insert调用,则第一个打印语句也会被多次打印。但是我可能是错的。

如何确保insert方法仅将结构插入一次而不是多次插入? 还是问题出在其他地方?

1 个答案:

答案 0 :(得分:-1)

结果证明,在我的if方法调用之前添加insert语句,以检查是否早先已插入特定键,已解决了该问题,尽管这可能不是最理想的解决方法:

if (!containsKey(trimwhitespace(stringcopy3))) {           

      insert(ctr, trimwhitespace(stringcopy3));
      printf("\nAdding to ht: String: %s Integer: %d\n", trimwhitespace(stringcopy3), ctr);

}

我仍然不确定为什么首先要插入多个键实例,但这是一个临时解决方案。