2013-03-01 2 views
1

Итак, я пытаюсь подсчитать количество строк, присутствующих в моей хэш-таблице. По какой-то причине эта функция всегда возвращает 0. Я попытался переписать ее несколько раз несколькими способами, чтобы найти ошибку в логике, но, насколько мне известно, эта функция должна выводить количество записей в стол. Я бы очень признателен за помощь, так как это стало очень расстраивающим! Благодаря!Подсчет количества строк в хеш-таблице

/* htbl_n_entries : htbl* -> unsigned int */ 
/* return the number of entries in all buckets */ 
unsigned int htbl_n_entries(htbl *t){ 
    int i; 
    int nbucks = t->n_buckets; 
    sll**bucks= t->buckets; 
    unsigned int sum = 0; 
    for (i = 0; i < nbucks; ++i) 
    { 
     while(bucks[i] != NULL){ 
     sum++; 
     bucks[i] = bucks[i]->next; 
    } 
} 
    return sum; 
} 
+0

Вы подтвердили, что 'nbucks'> 0? – ApproachingDarknessFish

+0

Не в этой функции функции (хотя, возможно, мне и нужно), но в ситуации, в которой вызывается функция, есть 10 ковшей. –

+1

Я бы удостоверился, что объект, который вы проходите с помощью 't', работает правильно. Возможно, добавьте несколько простых 'cout', чтобы посмотреть, каковы его свойства. затем волнуйтесь о своей функции. – ApproachingDarknessFish

ответ

0

в коде будет установлен в NULL каждый bucks[i]. Try:

sll**bucks= t->buckets; 
unsigned int sum = 0; 
for (i = 0; i < nbucks; ++i) 
{ 
     sll*bucks_= bucks[i]; 
    while(bucks_ != NULL){ 
    sum++; 
    bucks_ = bucks_->next; 
} 
} 

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

+0

К сожалению, это ничего не изменило. –

+0

@Nik Bougalis: он меняет таблицу, NULL-ing каждый beggening-bucks – qPCR4vir

+0

Да, я видел это, как только я набрал комментарий, но не смог удалить с iPhone. –

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