哈希表的链接列表数组

时间:2018-12-26 17:33:08

标签: c

我想知道如何带10个名称的文本文件并阅读。通过降级并用除法形成哈希表来排序10个名称。我需要构造它们的链表。哈希表的索引为7。

我已经尝试过匹配指针变量并创建了一个哈希表,但是我做不到。我在制作哈希表,插入数据,打印哈希表和搜索数据时遇到麻烦(当我键入名称时可以找到一个函数。)。我需要添加更多功能。如何实现?

#define SIZE 7


struct node {
   char data[100][20];
   struct node* next; 
}; 

struct index {
   struct node* head; 
   int count; 
};



struct sum (data){ 
   struct node* ptr;

   int sum,i;
   for (i=0; i<20; i++) {
    ptr -> data[i] = ptr;
    strcpy(sum,ptr);
   }

  return sum;   
};


int hashFunction (int sum) { 

    return sum%SIZE; 
}



void descend (data) { 

    int temp;
    for(i=0;i<100;i++) {
       for(j=0;j=20;j++) {
         if (data[i][j+1]>data[i][j])
            temp=data[i][j];
            data[i][j]=data[i][j+1];
            data[i][j+1]=temp;
         }
    }   
}



int main (void) {

    char data[100][20];
    FILE *fp;
    fp = fopen("data.txt","r");
    for (int i=0; i<20; i++)
        fscanf (fp,"%s",&data);
        printf("%s\n",data);
    }
    fclose(fp);
    hashTable = (struct index*)malloc(SIZE*sizeof(struct index));
    descend(data);
    return 0;
}

2 个答案:

答案 0 :(得分:0)

代码中有很多错误,我只是想说一下。首先是这个

fscanf (fp,"%s",&data);

应该是

fscanf (fp,"%s",&data[i]);

第二,在descend()函数内循环条件部分中,您正在使用j=20,该循环无限运行。这是MACRO派上用场的地方,因为此j=20仅运行即可,即如果它可能具有ROW=j ROW的{​​{1}},编译器会产生有意义的错误。这个

20

可以使用正确的版本void descend (data) { /* what is the tyep of data ? you should mention the data type */ int temp; for(i=0;i<100;i++) { /* there are only 20 lines not 100 i.e it should be i<20 */ for(j=0;j=20;j++) { /* condition is wrong, you indented for j<20 but that too wrong as there are supposed to be max 100 char in line it should be j<100 */ if (data[i][j+1]>data[i][j]) /* condition is not correct */ temp=data[i][j]; data[i][j]=data[i][j+1]; data[i][j+1]=temp; } } }

descend

还要检查void descend (char (*data)[ROW], int col) { /* define ROW as macro with value 20 and pass the col i.e 100 */ int temp; for(i=0;i < ROW; i++) { for(j=0;j < col; j++) { if (data[i][j] > data[i][j+1]) temp = data[i][j]; data[i][j] = data[i][j+1]; data[i][j+1] = temp; } } } 的返回值以检查它是否成功或失败,并进行适当的验证。对于例如

fopen()

答案 1 :(得分:0)

首先,您似乎应该声明char data[20][100]而不是char data[100][20]

然后,在20次迭代的循环中,应该引用data[i]而不是data

for (int i=0; i<20; i++)
    fscanf(fp,"%s",data[i]);
    printf("%s\n",data[i]);
}

请记住,您假设输入文件中的每一行最多为99个字符长。

这不能回答我想出的实际问题,但至少应解决所有上述问题。