1 00:00:00,000 --> 00:00:00,530 2 00:00:00,530 --> 00:00:03,070 >> SPEAKER 1: Adjunk ez a megoldás egy próbát. 3 00:00:03,070 --> 00:00:07,130 Szóval vessünk egy pillantást, amit a Struktúra csomópont fog kinézni. 4 00:00:07,130 --> 00:00:11,040 Itt azt látjuk, mi lesz, hogy egy Bool Word és a Struct csomópont csillag 5 00:00:11,040 --> 00:00:12,990 Gyermekek zárójelbe ábécét. 6 00:00:12,990 --> 00:00:18,720 Tehát az első dolog, amit meg lehet tudni, miért ábécé hash meghatározása 27? 7 00:00:18,720 --> 00:00:22,540 Nos, ne feledjük, hogy mi lesz szüksége hogy kezelése az aposztróf, így 8 00:00:22,540 --> 00:00:25,610 hogy lesz egyfajta speciális esetben az egész program. 9 00:00:25,610 --> 00:00:28,780 >> OK, most már, emlékszem, hogy a Trie tényleg működik. 10 00:00:28,780 --> 00:00:33,420 Mondjuk mi indexelés szót macskák, majd a gyökere a Trie, 11 00:00:33,420 --> 00:00:36,670 fogunk nézni a gyerekek tömb, és meg fogjuk nézni a 12 00:00:36,670 --> 00:00:42,250 index, amely megfelel a levél C. Így lenne index kettő. 13 00:00:42,250 --> 00:00:46,400 Így tekintettel arra, hogy megadja nekünk egy új csomópont, és aztán majd 14 00:00:46,400 --> 00:00:47,880 dolgozni, hogy a csomópont. 15 00:00:47,880 --> 00:00:51,830 >> Tehát, mivel a csomópont vagyunk ismét majd nézd meg a Children tömb, 16 00:00:51,830 --> 00:00:56,170 és fogunk nézni index nulla hogy megfelelnek az A a macska. 17 00:00:56,170 --> 00:01:01,240 Akkor fogunk menni, hogy a csomópont, és mivel a csomópont, megyünk 18 00:01:01,240 --> 00:01:05,170 hogy nézd meg az index, amely megfelel T. és áttérnek az, hogy a csomópont, 19 00:01:05,170 --> 00:01:09,590 Végül, már teljesen úgy nézett a mi szó Cat, és most Bool 20 00:01:09,590 --> 00:01:15,020 Word állítólag arra vonatkozóan, hogy ez adott szó valójában egy szót sem. 21 00:01:15,020 --> 00:01:17,530 >> Akkor miért van szükségünk, hogy a különleges eset? 22 00:01:17,530 --> 00:01:21,680 Nos, mi van, ha a szó katasztrófa van a szótár, de 23 00:01:21,680 --> 00:01:24,120 a szó macska nem? 24 00:01:24,120 --> 00:01:29,030 Így szeretnének látni, ha a szó macska az a szótár, megyünk 25 00:01:29,030 --> 00:01:34,880 sikeresen nézd át az indexek C-A-T és eléri a csomópont, de ez 26 00:01:34,880 --> 00:01:39,760 csak azért, mert katasztrófa történt létre csomópontok az út C-A-T minden 27 00:01:39,760 --> 00:01:41,250 az utat, hogy a végén a szót. 28 00:01:41,250 --> 00:01:46,520 Tehát Bool szót használják jelezzék, hogy ez az adott helyen valóban 29 00:01:46,520 --> 00:01:48,370 azt jelzi, egy szót sem. 30 00:01:48,370 --> 00:01:52,920 >> Rendben, most, hogy tudjuk, hogy mi a Trie fog kinézni, nézzük 31 00:01:52,920 --> 00:01:54,800 A Load funkció. 32 00:01:54,800 --> 00:01:58,670 Tehát Load fog visszatérni a Bool mert akár sikeresen vagy 33 00:01:58,670 --> 00:02:03,020 sikertelenül betöltött szótár és ez lesz a szótárban 34 00:02:03,020 --> 00:02:04,520 hogy szeretnénk betölteni. 35 00:02:04,520 --> 00:02:08,310 Tehát az első dolog, amit meg fogunk tenni nyitva fel, hogy a szótár az olvasáshoz. 36 00:02:08,310 --> 00:02:12,060 Meg kell bizonyosodnunk arról, hogy nem mulasztotta el, Tehát, ha a szótár nem 37 00:02:12,060 --> 00:02:15,280 sikeresen kinyitotta, hogy vissza fog térni Nem, ebben az esetben fogunk 38 00:02:15,280 --> 00:02:16,340 return false. 39 00:02:16,340 --> 00:02:21,290 De feltételezve, hogy sikeresen nyitott, akkor lehet olvasni 40 00:02:21,290 --> 00:02:22,310 a szótárban. 41 00:02:22,310 --> 00:02:24,940 >> Tehát az első dolog, amit meg fogunk akarok, hogy itt van ez a 42 00:02:24,940 --> 00:02:26,560 globális változó gyökér. 43 00:02:26,560 --> 00:02:30,250 Most, gyökér lesz egy csomópont csillag. 44 00:02:30,250 --> 00:02:33,830 Ez a tetején a Trie, hogy mi vagyunk fog iterációjával keresztül. 45 00:02:33,830 --> 00:02:38,200 Tehát az első dolog, amit most szeretne majd tennie, hogy memóriát a mi gyökér. 46 00:02:38,200 --> 00:02:42,040 >> Figyeljük meg, hogy mi a calloc funkció, ami lényegében ugyanaz 47 00:02:42,040 --> 00:02:45,560 a malloc függvénye, kivéve, hogy biztos, hogy vissza valamit, ami 48 00:02:45,560 --> 00:02:47,240 teljesen nullázni ki. 49 00:02:47,240 --> 00:02:51,350 Tehát, ha használják Malloc, meg kellene megy át a mutató a mi 50 00:02:51,350 --> 00:02:54,220 csomópont, és győződjön meg arról, hogy ők mind null. 51 00:02:54,220 --> 00:02:56,780 Így calloc fog tenni, hogy a számunkra. 52 00:02:56,780 --> 00:03:00,390 >> Most, mint Malloc, meg kell, hogy arról, hogy a kiosztás valójában 53 00:03:00,390 --> 00:03:01,580 sikeres. 54 00:03:01,580 --> 00:03:04,060 Ha ez vissza null, akkor kell zárni a szótár 55 00:03:04,060 --> 00:03:06,170 fájlt, és vissza hamis. 56 00:03:06,170 --> 00:03:11,040 Tehát feltételezve, hogy az elosztás sikeres, fogunk használni egy csomópont 57 00:03:11,040 --> 00:03:14,340 csillag kurzor iterációkhoz keresztül Trie. 58 00:03:14,340 --> 00:03:17,950 Így a gyökér soha nem fog megváltozni, de fogunk használni kurzor a 59 00:03:17,950 --> 00:03:20,770 valóban megy csomópontok közötti. 60 00:03:20,770 --> 00:03:25,000 >> Rendben, ebben a hurok, vagyunk olvasás révén a szótárban fájlt, 61 00:03:25,000 --> 00:03:26,965 és mi használ a fgetc. 62 00:03:26,965 --> 00:03:30,360 Tehát fgetc fog megragad egy karaktert a fájlból. 63 00:03:30,360 --> 00:03:33,430 Megyünk is megragadta karakter, amíg nem éri el a 64 00:03:33,430 --> 00:03:37,540 A fájl végére, így van két esetben kell kezelni. 65 00:03:37,540 --> 00:03:41,640 Az első, ha a karakter nem volt új sor, így tudom, hogy egy új 66 00:03:41,640 --> 00:03:44,480 vonal, akkor mindjárt lépni egy új szót. 67 00:03:44,480 --> 00:03:49,300 De feltételezve, hogy ez nem egy új sort, majd a Itt, azt akarjuk, hogy kitaláljuk, a 68 00:03:49,300 --> 00:03:52,440 index fogunk index a A gyermekek tömb 69 00:03:52,440 --> 00:03:53,890 néztük korábban. 70 00:03:53,890 --> 00:03:57,950 >> Szóval, mint már mondtam, meg kell speciális eset az aposztróf. 71 00:03:57,950 --> 00:04:01,040 Figyeljük meg, mi a hármas operátor itt, így fogunk olvasni 72 00:04:01,040 --> 00:04:05,500 ezt, ha a karakter olvassuk volt egy aposztróf, akkor megyünk 73 00:04:05,500 --> 00:04:11,740 SET index egyenlő ábécé mínusz 1, melyik lesz az index 26. 74 00:04:11,740 --> 00:04:15,190 Különben, ha ez nem egy aposztróf, akkor megyünk be az index 75 00:04:15,190 --> 00:04:17,820 egyenlő c mínusz egy. 76 00:04:17,820 --> 00:04:23,090 Így emlékszik vissza a korábbi p-készletek, c mínusz egy fog adni nekünk 77 00:04:23,090 --> 00:04:27,470 abc helyzete c, tehát ha c a betű, ez az akarat 78 00:04:27,470 --> 00:04:28,770 nekünk index nulla. 79 00:04:28,770 --> 00:04:32,180 A B betű, ez ad nekünk az 1-es index, és így tovább. 80 00:04:32,180 --> 00:04:37,070 >> Szóval ez ad nekünk az index a Gyermekek tömb, amit akarunk. 81 00:04:37,070 --> 00:04:42,540 Nos, ha ez a mutató jelenleg null-ben A Children tömb, ami azt jelenti, hogy 82 00:04:42,540 --> 00:04:47,470 A csomópont jelenleg nem létezik a ezen az úton, így szükséges, hogy jelöljenek ki egy 83 00:04:47,470 --> 00:04:49,220 csomópont az úton. 84 00:04:49,220 --> 00:04:50,610 Ez az, amit mi itt. 85 00:04:50,610 --> 00:04:54,650 Így megyünk, újra használja a calloc funkció, így nem kell 86 00:04:54,650 --> 00:05:00,130 nullára ki az összes mutató, és mi, ismét ellenőrizni kell, hogy calloc 87 00:05:00,130 --> 00:05:01,300 nem sikerül. 88 00:05:01,300 --> 00:05:04,760 Ha calloc nem sikerül, akkor meg kell kirak mindent, zárja be a 89 00:05:04,760 --> 00:05:06,880 szótár és a return false. 90 00:05:06,880 --> 00:05:14,110 >> Tehát, feltételezve, hogy nem sikerül, akkor Ez létrehoz egy új gyerek a számunkra, 91 00:05:14,110 --> 00:05:16,000 és akkor majd megy, hogy a gyermek számára. 92 00:05:16,000 --> 00:05:19,030 A kurzor iterációkhoz le, hogy a gyermek számára. 93 00:05:19,030 --> 00:05:23,390 Nos, ha ez nem null kezdődik, akkor a kurzor is csak iterációkhoz 94 00:05:23,390 --> 00:05:26,650 le, hogy az a gyerek, anélkül, hogy kellene kiosztani semmit. 95 00:05:26,650 --> 00:05:30,790 Ez az eset áll fenn, amikor először történt kiosztani a szót macska, és 96 00:05:30,790 --> 00:05:34,390 azt jelenti, hogy mikor megyünk kiosztani katasztrófa, nem kell létrehozni 97 00:05:34,390 --> 00:05:35,720 csomópontok a C-A-T-újra. 98 00:05:35,720 --> 00:05:37,620 Már léteznek. 99 00:05:37,620 --> 00:05:40,140 >> OK, akkor mi ez a más? 100 00:05:40,140 --> 00:05:44,600 Ez az az állapot, ahol c volt backslash n, ahol c egy új sort. 101 00:05:44,600 --> 00:05:47,780 Ez azt jelenti, hogy sikeresen elkészült egy szót sem. 102 00:05:47,780 --> 00:05:51,020 Nos, mit akarunk csinálni, amikor sikeresen befejezte egy szó? 103 00:05:51,020 --> 00:05:55,250 Fogjuk használni ezt a szót, a területen belsejében a Struct csomópont. 104 00:05:55,250 --> 00:06:00,570 >> Azt szeretnénk beállítani, hogy az Igaz, hogy a azt jelzi, hogy ez a csomópont jelzi 105 00:06:00,570 --> 00:06:03,320 Sikeres szó tényleges szó. 106 00:06:03,320 --> 00:06:05,050 Most, meg, hogy az Igaz. 107 00:06:05,050 --> 00:06:09,210 Azt akarjuk állítani a kurzort a pont hogy az elején a Trie újra. 108 00:06:09,210 --> 00:06:13,510 És végül, növelni a szótár méret, mert találtunk egy másik szót. 109 00:06:13,510 --> 00:06:16,450 >> Rendben, akkor megyünk tovább csinálni hogy olvasás karakterről 110 00:06:16,450 --> 00:06:21,960 karakter, építése új csomópontok a Trie és minden egyes szó a 111 00:06:21,960 --> 00:06:26,810 szótár, míg el nem érjük c EOF egyenlő, amely esetben, szünet 112 00:06:26,810 --> 00:06:28,100 ki a fájlt. 113 00:06:28,100 --> 00:06:31,110 Most van két eset alatt amely talán megüt EOF. 114 00:06:31,110 --> 00:06:35,680 Az első az, ha nem volt hiba olvasni a fájlt, így ha volt 115 00:06:35,680 --> 00:06:39,280 egy hiba, meg kell csinálni a tipikus kirak mindent, zárja be a fájlt, 116 00:06:39,280 --> 00:06:40,520 return false. 117 00:06:40,520 --> 00:06:43,870 Feltételezve, hogy nem volt hiba, hogy a csak azt jelenti, hogy valóban elérje a végén 118 00:06:43,870 --> 00:06:47,820 a fájlt, amely esetben zárjuk a fájlt, és vissza True mivel 119 00:06:47,820 --> 00:06:51,010 sikeresen betöltötte a szótárban a mi Trie. 120 00:06:51,010 --> 00:06:54,240 >> Rendben, most nézzük Kivétel. 121 00:06:54,240 --> 00:06:58,780 Ami a Check funkció látjuk hogy a Check fog visszatérni a Bool. 122 00:06:58,780 --> 00:07:03,740 Visszatér Igaz, ha ezt a szót, hogy ez az hogy telt a mi Trie. 123 00:07:03,740 --> 00:07:06,170 Ez False egyébként. 124 00:07:06,170 --> 00:07:10,110 >> Szóval, hogyan fogjuk meghatározni, hogy ez a szó a mi Trie? 125 00:07:10,110 --> 00:07:14,270 Látjuk, hogy itt, csakúgy, mint korábban, fogunk használni kurzor iterációkhoz 126 00:07:14,270 --> 00:07:16,010 keresztül Trie. 127 00:07:16,010 --> 00:07:20,650 Most, itt, megyünk iterációkhoz mint a teljes szót. 128 00:07:20,650 --> 00:07:24,680 Így az iterációt szót vagyunk telt, megyünk, hogy meghatározzák a 129 00:07:24,680 --> 00:07:29,280 index a Children tömb megfelel a szót konzol i. 130 00:07:29,280 --> 00:07:34,150 Tehát ez fog úgy nézzen ki, mint a Load, ahol, ha szó konzol i egy 131 00:07:34,150 --> 00:07:38,110 aposztróf, akkor szeretnénk használni index ábécé mínusz 1, mert megállapítottuk, 132 00:07:38,110 --> 00:07:41,160 hogy hová megyünk tárolására aposztróf. 133 00:07:41,160 --> 00:07:44,440 >> Else fogjuk használni tolower szó konzol i. 134 00:07:44,440 --> 00:07:48,270 Úgy emlékszem, hogy szó lehet tetszőleges nagybetűs, és így 135 00:07:48,270 --> 00:07:51,590 szeretnénk, hogy győződjön meg arról, hogy mi a a kisbetűs változata dolgokat. 136 00:07:51,590 --> 00:07:55,300 Majd vonjuk ki ebből a kisbetűs a, újra, nekünk az 137 00:07:55,300 --> 00:07:57,940 abc pozíció , hogy a karakter. 138 00:07:57,940 --> 00:08:01,740 Szóval ez lesz az index a gyermekek tömbben. 139 00:08:01,740 --> 00:08:06,480 >> És most, ha az index a Children tömb null, ez azt jelenti, 140 00:08:06,480 --> 00:08:09,050 már nem is iterációjával le a Trie. 141 00:08:09,050 --> 00:08:13,320 Ha ez a helyzet, ez a szó nem esetleg a mi Trie, hiszen ha 142 00:08:13,320 --> 00:08:18,000 arra, hogy azt jelentené, hogy lenne egy utat le ezt a szót, és akkor 143 00:08:18,000 --> 00:08:19,350 soha nem találkoznak null. 144 00:08:19,350 --> 00:08:21,910 Így találkozik null, visszatérünk Hamis. 145 00:08:21,910 --> 00:08:23,810 A szó nem szerepel a szótárban. 146 00:08:23,810 --> 00:08:28,200 Ha ez nem nulla, akkor megyünk tovább iterációjával, így megyünk 147 00:08:28,200 --> 00:08:33,150 frissíteni a kurzort, hogy pont, hogy adott csomóponton abban index. 148 00:08:33,150 --> 00:08:36,659 >> Így csinálom, hogy az egész a teljes szót. 149 00:08:36,659 --> 00:08:40,630 Feltéve, hogy soha nem sújtotta null, azt jelenti, tudtuk, hogy az egész 150 00:08:40,630 --> 00:08:44,840 világban, és megtalálni a csomópont a Trie, de mi nem egészen kész még. 151 00:08:44,840 --> 00:08:46,350 Nem akarjuk, hogy csak vissza igaz. 152 00:08:46,350 --> 00:08:51,400 Azt akarjuk, hogy visszatérjen a kurzor hibás szó mivel emlékszem újra, ha a macska nem 153 00:08:51,400 --> 00:08:55,140 az a szótár és a katasztrófa, akkor sikeresen átvészelni 154 00:08:55,140 --> 00:08:59,810 a szó macska, de a kurzor szó hamis lesz, és nem igaz. 155 00:08:59,810 --> 00:09:04,990 Így visszatérünk kurzort jelző szót hogy ez a csomópont valójában egy szó, 156 00:09:04,990 --> 00:09:06,530 és ennyi a csekk. 157 00:09:06,530 --> 00:09:08,310 >> Szóval nézd meg méret. 158 00:09:08,310 --> 00:09:11,410 Így méret lesz nagyon egyszerű mivel emlékszem a Load vagyunk 159 00:09:11,410 --> 00:09:15,480 megnő szótár mérete Minden szó, hogy találkozunk. 160 00:09:15,480 --> 00:09:20,820 Így méret csak megy vissza szótár méretét, és ennyi. 161 00:09:20,820 --> 00:09:24,650 >> Rendben, végül, mi a memóriából. 162 00:09:24,650 --> 00:09:29,050 Tehát Unload fogunk használni rekurzív függvény, hogy ténylegesen minden 163 00:09:29,050 --> 00:09:33,390 A munka számunkra, így a funkció lesz az úgynevezett Unloader. 164 00:09:33,390 --> 00:09:35,830 Mi Unloader fog csinálni? 165 00:09:35,830 --> 00:09:40,640 Látjuk, hogy itt Unloader fog végighaladni mind a gyerekek 166 00:09:40,640 --> 00:09:45,810 az adott csomópont, és ha a gyermek csomópont nem null, akkor megyünk 167 00:09:45,810 --> 00:09:47,760 kirak a gyermek csomópont. 168 00:09:47,760 --> 00:09:52,070 >> Így ez lesz a rekurzív távolítsa el az összes gyermekeink. 169 00:09:52,070 --> 00:09:55,140 Ha nem vagyunk biztosak, hogy gyermekeink kirakodását, akkor 170 00:09:55,140 --> 00:09:58,830 is szabad magunkat, így kirak magunkat. 171 00:09:58,830 --> 00:10:04,550 Tehát ez rekurzívan kirak a egész Trie, majd miután ez 172 00:10:04,550 --> 00:10:06,910 kész, akkor csak vissza igaz. 173 00:10:06,910 --> 00:10:09,770 Unload nem teheti meg, mi csak felszabadítja a dolgokat. 174 00:10:09,770 --> 00:10:12,985 Tehát, ha már kész szabaddá Mindent vissza igaz. 175 00:10:12,985 --> 00:10:14,380 És ennyi. 176 00:10:14,380 --> 00:10:16,792 A nevem Rob, és ez a volt [hallható]. 177 00:10:16,792 --> 00:10:21,888