2016-10-10 10 views

ответ

1

это стандартная хеш-структура. Размер, плюс массив связанных списков. Таким образом, вам нужно перебирать массив по массиву, затем по спискам (большинство списков будут короткими, а некоторые будут пустыми). Данные не имеют особого порядка.

void getdata(hashset *hash) 
{ 
    int i; 
    hashnode *ptr; 

    for(i=0;i<hash->size;i++) 
    { 
     if(hash->chains[i]) 
     { 
      for(ptr = hash->chains[i]; ptr; ptr = ptr->link) 
      { 
      printf("key : %s\n", ptr->word); 
      } 
     } 
    } 
} 
+0

Спасибо! он печатает значение. Но почему он печатает только одно значение? – sophina

0

От взгляда на это header file, API не включает в себя такую ​​операцию. Все, что вы можете сделать, это проверить, есть ли строка в наборе, нет поддержки для итерации по всем добавленным строкам.

Вы можете сделать:

hashset *newset = new_hashset(); /* You need this! */ 
char * const info = "1234"; 
put_hashset(newset, info); 
printf("%s\n", has_hashset(newset, "1234") ? "yes" : "no"); 

И он должен напечатать yes.

Конечно, вы можете добавить поддержку для итерации, но это немного выходит за рамки этого вопроса. Это не совсем сложно, но вам нужно понять дизайн хэшета.

+0

Я хочу напечатать информацию, которую я вставил в «newset», используя функцию put_hashset. Предположим, что я добавил «1234», «4567», «67345» в hashset, как распечатать все значения, которые я ранее вставил. – sophina

+0

@sophina Я ответил на это: вы не можете, а не с кодом hashset, как указано. У вас нет готовой функции для вызова. Вы должны написать это самостоятельно, и это потребует понимания внутренних элементов hashset, т. Е. Как работает структура данных. – unwind

 Смежные вопросы

  • Нет связанных вопросов^_^