2013-03-01 66 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 2013-03-01 20:31:35

+0

不在這個函數函數中(雖然也許我應該),但是在函數被調用的情況下,有10個存儲桶。 – 2013-03-01 20:33:35

+1

我會確保你通過't'傳遞的對象首先正常工作。也許增加一些簡單的'cout'只是爲了看看它的屬性是什麼。然後擔心你的功能。 – ApproachingDarknessFish 2013-03-01 20:36:35

回答

0

在你的代碼,同時將設置爲NULL每個bucks[i].嘗試:

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

不幸的是,這並沒有改變任何東西。 – 2013-03-01 20:46:06

+0

@Nik Bougalis:它改變了表格,每個乞求零錢都是NULL – qPCR4vir 2013-03-01 21:16:22

+0

是的,我看到只要我輸入評論,但不能從iPhone中刪除。 – 2013-03-01 21:20:15