>> Rob Bowden: Hi.
Mən Rob deyiləm, və edək hash bu həlli.
Belə ki, burada biz həyata olacaq ümumi hash table.
Biz görürük ki, bizim hash struct node masa bu kimi baxmaq edir.
Belə ki, bir char söz var olacaq ölçüsü uzunluğu plus 1 array.
Maksimum ildən 1 unutmayın Lüğətə söz 45
simvol, sonra biz olacaq üçün bir əlavə xarakter lazımdır
backslash 0.
>> Və sonra hər bizim hash table bucket saxlamaq üçün gedir bir
qovşaqlarının bağlı siyahı.
Biz burada probing xətti məşğul deyilik.
Və sifariş növbəti keçid bucket element, biz lazımdır
struct node * Növbəti.
Belə ki, bir node kimi görünür nə.
İndi burada elan edir Bizim hash masa.
Bu 16.384 buketler var olacaq lakin ki sayı həqiqətən etməz.
Və nəhayət, biz olacaq qlobal dəyişən hashtable_size olan
0 kimi başlamaq üçün gedir və bu edilir takip gedir neçə söz
bizim lüğət idi.
Bütün hüquqlar.
>> Belə ki, yük bir nəzər salaq.
Belə ki yük fark, bu bir bool qaytarır.
Uğurla, əgər doğru qayıtmaq başqa dolu və yalan.
Və bir const char * ulduz edir lüğət olan lüğət,
açmaq istəyirəm.
Belə ki, ilk şey biz nə olacaq.
Biz lüğət fopen olacaq oxu, və biz olacaq
belə əgər nail əmin etmək NULL döndü, sonra biz etmədik
uğurla lüğət açmaq və biz yalan qayıtmaq lazımdır.
>> Amma bu uğurla etdi ki, fərz açıq, sonra biz oxumaq istəyirəm
lüğət.
Biz bəzi tapmaq qədər loop saxlamaq Bu çıxmaq üçün səbəb
biz görəcəksiniz olan loop.
Belə ki, loop saxlamaq, və indi biz gedirik bir node malloc.
Və əlbəttə ki, biz çek səhv lazımdır daha mallocing müvəffəqiyyətli ola bilmədi əgər
və biz ki, biz hər hansı bir node boşaltmaq istəyirəm əvvəl malloc nə oldu da, yaxın
lüğət və saxta qayıtmaq.
>> Amma məhəl fərz biz nail, sonra biz fscanf istifadə etmək istədiyiniz
bir tək söz oxumaq bizim bizim node daxil lüğət.
Belə ki, giriş-> sözü xatırlayıram char söz ölçüsü uzunluğu bufer plus
biz olacaq ki, bir da söz saxlamaq
Belə ki, fscanf 1 kimi uzun qayıtmaq üçün gedir uğurla oxumaq mümkün idi
faylı söz.
>> Bir səhv ya olur ya biz ulaşırsanız fayl sonu, olmayacaq
bu deyil, əgər bu halda 1 qayıtmaq 1 qayıtmaq, biz nəhayət qırmaq olacaq
Bu isə loop həyata.
Beləliklə, biz görürük ki, biz uğurla dəfə bir sözü oxumaq
giriş-> söz, sonra biz hash olacaq bizim hash funksiyası istifadə ki, söz.
Nin bir nəzər salaq hash funksiyası.
>> Beləliklə, siz həqiqətən ehtiyac yoxdur Bu anlamaq üçün.
Və həqiqətən, biz yalnız bu çıxardı internet funksiyası hash.
Siz tanımaq lazımdır yalnız şey bu bir const char * söz edir ki,
belə ki, giriş kimi bir string alaraq və edir çıxış kimi bir imzasız int qaytarılması.
Belə ki, bütün bir hash funksiyası olunur, bu bir giriş edir, o, bir verir
hash masa daxil index.
Biz NUM_BUCKETS ilə modding edirik ki, görürsünüz belə ki, hash dəyəri döndü
əslində hash table bir göstəricidir və nə kənarda deyil index
serialın həddi.
>> Belə ki, hash funksiyası, biz olacaq ki, verilmiş biz oxumaq söz hash
Lüğətə və sonra olacaq ki, istifadə üçün daxil var
hash masa daxil giriş.
İndi hashtable hash, cari bağlı hash cədvəldə siyahısı, və
yalnız NULL ki, çox mümkündür.
Biz bizim giriş əlavə etmək istəyirsiniz Bu bağlı siyahı başlayan və belə
biz cari giriş olacaq Hal-hazırda nə hash masa qeyd
bal və sonra saxlamaq olacaq Bu hash da hash cədvəldə
cari giriş.
>> Belə ki, bu iki xətləri uğurla daxil nın başında giriş
ki, index at bağlı siyahı hash cədvəldə.
Biz ilə tamamlayın sonra, biz bilirik biz başqa söz aşkar ki,
lüğət və biz yenə arttırmayı.
Beləliklə, biz bunu saxlamaq fscanf qədər nəhayət qeyri bir şey 1 qaytarır
olan point biz lazımdır ki, unutmayın pulsuz giriş, belə ki, burada biz malloced
giriş və biz bir şey oxumaq üçün cəhd lüğət.
Və biz uğurla oxumaq etməyib Lüğətə bir şey olan
halda ki, biz giriş azad etmək lazımdır əslində hash masa qoymaq heç
və nəhayət qırmaq.
>> Biz çıxmaq sonra, biz də, görmək lazımdır çünki orada çıxmaq etməyib
bir səhv fayl oxu, və ya edilmişdir biz əldə çünki biz çıxmaq etməyib
fayl sonu?
Bir səhv var idi, onda biz istəyirik yük idi, çünki yalan qayıtmaq
uğur və prosesi, biz istəyirik biz oxumaq ki, bütün sözləri boşaltmaq
və lüğət fayl bağlayın.
Biz nail ola bildimi etsək, onda biz yalnız hələ lüğət bağlamaq lazımdır
fayl, və nəhayət ildən doğru qayıtmaq biz uğurla yüklü etdiyiniz
lüğət.
Və yük üçün var.
>> Belə ki, indi bir dolu hash table verilmiş, yoxlamaq, bu kimi baxmaq edir.
Belə ki, bir bool qaytarır, yoxlamaq göstərir gedir olub
keçdi-in char * sözü də olub keçdi-in string bizim lüğət edir.
Bu lüğət belə, əgər əgər bizim hash masa, biz qayıdacaqlar
doğru və bu deyil, əgər, biz yalan qayıdacaqlar.
Bu keçdi-in söz alaraq, biz istəyirik sözü hash gedir.
>> İndi, tanımaq üçün əhəmiyyətli bir şeydir yük, biz bilirdik ki, bütün
sözləri aşağı halda olacaq idi, lakin burada, biz əmin deyilik.
Biz hash funksiyası nəzər varsa, həqiqətən, bizim hash funksiyası
hər bir xarakter lowercasing olunur Sözün.
Belə ki, asılı olmayaraq Kapitallaşma söz, bizim hash funksiyası gedir
nə üçün eyni index qayıtmaq kapitalizasiyası var ki kimi
tamamilə kiçik qayıtdı Sözün versiyası.
Bütün hüquqlar.
>> Belə ki, bizim index var.
Bu söz üçün hash masa var.
İndi loop üçün bu gedir bağlı siyahı artıq üçün
ki, index idi.
Beləliklə, biz giriş başlatılıyor fark ki, index qeyd etmək.
Biz giriş nə isə davam edirik bərabər NULL, və unutmayın ki,
Bizim bağlı siyahısında göstərici yenilənməsi giriş Növbəti giriş-> bərabərdir, belə ki, var
Bu bizim cari giriş nöqtəsi bağlı siyahısında növbəti maddə.
Bütün hüquqlar.
>> Belə ki bağlı siyahı hər giriş üçün, biz strcasecmp istifadə etmək olacaq.
Bu strcmp deyil, çünki bir dəfə daha, biz insensitively şey işi etmək istəyirəm.
Belə ki, biz söz müqayisə etmək strcasecmp istifadə ki, bu funksiya keçildi
sözü qarşı Bu giriş edir.
Bu 0 qaytarır ki, var idi deməkdir biz istədiyiniz halda bir matç,
doğru geri.
Biz uğurla tapıldı bizim hash cədvəldə söz.
>> Bir matç yox idi, onda biz istəyirik yenidən loop gedən və baxmaq
növbəti giriş.
Və biz isə orada loop davam edəcəyik bu bağlı siyahısında entries var.
Biz qırmaq əgər nə olur loop üçün bu həyata?
Yəni biz bir giriş tapmadı deməkdir ki, olan halda, bu söz eşleşen
biz göstərir yalan qayıtmaq ki, bizim hash table bu söz yox idi.
Və yoxlamaq üçün bu.
Bütün hüquqlar.
>> Belə ki, ölçüsü bir nəzər salaq.
İndi ölçüsü olduqca sadə olacaq ildən hər bir söz üçün, yük xatırlayıram
biz qlobal artırılacağını tapılmadı dəyişən hashtable_size.
Belə ki, ölçüsü funksiyası yalnız ki, qlobal geri olacaq
dəyişən, və bu.
>> İndi, nəhayət, biz boşaltmaq lazımdır lüğət hər şey həyata bir dəfə.
Belə ki, necə biz bunu edəcəyik?
Burada, biz bütün loop edirik Bizim hash masa buketler.
Belə ki, NUM_BUCKETS buketler var.
Və bizim hash hər bağlıdır siyahısı üçün masa, biz artıq loop olacaq
bağlı siyahı bütövlükdə hər element azad.
İndi biz ehtiyatlı olmaq lazımdır, belə ki, burada biz ki, bir müvəqqəti dəyişən var
növbəti göstərici saxlanılması bağlı siyahısında element.
Və sonra biz pulsuz olacaq cari element.
>> Biz bəri bunu əmin olmaq lazımdır yalnız cari element azad edə bilməz
və sonra növbəti pointer daxil olmaq üçün cəhd edin ildən sonra biz onu azad
yaddaş etibarsız olur.
Beləliklə, biz bir pointer ətrafında saxlamaq lazımdır növbəti element, sonra biz azad edə bilər
cari element, sonra biz təkmilləşdirə bilər qeyd etmək bizim cari element
növbəti element.
>> Biz elementləri loop var lazımdır isə bu bağlı siyahısında.
Biz bütün bağlı siyahıları ki edəcəyik hash table, və biz tamamlayın dəfə
ki, biz tamamilə boşaldılır etdik hash table, və biz tamamlayın.
Belə ki, unloads üçün heç mümkün deyil yalan qayıtmaq və biz Bitirdiğinizde, biz
yalnız doğru qayıdın.