1 00:00:00,000 --> 00:00:00,530 2 00:00:00,530 --> 00:00:03,070 >> SPEAKER 1: Mari kita memberi penyelesaian ini cuba. 3 00:00:03,070 --> 00:00:07,130 Jadi mari kita lihat apa yang kami Nod struct akan kelihatan seperti. 4 00:00:07,130 --> 00:00:11,040 Di sini, kita lihat kita akan mempunyai Bool Word dan nod bintang struct 5 00:00:11,040 --> 00:00:12,990 Kanak-kanak braket abjad. 6 00:00:12,990 --> 00:00:18,720 Perkara Jadi pertama yang anda mungkin tertanya-tanya, mengapa hash abjad ditakrifkan sebagai 27? 7 00:00:18,720 --> 00:00:22,540 Nah, ingat bahawa kita akan perlu yang akan mengendalikan koma atas, jadi 8 00:00:22,540 --> 00:00:25,610 yang akan menjadi sebahagian dari satu khas kes sepanjang program ini. 9 00:00:25,610 --> 00:00:28,780 >> OK, sekarang, ingat bagaimana Indone sebenarnya berfungsi. 10 00:00:28,780 --> 00:00:33,420 Katakan kita mengindeks kucing perkataan, maka dari akar indone kami, 11 00:00:33,420 --> 00:00:36,670 kita akan melihat Kanak-kanak pelbagai, dan kita akan melihat 12 00:00:36,670 --> 00:00:42,250 indeks yang sepadan dengan huruf C. Jadi yang akan menjadi indeks dua. 13 00:00:42,250 --> 00:00:46,400 Jadi memandangkan, yang akan memberikan kita nod baru, dan kemudian kita akan 14 00:00:46,400 --> 00:00:47,880 bekerja dari nod itu. 15 00:00:47,880 --> 00:00:51,830 >> Jadi diberikan nod itu, kami sekali lagi akan melihat pelbagai Kanak-kanak itu, 16 00:00:51,830 --> 00:00:56,170 dan kita akan melihat indeks sifar untuk sesuai dengan A dalam kucing. 17 00:00:56,170 --> 00:01:01,240 Demikian maka kita akan pergi dengan node itu, dan diberikan nod itu, kita akan 18 00:01:01,240 --> 00:01:05,170 melihat indeks yang sepadan T. Dan beralih dengan node itu, 19 00:01:05,170 --> 00:01:09,590 akhirnya, kita telah benar-benar kelihatan melalui Cat perkataan kami, dan kini bool 20 00:01:09,590 --> 00:01:15,020 Word sepatutnya untuk menunjukkan sama ada perkataan ini diberikan sebenarnya perkataan. 21 00:01:15,020 --> 00:01:17,530 >> Jadi mengapa kita perlu bahawa kes khas? 22 00:01:17,530 --> 00:01:21,680 Nah, bagaimana jika bencana perkataan di dalam kamus kita, tetapi 23 00:01:21,680 --> 00:01:24,120 kucing perkataan itu tidak? 24 00:01:24,120 --> 00:01:29,030 Jadi dalam mencari untuk melihat jika kucing perkataan adalah di dalam kamus kita, kita akan 25 00:01:29,030 --> 00:01:34,880 berjaya melihat melalui indeks C-A-T dan mencapai nod, tetapi itu 26 00:01:34,880 --> 00:01:39,760 hanya kerana malapetaka yang berlaku kepada mewujudkan nod dalam perjalanan dari C-A-T semua 27 00:01:39,760 --> 00:01:41,250 jalan ke akhir perkataan. 28 00:01:41,250 --> 00:01:46,520 Jadi bool Word digunakan menunjukkan sama ada lokasi ini tertentu sebenarnya 29 00:01:46,520 --> 00:01:48,370 menunjukkan perkataan. 30 00:01:48,370 --> 00:01:52,920 >> Baiklah, jadi sekarang kita tahu apa yang Indone akan kelihatan seperti, mari kita lihat 31 00:01:52,920 --> 00:01:54,800 pada majlis Load. 32 00:01:54,800 --> 00:01:58,670 Jadi Beban akan mengembalikan bool untuk sama ada kita berjaya atau 33 00:01:58,670 --> 00:02:03,020 kamus tidak berjaya dimuatkan dan ini akan menjadi kamus 34 00:02:03,020 --> 00:02:04,520 yang kita mahu untuk beban. 35 00:02:04,520 --> 00:02:08,310 Perkara itu kita akan lakukan adalah terbuka up yang kamus untuk membaca. 36 00:02:08,310 --> 00:02:12,060 Kita perlu memastikan kita tidak gagal, jadi jika kamus itu tidak 37 00:02:12,060 --> 00:02:15,280 berjaya dibuka, ia akan kembali Tidak, di mana kita akan 38 00:02:15,280 --> 00:02:16,340 kembali Palsu. 39 00:02:16,340 --> 00:02:21,290 Tetapi menganggap bahawa ia berjaya dibuka, maka kita sebenarnya boleh membaca 40 00:02:21,290 --> 00:02:22,310 melalui kamus. 41 00:02:22,310 --> 00:02:24,940 >> Perkara itu kita akan mahu lakukan adalah kita mempunyai ini 42 00:02:24,940 --> 00:02:26,560 akar ubah global. 43 00:02:26,560 --> 00:02:30,250 Sekarang, akar akan menjadi bintang nod. 44 00:02:30,250 --> 00:02:33,830 Ia bahagian atas indone kita bahawa kita akan iterating melalui. 45 00:02:33,830 --> 00:02:38,200 Perkara itu kita akan mahu lakukan adalah memperuntukkan memori untuk akar kami. 46 00:02:38,200 --> 00:02:42,040 >> Perhatikan bahawa kita menggunakan Calloc fungsi, yang pada dasarnya yang sama 47 00:02:42,040 --> 00:02:45,560 sebagai fungsi Malloc, kecuali ia dijamin untuk kembali sesuatu yang 48 00:02:45,560 --> 00:02:47,240 sepenuhnya menumpukan perhatian di luar. 49 00:02:47,240 --> 00:02:51,350 Jadi, jika kita digunakan Malloc, kita perlu pergi melalui semua petunjuk dalam kita 50 00:02:51,350 --> 00:02:54,220 nod dan memastikan bahawa mereka semua null. 51 00:02:54,220 --> 00:02:56,780 Jadi Calloc akan melakukannya untuk kita. 52 00:02:56,780 --> 00:03:00,390 >> Sekarang, seperti Malloc, kita perlu membuat memastikan bahawa peruntukan yang sebenarnya 53 00:03:00,390 --> 00:03:01,580 berjaya. 54 00:03:01,580 --> 00:03:04,060 Jika ini kembali batal, maka kita perlu menutup kamus kami 55 00:03:04,060 --> 00:03:06,170 memfailkan dan kembali Palsu. 56 00:03:06,170 --> 00:03:11,040 Jadi menganggap peruntukan itu berjaya, kita akan menggunakan nod 57 00:03:11,040 --> 00:03:14,340 bintang Kursor untuk melelar melalui indone kami. 58 00:03:14,340 --> 00:03:17,950 Jadi akar kita tidak pernah akan berubah, tetapi kita akan menggunakan Kursor untuk 59 00:03:17,950 --> 00:03:20,770 sebenarnya pergi dari nod ke nod. 60 00:03:20,770 --> 00:03:25,000 >> Baiklah, jadi dalam ini Untuk gelung, kami membaca fail kamus, 61 00:03:25,000 --> 00:03:26,965 dan kami menggunakan sekurang fgetc. 62 00:03:26,965 --> 00:03:30,360 Jadi fgetc akan merebut satu watak dari fail. 63 00:03:30,360 --> 00:03:33,430 Kami akan terus meraih aksara manakala kita tidak sampai ke 64 00:03:33,430 --> 00:03:37,540 berakhir fail, jadi terdapat dua kes kita perlu untuk mengendalikan. 65 00:03:37,540 --> 00:03:41,640 Yang pertama, jika watak itu bukan seorang Laluan baru ini, jadi kita tahu jika ia adalah yang baru 66 00:03:41,640 --> 00:03:44,480 line, maka kita kira-kira untuk bergerak ke perkataan baru. 67 00:03:44,480 --> 00:03:49,300 Tetapi menganggap ia bukan satu talian baru, maka di sini, kita mahu memikirkan 68 00:03:49,300 --> 00:03:52,440 indeks kita akan indeks ke dalam dalam pelbagai Kanak-kanak yang 69 00:03:52,440 --> 00:03:53,890 kita melihat sebelum ini. 70 00:03:53,890 --> 00:03:57,950 >> Jadi seperti yang saya katakan sebelum ini, kita perlu kes khas koma atas itu. 71 00:03:57,950 --> 00:04:01,040 Notis yang kita gunakan operator pertigaan di sini, jadi kita akan membaca 72 00:04:01,040 --> 00:04:05,500 ini seolah-olah watak kita baca dalam adalah apostrofe, maka kita akan 73 00:04:05,500 --> 00:04:11,740 set indeks sama dengan abjad tolak 1, yang akan menjadi indeks 26. 74 00:04:11,740 --> 00:04:15,190 Lagi, jika ia tidak apostrofe, maka kita akan menetapkan indeks 75 00:04:15,190 --> 00:04:17,820 sama dengan c tolak. 76 00:04:17,820 --> 00:04:23,090 Jadi ingat kembali dari p sebelumnya set, c tolak akan memberi kita 77 00:04:23,090 --> 00:04:27,470 kedudukan abjad c, jadi jika c huruf A, kemahuan ini 78 00:04:27,470 --> 00:04:28,770 memberikan kita indeks sifar. 79 00:04:28,770 --> 00:04:32,180 Untuk surat B, ia akan memberi kami indeks 1, dan sebagainya. 80 00:04:32,180 --> 00:04:37,070 >> Jadi ini memberikan kita indeks ke dalam Kanak-kanak array yang kita mahu. 81 00:04:37,070 --> 00:04:42,540 Sekarang, jika indeks ini kini null dalam Kanak-kanak yang pelbagai, ini bermakna bahawa 82 00:04:42,540 --> 00:04:47,470 nod buat masa ini tidak wujud dari jalan itu, jadi kita perlu memperuntukkan 83 00:04:47,470 --> 00:04:49,220 nod bagi jalan itu. 84 00:04:49,220 --> 00:04:50,610 Itulah apa yang kita lakukan di sini. 85 00:04:50,610 --> 00:04:54,650 Jadi kita akan, sekali lagi, gunakan Calloc fungsi supaya kita tidak mempunyai 86 00:04:54,650 --> 00:05:00,130 kepada sifar keluar semua petunjuk, dan kita, sekali lagi, perlu menyemak Calloc yang 87 00:05:00,130 --> 00:05:01,300 tidak gagal. 88 00:05:01,300 --> 00:05:04,760 Jika Calloc tidak gagal, maka kita perlu untuk memunggah segala-galanya, kita menutup 89 00:05:04,760 --> 00:05:06,880 kamus, dan kembali Palsu. 90 00:05:06,880 --> 00:05:14,110 >> Jadi menganggap bahawa ia tidak gagal, maka ini akan mewujudkan anak yang baru bagi kami, 91 00:05:14,110 --> 00:05:16,000 dan kemudian kita akan pergi kepada anak itu. 92 00:05:16,000 --> 00:05:19,030 Kursor kami akan melelar turun kepada anak itu. 93 00:05:19,030 --> 00:05:23,390 Sekarang, jika ini tidak batal untuk memulakan dengan, maka kursor hanya boleh melelar 94 00:05:23,390 --> 00:05:26,650 ke kanak-kanak yang tanpa sebenarnya perlu memperuntukkan apa-apa. 95 00:05:26,650 --> 00:05:30,790 Ini adalah kes di mana kita mula-mula berlaku untuk memperuntukkan kucing perkataan, dan 96 00:05:30,790 --> 00:05:34,390 ini bermakna apabila kita pergi untuk memperuntukkan malapetaka, kita tidak perlu membuat 97 00:05:34,390 --> 00:05:35,720 nod untuk C-A-T lagi. 98 00:05:35,720 --> 00:05:37,620 Mereka sudah wujud. 99 00:05:37,620 --> 00:05:40,140 >> OK, jadi apa yang lain ini? 100 00:05:40,140 --> 00:05:44,600 Ini adalah keadaan di mana c adalah garis sendeng terbalik n, di mana c adalah barisan baru. 101 00:05:44,600 --> 00:05:47,780 Ini bermakna bahawa kita telah berjaya selesai satu perkataan. 102 00:05:47,780 --> 00:05:51,020 Sekarang, apa yang kita mahu lakukan apabila kita berjaya menamatkan satu perkataan? 103 00:05:51,020 --> 00:05:55,250 Kami akan menggunakan bidang perkataan ini di dalam nod struct kami. 104 00:05:55,250 --> 00:06:00,570 >> Kami mahu menetapkan bahawa untuk Benar, supaya menunjukkan bahawa nod ini menunjukkan 105 00:06:00,570 --> 00:06:03,320 berjaya perkataan perkataan sebenar. 106 00:06:03,320 --> 00:06:05,050 Sekarang, ditetapkan bahawa kepada Benar. 107 00:06:05,050 --> 00:06:09,210 Kami mahu menetapkan semula kursor menjelaskan fakta untuk permulaan indone lagi. 108 00:06:09,210 --> 00:06:13,510 Dan akhirnya, kenaikan kamus kami saiz sejak kami mendapati perkataan lain. 109 00:06:13,510 --> 00:06:16,450 >> Baiklah, jadi kita akan terus melakukan itu, membaca dalam watak oleh 110 00:06:16,450 --> 00:06:21,960 watak, membina nod baru di indone kami dan untuk setiap perkataan dalam 111 00:06:21,960 --> 00:06:26,810 kamus, sehingga kita akhirnya mencapai c sama EOF, di mana, kita memecahkan 112 00:06:26,810 --> 00:06:28,100 daripada fail. 113 00:06:28,100 --> 00:06:31,110 Sekarang, terdapat dua kes di bawah yang kita mungkin telah melanda EOF. 114 00:06:31,110 --> 00:06:35,680 Yang pertama adalah jika terdapat ralat membaca dari fail tersebut, jadi jika terdapat 115 00:06:35,680 --> 00:06:39,280 kesilapan, kita perlu melakukan perkara yang biasa memunggah segala-galanya, menutup fail, 116 00:06:39,280 --> 00:06:40,520 kembali Palsu. 117 00:06:40,520 --> 00:06:43,870 Dengan menganggap tidak ada kesilapan, yang hanya bermakna kita sebenarnya melanda akhir 118 00:06:43,870 --> 00:06:47,820 fail, di mana, kita menutup memfailkan dan kembali Benar kerana kita 119 00:06:47,820 --> 00:06:51,010 berjaya dimuatkan kamus ke indone kami. 120 00:06:51,010 --> 00:06:54,240 >> Baiklah, jadi sekarang mari kita menyemak Semak. 121 00:06:54,240 --> 00:06:58,780 Melihat Semak majlis itu, kita lihat Semak yang akan mengembalikan bool. 122 00:06:58,780 --> 00:07:03,740 Ia mengembalikan Benar jika perkataan ini bahawa itu yang diluluskan adalah di indone kami. 123 00:07:03,740 --> 00:07:06,170 Ia mengembalikan Salah sebaliknya. 124 00:07:06,170 --> 00:07:10,110 >> Jadi bagaimana kita boleh menentukan sama ada perkataan ini adalah di indone kita? 125 00:07:10,110 --> 00:07:14,270 Kita lihat di sini bahawa, sama seperti sebelum ini, kita akan menggunakan kursor untuk melelar 126 00:07:14,270 --> 00:07:16,010 melalui indone kami. 127 00:07:16,010 --> 00:07:20,650 Sekarang, di sini, kita akan melelar atas seluruh perkataan kami. 128 00:07:20,650 --> 00:07:24,680 Jadi iterating lebih perkataan kita diluluskan, kita akan menentukan 129 00:07:24,680 --> 00:07:29,280 indeks ke dalam pelbagai Kanak-kanak yang sepadan dengan perkataan kurungan i. 130 00:07:29,280 --> 00:07:34,150 Jadi ini akan kelihatan betul-betul seperti Beban, di mana jika kurungan perkataan i merupakan 131 00:07:34,150 --> 00:07:38,110 koma atas, maka kita mahu menggunakan indeks abjad tolak 1 kerana kita ditentukan 132 00:07:38,110 --> 00:07:41,160 di situlah kita akan untuk menyimpan apostrofi. 133 00:07:41,160 --> 00:07:44,440 >> Yang lain kita akan menggunakan tolower perkataan kurungan i. 134 00:07:44,440 --> 00:07:48,270 Jadi ingat perkataan yang boleh mempunyai sewenang-wenangnya permodalan, dan dengan itu kita 135 00:07:48,270 --> 00:07:51,590 ingin memastikan bahawa kita menggunakan versi kecil perkara. 136 00:07:51,590 --> 00:07:55,300 Dan kemudian tolak dari huruf kecil yang kepada, sekali lagi, memberi kita 137 00:07:55,300 --> 00:07:57,940 kedudukan abjad watak itu. 138 00:07:57,940 --> 00:08:01,740 Supaya akan menjadi indeks kami ke dalam pelbagai Kanak-kanak itu. 139 00:08:01,740 --> 00:08:06,480 >> Dan kini, jika indeks itu ke dalam Kanak-kanak array adalah batal, ini bermakna kita 140 00:08:06,480 --> 00:08:09,050 tidak lagi boleh terus iterating turun indone kami. 141 00:08:09,050 --> 00:08:13,320 Jika itu berlaku, perkataan ini tidak boleh mungkin berada dalam indone kita, kerana jika ia 142 00:08:13,320 --> 00:08:18,000 telah, yang akan bermakna akan ada jalan ke perkataan itu, dan anda akan 143 00:08:18,000 --> 00:08:19,350 tidak pernah menghadapi null. 144 00:08:19,350 --> 00:08:21,910 Jadi menghadapi batal, kita kembali Palsu. 145 00:08:21,910 --> 00:08:23,810 Perkataan itu tidak ada di dalam kamus. 146 00:08:23,810 --> 00:08:28,200 Jika tidak batal, maka kita akan terus iterating, jadi kita akan 147 00:08:28,200 --> 00:08:33,150 untuk mengemaskini kursor kami untuk menunjukkan bahawa nod tertentu pada indeks itu. 148 00:08:33,150 --> 00:08:36,659 >> Oleh itu, kita terus melakukan bahawa sepanjang keseluruhan perkataan. 149 00:08:36,659 --> 00:08:40,630 Andai kata kita tidak pernah memukul batal, yang cara kami dapat mendapatkan melalui keseluruhan 150 00:08:40,630 --> 00:08:44,840 dunia dan mencari nod di indone kami, tetapi kami tidak cukup dilakukan lagi. 151 00:08:44,840 --> 00:08:46,350 Kami tidak mahu hanya kembali Benar. 152 00:08:46,350 --> 00:08:51,400 Kami mahu kembali kursor perkataan ralat sejak, ingat lagi, jika kucing tidak 153 00:08:51,400 --> 00:08:55,140 dalam kamus dan malapetaka kita, maka kita akan berjaya melalui 154 00:08:55,140 --> 00:08:59,810 kucing perkataan, tetapi perkataan kursor akan palsu dan tidak benar. 155 00:08:59,810 --> 00:09:04,990 Oleh itu, kita kembali perkataan kursor untuk menunjukkan sama ada nod ini sebenarnya perkataan, 156 00:09:04,990 --> 00:09:06,530 dan itu sahaja untuk cek. 157 00:09:06,530 --> 00:09:08,310 >> Jadi mari kita lihat Saiz. 158 00:09:08,310 --> 00:09:11,410 Jadi Saiz akan menjadi agak mudah sejak, ingat dalam Beban, kami 159 00:09:11,410 --> 00:09:15,480 menokok saiz kamus untuk setiap perkataan yang kita hadapi. 160 00:09:15,480 --> 00:09:20,820 Jadi Saiz hanya akan kembali saiz kamus, dan itu sahaja. 161 00:09:20,820 --> 00:09:24,650 >> Baiklah, jadi akhir sekali, kita mempunyai Punggahan. 162 00:09:24,650 --> 00:09:29,050 Jadi Punggahan, kita akan menggunakan fungsi rekursi untuk benar-benar melakukan semua 163 00:09:29,050 --> 00:09:33,390 kerja untuk kita, jadi fungsi kami akan dipanggil-beban. 164 00:09:33,390 --> 00:09:35,830 Apa yang pengurang beban akan lakukan? 165 00:09:35,830 --> 00:09:40,640 Kita lihat di sini-beban yang akan melelar atas semua kanak-kanak di 166 00:09:40,640 --> 00:09:45,810 nod yang khusus ini, dan jika kanak-kanak nod tidak batal, maka kita akan 167 00:09:45,810 --> 00:09:47,760 memunggah nod kanak-kanak. 168 00:09:47,760 --> 00:09:52,070 >> Jadi ini akan secara rekursif memunggah semua anak-anak kita. 169 00:09:52,070 --> 00:09:55,140 Apabila kita pasti bahawa semua anak-anak kita telah dipunggah, maka kita 170 00:09:55,140 --> 00:09:58,830 boleh membebaskan diri kita, jadi memunggah diri kita. 171 00:09:58,830 --> 00:10:04,550 Jadi ini secara rekursif akan memunggah indone keseluruhan, dan kemudian sekali itulah 172 00:10:04,550 --> 00:10:06,910 dilakukan, kita hanya boleh kembali Benar. 173 00:10:06,910 --> 00:10:09,770 Memunggah tidak boleh gagal, kami hanya membebaskan sesuatu. 174 00:10:09,770 --> 00:10:12,985 Jadi sebaik sahaja kami selesai membebaskan segala-galanya, kembali Benar. 175 00:10:12,985 --> 00:10:14,380 Dan itu sahaja. 176 00:10:14,380 --> 00:10:16,792 Nama saya Rob, dan ini adalah [didengar]. 177 00:10:16,792 --> 00:10:21,888