1 00:00:00,000 --> 00:00:12,350 >> [Predvaja glasba] 2 00:00:12,350 --> 00:00:13,050 >> ROB Bowden: Hi. 3 00:00:13,050 --> 00:00:13,640 Jaz sem Rob. 4 00:00:13,640 --> 00:00:16,210 In kaj je to rešitev ven. 5 00:00:16,210 --> 00:00:20,070 Torej, tukaj bomo izvajati Splošni pregled. 6 00:00:20,070 --> 00:00:24,090 Vidimo, da struct node našega miza bo izgledala takole. 7 00:00:24,090 --> 00:00:28,710 Tako se dogaja, da imajo char beseda matrika velikosti DOLŽINE + 1. 8 00:00:28,710 --> 00:00:32,259 Ne pozabite + 1, saj je najvišja beseda v slovarju, je 45. 9 00:00:32,259 --> 00:00:33,130 znake. 10 00:00:33,130 --> 00:00:37,070 In potem bomo potrebovali eno dodatno znak za backslash nič. 11 00:00:37,070 --> 00:00:40,870 >> In potem naša Hashtable v vsaki bucket se dogaja, da shranite 12 00:00:40,870 --> 00:00:42,320 povezani seznam vozlišč. 13 00:00:42,320 --> 00:00:44,420 Mi jim ne gre ravno sondiranje tukaj. 14 00:00:44,420 --> 00:00:48,430 In tako, da se poveže na naslednji element v vedro, moramo 15 00:00:48,430 --> 00:00:50,390 struct vozlišče * naslednji. 16 00:00:50,390 --> 00:00:51,110 OK. 17 00:00:51,110 --> 00:00:53,090 Torej, to je tisto vozlišče izgleda. 18 00:00:53,090 --> 00:00:56,180 >> Zdaj tukaj je deklaracija naše Hashtable. 19 00:00:56,180 --> 00:00:59,640 To se dogaja, da imajo 16.834 vedra. 20 00:00:59,640 --> 00:01:01,910 Vendar pa ta številka res ni važno. 21 00:01:01,910 --> 00:01:05,450 In končno, gremo, da imajo Globalna spremenljivka velikost Hashtable, ki 22 00:01:05,450 --> 00:01:07,000 se dogaja, da začnete kot nič. 23 00:01:07,000 --> 00:01:10,760 In to se dogaja, da bi spremljali, kako veliko besed so v našem slovarju. 24 00:01:10,760 --> 00:01:13,710 >> Tako da je lahko pogled na obremenitve. 25 00:01:13,710 --> 00:01:16,390 Opazili, da je obremenitev pa vrne bool. 26 00:01:16,390 --> 00:01:20,530 Vam vrne true, če je bilo uspešno naložen, in false sicer. 27 00:01:20,530 --> 00:01:23,990 In to traja char * slovarja ki je slovar 28 00:01:23,990 --> 00:01:25,280 da želimo odpreti. 29 00:01:25,280 --> 00:01:27,170 Tako da je prva stvar, ki bomo storili. 30 00:01:27,170 --> 00:01:29,500 >> Bomo fopen Slovar za branje. 31 00:01:29,500 --> 00:01:31,680 In bomo morali narediti prepričajte, da je uspelo. 32 00:01:31,680 --> 00:01:35,920 Torej, če bi se vrnil NULL, potem nismo Uspešno odprite slovar. 33 00:01:35,920 --> 00:01:37,440 In moramo vrne false. 34 00:01:37,440 --> 00:01:41,580 Vendar ob predpostavki, da je to storila uspešno open, nato pa smo želeli prebrati 35 00:01:41,580 --> 00:01:42,400 Slovar. 36 00:01:42,400 --> 00:01:46,450 Tako da zanka, dokler ne bomo našli nekaj Razlog za prekinitev iz te zanke, 37 00:01:46,450 --> 00:01:47,570 katerih bomo videli. 38 00:01:47,570 --> 00:01:48,920 Tako da zanka. 39 00:01:48,920 --> 00:01:51,780 >> In zdaj bomo malloc eno samo vozlišče. 40 00:01:51,780 --> 00:01:54,020 In seveda moramo v zrak še enkrat preveriti. 41 00:01:54,020 --> 00:01:58,680 Torej, če mallocing ni uspelo, nato pa smo želeli raztovoriti kateregakoli vozlišča, ki smo 42 00:01:58,680 --> 00:02:02,590 se je zgodilo z malloc prej, zaprite slovar in vrne false. 43 00:02:02,590 --> 00:02:06,830 Ampak ignoriranje, da ob predpostavki, da bomo uspelo, nato pa smo želeli uporabiti fscanf 44 00:02:06,830 --> 00:02:12,400 se glasi eno samo besedo iz našega slovar v naše vozlišče. 45 00:02:12,400 --> 00:02:17,940 Torej, ne pozabite, da vstop> beseda je char beseda buffer od velikosti LENGHTH + 1 46 00:02:17,940 --> 00:02:20,300 da bomo za shranjevanje besedo prijavite 47 00:02:20,300 --> 00:02:25,070 >> Torej fscanf se bo vrnil 1, dokler kot je bilo uspešno 48 00:02:25,070 --> 00:02:26,750 prebrati besedo iz spisa. 49 00:02:26,750 --> 00:02:30,460 Če katera napaka se zgodi, ali pa pridete do konca v spis, 50 00:02:30,460 --> 00:02:31,950 ne bo vrnila 1. 51 00:02:31,950 --> 00:02:35,180 V tem primeru se ne vrne 1, bomo na koncu bo izbruhne 52 00:02:35,180 --> 00:02:37,280 to zanko, medtem ko. 53 00:02:37,280 --> 00:02:42,770 Tako vidimo, da ko bomo imeli uspešno prebrati besedo v 54 00:02:42,770 --> 00:02:48,270 Vpis> beseda, potem pa si bomo, da Beseda uporabo našega hash funkcijo. 55 00:02:48,270 --> 00:02:49,580 >> Oglejmo si na hash funkcijo. 56 00:02:49,580 --> 00:02:52,430 57 00:02:52,430 --> 00:02:55,610 Tako da ne boste res potrebujejo razumeti. 58 00:02:55,610 --> 00:02:59,460 In dejansko smo pravkar potegnil ta hash deluje iz interneta. 59 00:02:59,460 --> 00:03:04,010 Edina stvar, morate priznati, je da to traja char * besedo. 60 00:03:04,010 --> 00:03:08,960 Tako da je ob niz kot vložek, in vračanje nepodpisan int kot proizvodnja. 61 00:03:08,960 --> 00:03:12,360 Tako, da je vse hash funkcija je, ali je prevzame na vhodu in vam 62 00:03:12,360 --> 00:03:14,490 Indeks v Hashtable. 63 00:03:14,490 --> 00:03:18,530 >> Opazimo, da smo moding jih NUM_BUCKETS, tako, da bi se vrnila vrednost 64 00:03:18,530 --> 00:03:21,730 dejansko je indeks v Hashtable in ne indeks tistega 65 00:03:21,730 --> 00:03:24,320 mejá matrike. 66 00:03:24,320 --> 00:03:28,060 Torej, glede na to funkcijo, greva za razpršitev besedo, da smo prebrali 67 00:03:28,060 --> 00:03:29,390 Slovar. 68 00:03:29,390 --> 00:03:31,700 In potem bomo uporabili da hash vstaviti 69 00:03:31,700 --> 00:03:33,750 vstop v Hashtable. 70 00:03:33,750 --> 00:03:38,520 >> Zdaj Hashtable hash je trenutna povezani seznam v tabeli. 71 00:03:38,520 --> 00:03:41,410 In to je zelo možno, da je to samo NULL. 72 00:03:41,410 --> 00:03:44,960 Želimo, da vstavite svoj vstop na začetku tega povezani seznam. 73 00:03:44,960 --> 00:03:48,600 In tako bomo imeli naši trenutni vstopna točka za kaj Hashtable 74 00:03:48,600 --> 00:03:50,380 Trenutno kaže. 75 00:03:50,380 --> 00:03:53,310 In potem bomo za shranjevanje, V Hashtable na 76 00:03:53,310 --> 00:03:55,350 hash, trenutni vpis. 77 00:03:55,350 --> 00:03:59,320 Torej ti dve vrstici uspešno vstavite Vpis na začetku 78 00:03:59,320 --> 00:04:02,260 povezani seznam v tem indeksu v Hashtable. 79 00:04:02,260 --> 00:04:04,900 >> Ko smo končali s tem, vemo, da smo našli še eno besedo 80 00:04:04,900 --> 00:04:07,790 slovar, in smo spet prirastek. 81 00:04:07,790 --> 00:04:13,960 Tako smo ostali storiti, dokler fscanf končno vrnil nekaj ne-1 pri 82 00:04:13,960 --> 00:04:16,950 kateri točki se spomnite, da Sprostiti moramo vnos. 83 00:04:16,950 --> 00:04:19,459 Torej, tukaj smo malloced vnos. 84 00:04:19,459 --> 00:04:21,329 In smo se trudili, da preberete nekaj iz slovarja. 85 00:04:21,329 --> 00:04:23,910 In nismo uspešno prebrati nekaj iz slovarja, v 86 00:04:23,910 --> 00:04:26,650 tem primeru moramo osvoboditi vnos da ne bomo nikoli dejansko dana v 87 00:04:26,650 --> 00:04:29,140 Hashtable, in končno prekinil. 88 00:04:29,140 --> 00:04:32,750 >> Ko smo izbruhnejo moramo videti, dobro, smo izbruhnejo, ker tam 89 00:04:32,750 --> 00:04:34,360 je bila napaka pri branju iz datoteke? 90 00:04:34,360 --> 00:04:37,120 Ali pa smo izbruhnejo, ker smo dosegel konec datoteke? 91 00:04:37,120 --> 00:04:39,480 Če je prišlo do napake, potem želimo, da se vrne false. 92 00:04:39,480 --> 00:04:40,930 Ker obremenitev ni uspelo. 93 00:04:40,930 --> 00:04:43,890 In v tem procesu želimo raztovoriti vse besede, ki jih preberejo in 94 00:04:43,890 --> 00:04:45,670 zaprite datoteko slovarja. 95 00:04:45,670 --> 00:04:48,740 >> Ob predpostavki, da nam ni uspelo, nato pa smo pravkar še vedno morali zapreti slovar 96 00:04:48,740 --> 00:04:53,040 datoteko, in na koncu vrne true, saj smo uspešno naložen slovar. 97 00:04:53,040 --> 00:04:54,420 In to je to za tovor. 98 00:04:54,420 --> 00:04:59,020 Torej, zdaj preveriti, saj naložen Hashtable, bo izgledala takole. 99 00:04:59,020 --> 00:05:03,140 Zato preverite, da vrne bool, ki je dogaja, da navedejo, ali opravil 100 00:05:03,140 --> 00:05:07,530 V znakovnem * besedo, ali je opravil V nizu je v našem slovarju. 101 00:05:07,530 --> 00:05:09,890 Torej, če je v slovarju, če je v našem Hashtable, 102 00:05:09,890 --> 00:05:11,170 se bomo vrnili res. 103 00:05:11,170 --> 00:05:13,380 In če ni, se bomo vrnili napačen. 104 00:05:13,380 --> 00:05:17,740 >> Glede na to opravili v besedi, smo gre za razpršitev besedo. 105 00:05:17,740 --> 00:05:22,110 Zdaj pomembna stvar, da priznajo, je da smo v obremenitvi vedeli, da so vsi 106 00:05:22,110 --> 00:05:23,820 Besede, ki jih bomo lahko male črke. 107 00:05:23,820 --> 00:05:25,820 Ampak tukaj nismo tako prepričani. 108 00:05:25,820 --> 00:05:29,510 Če pogledamo našo hash funkcijo, naša hash funkcija dejansko 109 00:05:29,510 --> 00:05:32,700 nižji ohišje vsak znak besede. 110 00:05:32,700 --> 00:05:37,940 Torej, ne glede na kapitalizacijo beseda, naš hash funkcija je donos 111 00:05:37,940 --> 00:05:42,270 istim indeksom za karkoli kapitalizacija je, kot bi imela 112 00:05:42,270 --> 00:05:45,280 vrnjeni v celoti male črke različica besede. 113 00:05:45,280 --> 00:05:46,600 V redu je. 114 00:05:46,600 --> 00:05:49,790 To je naš indeks je v Hashtable za te besede. 115 00:05:49,790 --> 00:05:52,940 >> Zdaj to zanko se bo Ponovil v povezanem seznamu 116 00:05:52,940 --> 00:05:55,000 , ki je bil v tistem indeksu. 117 00:05:55,000 --> 00:05:59,610 Torej opazili smo inicializacija vnos poudariti, da tega indeksa. 118 00:05:59,610 --> 00:06:02,750 Bomo še naprej medtem ko vstop! = NULL. 119 00:06:02,750 --> 00:06:07,770 In ne pozabite, da posodobitev kazalec V naš zapis povezave list = vnos> next. 120 00:06:07,770 --> 00:06:14,400 Tako imamo trenutno dostopno točko Naslednji element v povezanem seznamu. 121 00:06:14,400 --> 00:06:19,250 >> Torej, za vsak vpis v povezanem seznamu bomo uporabili strcasecmp. 122 00:06:19,250 --> 00:06:20,330 To ni strcomp. 123 00:06:20,330 --> 00:06:23,780 Ker še enkrat, želimo delati stvari zadevo insensitively. 124 00:06:23,780 --> 00:06:27,870 Tako smo uporabili strcasecmp za primerjavo beseda, ki je predmet tega 125 00:06:27,870 --> 00:06:31,860 Funkcija proti besedi da je v tej točki. 126 00:06:31,860 --> 00:06:35,570 Če se ne vrne nič, kar pomeni, da ni bilo ujemanje, v tem primeru želimo 127 00:06:35,570 --> 00:06:36,630 vrne true. 128 00:06:36,630 --> 00:06:39,590 Uspešno smo ugotovili beseda v našem Hashtable. 129 00:06:39,590 --> 00:06:43,040 >> Če ne bi bilo tekmo, nato pa smo spet bo zanke in pogled na 130 00:06:43,040 --> 00:06:43,990 next entry. 131 00:06:43,990 --> 00:06:47,640 In bomo še naprej loopinga medtem ko so navedbe v tej povezanem seznamu. 132 00:06:47,640 --> 00:06:50,160 Kaj se zgodi, če razbijemo v to zanko? 133 00:06:50,160 --> 00:06:55,110 To pomeni, da nismo našli vnos, ki ujema to besedo, v tem primeru 134 00:06:55,110 --> 00:07:00,220 vrnemo false, ki označuje, da je naš Hashtable ne vsebujejo to besedo. 135 00:07:00,220 --> 00:07:02,540 In to je ček. 136 00:07:02,540 --> 00:07:04,790 >> Tako da je lahko pogled na velikost. 137 00:07:04,790 --> 00:07:06,970 Zdaj velikost se bo zelo preprosta. 138 00:07:06,970 --> 00:07:11,080 Ker se spomnim na obremenitve, za vsako besedo smo ugotovili, smo se poveča globalno 139 00:07:11,080 --> 00:07:12,880 spremenljivka velikost Hashtable. 140 00:07:12,880 --> 00:07:16,480 Torej funkcija velikost je le, da bo Za vrnitev globalno spremenljivko. 141 00:07:16,480 --> 00:07:18,150 In to je to. 142 00:07:18,150 --> 00:07:22,300 >> Zdaj končno moramo raztovoriti slovar, ko je vse končano. 143 00:07:22,300 --> 00:07:25,340 Torej, kako bomo to storili? 144 00:07:25,340 --> 00:07:30,440 Tukaj smo zanka preko vse vedra naši mizi. 145 00:07:30,440 --> 00:07:33,240 Torej obstajajo NUM_BUCKETS vedra. 146 00:07:33,240 --> 00:07:37,410 In za vsakega povezanega seznama v našem Hashtable, gremo v zanko 147 00:07:37,410 --> 00:07:41,070 celota povezanega seznama, sprostitev vsak element. 148 00:07:41,070 --> 00:07:42,900 >> Zdaj moramo biti previdni. 149 00:07:42,900 --> 00:07:47,910 Torej, tukaj imamo začasno spremenljivko da je shranjevanje kazalec na naslednji 150 00:07:47,910 --> 00:07:49,730 element v povezanem seznamu. 151 00:07:49,730 --> 00:07:52,140 In potem bomo brezplačno trenutni element. 152 00:07:52,140 --> 00:07:55,990 Moramo biti prepričani, da bomo to naredili, ker smo Ne moreš sprostiti trenutni element 153 00:07:55,990 --> 00:07:59,180 in nato poskusite za dostop do naslednjega kazalec, ker ko smo ga osvobodili, 154 00:07:59,180 --> 00:08:00,870 spomin postane neveljaven. 155 00:08:00,870 --> 00:08:04,990 >> Zato moramo ohraniti okoli kazalec Naslednji element, potem bomo lahko osvobodi 156 00:08:04,990 --> 00:08:08,360 Sedanji element, in potem bomo lahko posodobite Naš trenutni element, da kaže na 157 00:08:08,360 --> 00:08:09,550 Naslednji element. 158 00:08:09,550 --> 00:08:12,800 Bomo zanko, medtem ko obstajajo elementi V tem povezani seznam. 159 00:08:12,800 --> 00:08:15,620 To bomo storili za vse povezane Seznam v Hashtable. 160 00:08:15,620 --> 00:08:19,460 In ko sva končala s tem, ki smo jih celoti raztovoriti Hashtable in 161 00:08:19,460 --> 00:08:20,190 končali smo. 162 00:08:20,190 --> 00:08:23,200 Zato je nemogoče za razkladanje da se kdaj vrne false. 163 00:08:23,200 --> 00:08:26,470 In ko bomo končali, smo pravkar vrnil res. 164 00:08:26,470 --> 00:08:29,000 >> Dajmo ta rešitev poskusiti. 165 00:08:29,000 --> 00:08:33,070 Torej, vzemimo si oglejte, kaj naše struct vozlišče bo izgledal. 166 00:08:33,070 --> 00:08:36,220 Tukaj vidimo, da bomo imeli bool Beseda in struct node * otroci 167 00:08:36,220 --> 00:08:37,470 Nosilec abecede. 168 00:08:37,470 --> 00:08:38,929 169 00:08:38,929 --> 00:08:42,020 Torej prva stvar, ki jo lahko sprašujete, zakaj je abeceda 170 00:08:42,020 --> 00:08:44,660 ed definirana kot 27? 171 00:08:44,660 --> 00:08:47,900 No, ne pozabite, da bomo potrebovali da se ravnanje opuščaj. 172 00:08:47,900 --> 00:08:51,910 Tako da se dogaja, da se nekoliko Poseben primer v celotnem programu. 173 00:08:51,910 --> 00:08:54,710 >> Zdaj se spominjam, kako Trie dejansko deluje. 174 00:08:54,710 --> 00:08:59,380 Recimo, da smo indeksiranje besedo "mačke". Nato pa iz korena Trsta, 175 00:08:59,380 --> 00:09:02,610 bomo pogled na otroke matrika, in gremo pogledati 176 00:09:02,610 --> 00:09:08,090 Indeks, ki ustreza črko C. tako da bo indeksirajo 2. 177 00:09:08,090 --> 00:09:11,530 Torej, glede na to, da bo nam dajejo novo vozlišče. 178 00:09:11,530 --> 00:09:13,820 In potem bomo delati iz tega vozlišča. 179 00:09:13,820 --> 00:09:17,770 >> Torej, glede na to vozlišče, smo še enkrat bo pogled na otroke matrike. 180 00:09:17,770 --> 00:09:22,110 In bomo pogled na indeks ničelni ustrezati A v mačka. 181 00:09:22,110 --> 00:09:27,170 Potem smo šli na to vozlišče, in glede na to, da je vozlišče greva 182 00:09:27,170 --> 00:09:31,090 gledati na koncu je to ustreza na T. in se gibljejo na to vozlišče, 183 00:09:31,090 --> 00:09:35,530 Nazadnje smo popolnoma videti skozi naša beseda "mačka". In zdaj bool 184 00:09:35,530 --> 00:09:40,960 Beseda naj bi kazali, ali ta dana beseda je pravzaprav beseda. 185 00:09:40,960 --> 00:09:43,470 >> Torej, zakaj potrebujemo to poseben primer? 186 00:09:43,470 --> 00:09:47,700 No, kaj je beseda "katastrofa" V našem slovarju, vendar 187 00:09:47,700 --> 00:09:50,150 Beseda "mačka", ne? 188 00:09:50,150 --> 00:09:54,580 Tako in je videti, da vidim, če je beseda "mačka" je v našem slovarju, smo 189 00:09:54,580 --> 00:09:59,970 bo uspešno odmisliti indeksi C-T v regiji vozlišče. 190 00:09:59,970 --> 00:10:04,290 Ampak to je samo zato, ker katastrofa se je zgodilo, da ustvarite vozlišč na poti 191 00:10:04,290 --> 00:10:07,190 iz C-A-T, vse do Konec besede. 192 00:10:07,190 --> 00:10:12,020 Torej je bool beseda uporablja za označevanje, ali To posebno mesto 193 00:10:12,020 --> 00:10:14,310 dejansko kaže na besedo. 194 00:10:14,310 --> 00:10:15,140 >> Vse je v redu. 195 00:10:15,140 --> 00:10:19,310 Torej sedaj, da vemo, kaj je Trie je bo izgledal, si oglejmo 196 00:10:19,310 --> 00:10:20,730 naložiti funkcijo. 197 00:10:20,730 --> 00:10:24,610 Torej obremenitev se bo vrnil bool Za ugotovitev, ali smo uspešno ali 198 00:10:24,610 --> 00:10:26,720 neuspešno naložen slovar. 199 00:10:26,720 --> 00:10:30,460 In to se bo slovar ki jih želimo naložiti. 200 00:10:30,460 --> 00:10:33,930 >> Torej prva stvar, ki smo storiti je odprt do tega slovarja za branje. 201 00:10:33,930 --> 00:10:36,160 In moramo zagotoviti, nismo uspe. 202 00:10:36,160 --> 00:10:39,580 Torej, če slovarju ni bilo uspešno odprta, se bo vrnil 203 00:10:39,580 --> 00:10:42,400 null, v tem primeru smo vrača false. 204 00:10:42,400 --> 00:10:47,230 Vendar ob predpostavki, da je uspešno odprt, potem lahko dejansko prebral 205 00:10:47,230 --> 00:10:48,220 s pomočjo slovarja. 206 00:10:48,220 --> 00:10:50,880 >> Torej prva stvar, ki jo bomo želite storiti, je, moramo to 207 00:10:50,880 --> 00:10:52,500 Globalna spremenljivka korenina. 208 00:10:52,500 --> 00:10:56,190 Zdaj koren se bo vozlišče *. 209 00:10:56,190 --> 00:10:59,760 To je vrh naše Trsta, da smo bodo ponavljanjem skozi. 210 00:10:59,760 --> 00:11:02,660 Torej prva stvar, ki jo bomo bi želeli storiti, je dodeliti 211 00:11:02,660 --> 00:11:04,140 pomnilnik za naše korenine. 212 00:11:04,140 --> 00:11:07,980 Opazimo, da smo s pomočjo calloc funkcija, ki je v bistvu enak 213 00:11:07,980 --> 00:11:11,500 kot funkcije malloc, razen, da je zagotovljeno, da se vrnete nekaj, kar je 214 00:11:11,500 --> 00:11:13,180 popolnoma nulo. 215 00:11:13,180 --> 00:11:17,290 Torej, če smo uporabili malloc, bi morali iti skozi vse napotke v našem 216 00:11:17,290 --> 00:11:20,160 vozlišče, in poskrbite, da oni so vsi null. 217 00:11:20,160 --> 00:11:22,710 Tako da bo calloc naredil za nas. 218 00:11:22,710 --> 00:11:26,330 >> Zdaj pa tako kot malloc, moramo narediti prepričani, da je bila dodelitev dejansko 219 00:11:26,330 --> 00:11:27,520 uspešna. 220 00:11:27,520 --> 00:11:29,990 Če je ta vrnil nič, potem smo morali zapreti ali slovar 221 00:11:29,990 --> 00:11:32,100 datoteko in vrne false. 222 00:11:32,100 --> 00:11:36,835 Torej, ob predpostavki, da se dodelitev je bila uspešna, bomo uporabili vozlišče * 223 00:11:36,835 --> 00:11:40,270 kazalec za ponovitev prek našega Trsta. 224 00:11:40,270 --> 00:11:43,890 Tako da naše korenine nikoli ne bo spremenilo, ampak bomo uporabili kazalec na 225 00:11:43,890 --> 00:11:47,875 dejansko šel od vozlišča do vozlišča. 226 00:11:47,875 --> 00:11:50,940 >> Torej, v to zanko, smo branje skozi slovarju datoteke. 227 00:11:50,940 --> 00:11:53,670 In smo z uporabo fgetc. 228 00:11:53,670 --> 00:11:56,290 Fgetc se dogaja, da zgrabite single lik iz spisa. 229 00:11:56,290 --> 00:11:59,370 Bomo še naprej vzbujajoči znakov, medtem ko mi ne dosežejo 230 00:11:59,370 --> 00:12:01,570 konec datoteke. 231 00:12:01,570 --> 00:12:03,480 >> Obstajata dva primera, moramo ravnati. 232 00:12:03,480 --> 00:12:06,610 Prvič, če znak ni nova linija. 233 00:12:06,610 --> 00:12:10,450 Torej vemo, če je bila nova linija, nato smo na tem, da se premaknete na novo besedo. 234 00:12:10,450 --> 00:12:15,240 Vendar ob predpostavki, da ni bilo novo linijo, nato pa Tukaj smo želeli ugotoviti, 235 00:12:15,240 --> 00:12:18,380 Indeks bomo indeksa v V otroški matriki, ki 236 00:12:18,380 --> 00:12:19,810 smo pogledal prej. 237 00:12:19,810 --> 00:12:23,880 >> Torej, kot sem rekel prej, moramo Poseben primer opuščaj. 238 00:12:23,880 --> 00:12:26,220 Opazili smo, da uporabljate trojnim Operater tukaj. 239 00:12:26,220 --> 00:12:29,580 Torej bomo prebrali, da je to, če lik beremo v bilo 240 00:12:29,580 --> 00:12:35,330 opuščaj, potem pa gremo, da nastavite indeks = "abeceda" -1, kar bo 241 00:12:35,330 --> 00:12:37,680 je indeks 26. 242 00:12:37,680 --> 00:12:41,130 >> Drugega, če ne bi bilo opuščaj, obstaja bomo nastavili indeks 243 00:12:41,130 --> 00:12:43,760 enak C -. 244 00:12:43,760 --> 00:12:49,030 Torej, se spomnite nazaj od prejšnje p-sprejemnikov, c - se dogaja, da nam 245 00:12:49,030 --> 00:12:53,410 abecedni položaj C. Torej, če C je črka, bo to 246 00:12:53,410 --> 00:12:54,700 nam indeks zero. 247 00:12:54,700 --> 00:12:58,120 Za črko B, bo dal us indeks 1, in tako naprej. 248 00:12:58,120 --> 00:13:03,010 >> Torej, to nam daje indeksa na otroci niz, ki ga želimo. 249 00:13:03,010 --> 00:13:08,890 Zdaj, če je ta indeks trenutno null leta Otroci, to pomeni, da vozlišče 250 00:13:08,890 --> 00:13:11,830 trenutno ne obstaja od te poti. 251 00:13:11,830 --> 00:13:15,160 Zato moramo nameniti vozlišče za to pot. 252 00:13:15,160 --> 00:13:16,550 To je tisto, kar bomo storili tukaj. 253 00:13:16,550 --> 00:13:20,690 >> Torej bomo ponovno uporabiti calloc funkcijo, tako da ne bi bilo treba 254 00:13:20,690 --> 00:13:22,880 nič ven vse napotke. 255 00:13:22,880 --> 00:13:27,240 In smo spet morali preveriti da calloc ni propadel. 256 00:13:27,240 --> 00:13:30,700 Če ni calloc ne, potem moramo raztovarjanje vse, zatiskati 257 00:13:30,700 --> 00:13:32,820 slovar, in vrne false. 258 00:13:32,820 --> 00:13:40,050 Torej, ob predpostavki, da ne bo propadel, potem To bo ustvarilo nov otroka za nas. 259 00:13:40,050 --> 00:13:41,930 In potem bomo šli na tega otroka. 260 00:13:41,930 --> 00:13:44,960 Naša kazalec se bo Ponovil do tega otroka. 261 00:13:44,960 --> 00:13:49,330 >> Zdaj, če to ni bilo null na začetku, Nato kazalec lahko samo Ponovil 262 00:13:49,330 --> 00:13:52,590 do tega otroka, ne da bi dejansko ob dodeliti ničesar. 263 00:13:52,590 --> 00:13:56,730 To je primer, ko sva se prvič zgodilo dodeli besedo "mačka". In 264 00:13:56,730 --> 00:14:00,330 to pomeni, da ko gremo dodeliti "Katastrofa", nam ni treba ustvariti 265 00:14:00,330 --> 00:14:01,680 vozlišča za C-A-T znova. 266 00:14:01,680 --> 00:14:04,830 Že obstajajo. 267 00:14:04,830 --> 00:14:06,080 >> Kaj je to drugega? 268 00:14:06,080 --> 00:14:10,480 To je pogoj, kjer je c backslash n, kjer je c nova linija. 269 00:14:10,480 --> 00:14:13,710 To pomeni, da smo uspešno končan besedo. 270 00:14:13,710 --> 00:14:16,860 Zdaj, kaj želimo narediti, ko smo Uspešno zaključen besedo? 271 00:14:16,860 --> 00:14:21,100 Bomo uporabili to besedo polje znotraj našega struct vozlišča. 272 00:14:21,100 --> 00:14:23,390 Želimo, da se določi, da res. 273 00:14:23,390 --> 00:14:27,150 Tako da kaže, da je ta vozel označuje uspešen 274 00:14:27,150 --> 00:14:29,250 Beseda, dejanska beseda. 275 00:14:29,250 --> 00:14:30,940 >> Sedaj nastavite, da res. 276 00:14:30,940 --> 00:14:35,150 Želimo ponastaviti našo kazalec na točko na začetku Trsta znova. 277 00:14:35,150 --> 00:14:40,160 In končno, prirastek našo zbirko velikost, saj smo našli drugo delo. 278 00:14:40,160 --> 00:14:43,230 Torej bomo vztrajati početje to, branje značaja, ki ga značaja, 279 00:14:43,230 --> 00:14:49,150 gradnji novih vozlišč v našem Trsta in Za vsako besedo v slovarju, dokler 280 00:14:49,150 --> 00:14:54,020 smo končno dosegli C! = EOF, v katerem Primer smo iztrgajo iz spisa. 281 00:14:54,020 --> 00:14:57,050 >> Zdaj obstajata dve zadeve v ki bi lahko zadeli smo EOF. 282 00:14:57,050 --> 00:15:00,980 Prvi je, če je prišlo do napake branje iz datoteke. 283 00:15:00,980 --> 00:15:03,470 Torej, če je prišlo do napake, smo morate storiti, tipično. 284 00:15:03,470 --> 00:15:06,460 Razkladanje vsega, blizu datoteke, vrne false. 285 00:15:06,460 --> 00:15:09,810 Ob predpostavki, da ni bilo napak, da samo pomeni, da smo dejansko prizadela konec 286 00:15:09,810 --> 00:15:13,750 datoteka, v tem primeru smo blizu datoteko in vrne true, saj smo 287 00:15:13,750 --> 00:15:17,330 uspešno naložen slovar v naši Trsta. 288 00:15:17,330 --> 00:15:20,170 >> Torej, zdaj pa poglejmo ček. 289 00:15:20,170 --> 00:15:25,156 Če pogledamo funkcijo check, bomo videli ta pregled bo vrnil bool. 290 00:15:25,156 --> 00:15:29,680 Vrne true, če je to beseda, ki je prevalili je v našem Trsta. 291 00:15:29,680 --> 00:15:32,110 Vrne false sicer. 292 00:15:32,110 --> 00:15:36,050 Torej, kako ste ugotovili, ali ta beseda je v našem Trsta? 293 00:15:36,050 --> 00:15:40,190 >> Vidimo tukaj, da, tako kot prej, bomo uporabili kazalec za ponovitev 294 00:15:40,190 --> 00:15:41,970 preko našega Trsta. 295 00:15:41,970 --> 00:15:46,600 Zdaj tukaj bomo Ponovil nad našo celotno besedo. 296 00:15:46,600 --> 00:15:50,620 Torej ponavljanjem nad besedo smo preteklost, bomo ugotoviti, 297 00:15:50,620 --> 00:15:56,400 Indeks v otroško matrike, ki ustreza besedo držala I. Torej je to 298 00:15:56,400 --> 00:15:59,670 bo videti natanko tako kot obremenitev, če se uporablja beseda [i] 299 00:15:59,670 --> 00:16:03,310 je opuščaj, nato pa smo želeli za uporabo indeksa "abeceda" - 1. 300 00:16:03,310 --> 00:16:05,350 Ker smo ugotovili, da je ta je, če gremo za shranjevanje 301 00:16:05,350 --> 00:16:07,100 opuščaj. 302 00:16:07,100 --> 00:16:11,780 >> Sicer bomo uporabili dve manjši besedo Nosilec I. Torej, ne pozabite, da besedo lahko 303 00:16:11,780 --> 00:16:13,920 ima samovoljno črk. 304 00:16:13,920 --> 00:16:17,540 In zato želimo zagotoviti, da bomo uporabo z malo začetnico različico stvari. 305 00:16:17,540 --> 00:16:21,920 In nato odšteje od '"enkrat nam spet daje abecednem 306 00:16:21,920 --> 00:16:23,880 Položaj te značaja. 307 00:16:23,880 --> 00:16:27,680 Tako, da se dogaja, da je naš indeks v otroško matrike. 308 00:16:27,680 --> 00:16:32,420 >> In zdaj, če je indeks v otroke Niz je nična, to pomeni, da 309 00:16:32,420 --> 00:16:34,990 ne deluje več ponavljanjem navzdol našega Trsta. 310 00:16:34,990 --> 00:16:38,870 Če je temu tako, ta beseda ne more morda se v naši Trsta. 311 00:16:38,870 --> 00:16:42,340 Ker če bi bila, bi to pomeni, da bi bila pot 312 00:16:42,340 --> 00:16:43,510 navzdol, da te besede. 313 00:16:43,510 --> 00:16:45,290 In nikoli ne bi naleteli na null. 314 00:16:45,290 --> 00:16:47,850 Tako srečujejo null vrnemo false. 315 00:16:47,850 --> 00:16:49,840 Besede ni v slovarju. 316 00:16:49,840 --> 00:16:53,660 Če ne bi bilo nič, potem smo bo ponavljanjem naprej. 317 00:16:53,660 --> 00:16:57,220 >> Torej gremo tam kazalec opozoriti na to, zlasti 318 00:16:57,220 --> 00:16:59,760 vozlišče v tem indeksu. 319 00:16:59,760 --> 00:17:03,150 Hranimo tem, da je po vsej celotna beseda, ob predpostavki, 320 00:17:03,150 --> 00:17:03,950 ne bomo nikoli udaril null. 321 00:17:03,950 --> 00:17:07,220 To pomeni, da nam je uspelo priti skozi celo besedo in najti 322 00:17:07,220 --> 00:17:08,920 vozlišče v našem poskusu. 323 00:17:08,920 --> 00:17:10,770 Ampak mi ni še čisto končano. 324 00:17:10,770 --> 00:17:12,290 >> Mi ne želimo le vrne true. 325 00:17:12,290 --> 00:17:14,770 Želimo, da se vrnete kazalec> besedo. 326 00:17:14,770 --> 00:17:18,980 Ker še enkrat spomnim, je "mačka" ni v našem slovarju, in "katastrofa" 327 00:17:18,980 --> 00:17:22,935 je, potem bomo uspešno pridemo z besedo "mačka". Ampak kazalec 328 00:17:22,935 --> 00:17:25,760 Beseda bo napačna in ni res. 329 00:17:25,760 --> 00:17:30,930 Torej se bomo vrnili kazalec besedo, ki označuje ali je to vozlišče dejansko beseda. 330 00:17:30,930 --> 00:17:32,470 In da je za pregled. 331 00:17:32,470 --> 00:17:34,250 >> Torej, kaj je odjaviti velikosti. 332 00:17:34,250 --> 00:17:37,350 Torej velikost se bo precej enostavno saj se spomnite na obremenitve, smo 333 00:17:37,350 --> 00:17:41,430 povečevanje obsega slovarja za vsaka beseda, ki jo srečamo. 334 00:17:41,430 --> 00:17:45,350 Torej velikost je le, da bo vrnitev slovarja velikosti. 335 00:17:45,350 --> 00:17:47,390 In to je to. 336 00:17:47,390 --> 00:17:50,590 >> Torej, na koncu smo se izkrcali. 337 00:17:50,590 --> 00:17:55,100 Torej, razkladanje, bomo uporabili rekurzivna funkcija dejansko storiti vse 338 00:17:55,100 --> 00:17:56,530 dela za nas. 339 00:17:56,530 --> 00:17:59,340 Torej, naša naloga bo se imenuje na razkladalca. 340 00:17:59,340 --> 00:18:01,650 Kaj je Razkladalec storili? 341 00:18:01,650 --> 00:18:06,580 Vidimo tukaj, da Razkladalec bo Ponovil skozi vse otroke na 342 00:18:06,580 --> 00:18:08,410 To zlasti vozlišče. 343 00:18:08,410 --> 00:18:11,750 In če vozlišče otrok ni null, potem pa gremo na 344 00:18:11,750 --> 00:18:13,730 raztovoriti vozlišče otrok. 345 00:18:13,730 --> 00:18:18,010 >> Torej, to je ti rekurzivno razkladanje vse naše otroke. 346 00:18:18,010 --> 00:18:21,080 Ko smo prepričani, da so vsi naši otroci so raztovorili, nato pa smo 347 00:18:21,080 --> 00:18:25,210 Lahko se osvobodimo, tako razkladanje sebe. 348 00:18:25,210 --> 00:18:29,460 To bo delovalo rekurzivno raztovoriti celoten Trsta. 349 00:18:29,460 --> 00:18:32,850 In potem, ko je to storjeno, smo lahko samo vrne true. 350 00:18:32,850 --> 00:18:34,210 Raztovoriti ne more izogniti. 351 00:18:34,210 --> 00:18:35,710 Mi samo sprostitev stvari. 352 00:18:35,710 --> 00:18:38,870 Torej, ko smo končali sprostitev Vse, vrne true. 353 00:18:38,870 --> 00:18:40,320 In to je to. 354 00:18:40,320 --> 00:18:41,080 Moje ime je Rob. 355 00:18:41,080 --> 00:18:42,426 In to je bil speller. 356 00:18:42,426 --> 00:18:47,830 >> [Predvaja glasba]