1 00:00:00,000 --> 00:00:12,350 >> [MUSIC پخش] 2 00:00:12,350 --> 00:00:13,050 >> ROB BOWDEN: سلام. 3 00:00:13,050 --> 00:00:13,640 I راب هستم. 4 00:00:13,640 --> 00:00:16,210 و اجازه دهید این راه حل است. 5 00:00:16,210 --> 00:00:20,070 بنابراین در اینجا ما قصد داریم به پیاده سازی یک جدول به طور کلی. 6 00:00:20,070 --> 00:00:24,090 ما می بینیم که گره ساختار از ما جدول است که به شبیه به این. 7 00:00:24,090 --> 00:00:28,710 بنابراین آن را به یک کلمه کاراکتر مجموعه ای از اندازه طول + 1. 8 00:00:28,710 --> 00:00:32,259 فراموش نکنید + 1، نه از حداکثر کلمه در فرهنگ لغت 45 است 9 00:00:32,259 --> 00:00:33,130 شخصیت. 10 00:00:33,130 --> 00:00:37,070 و پس از آن ما در حال رفتن به نیاز به یک اضافی شخصیت برای صفر بک اسلش. 11 00:00:37,070 --> 00:00:40,870 >> و پس از آن پشته دارید ما را در هر سطل است که برای ذخیره 12 00:00:40,870 --> 00:00:42,320 لیست پیوندی از گره. 13 00:00:42,320 --> 00:00:44,420 ما در حال انجام کاوش خطی نیست. 14 00:00:44,420 --> 00:00:48,430 و بنابراین، به منظور پیوند به بعد عنصر در سطل، ما نیاز به یک 15 00:00:48,430 --> 00:00:50,390 گره ساختار * بعدی. 16 00:00:50,390 --> 00:00:51,110 OK. 17 00:00:51,110 --> 00:00:53,090 بنابراین این چیزی است که یک گره به نظر می رسد. 18 00:00:53,090 --> 00:00:56,180 >> حالا در اینجا اعلام است از پشته دارید ما. 19 00:00:56,180 --> 00:00:59,640 آن را به 16834 سطل. 20 00:00:59,640 --> 00:01:01,910 اما این تعداد واقعا مهم نیست. 21 00:01:01,910 --> 00:01:05,450 و در نهایت، ما قصد داریم به جهانی اندازه پشته دارید متغیر، که 22 00:01:05,450 --> 00:01:07,000 در حال رفتن به شروع کردن به عنوان صفر است. 23 00:01:07,000 --> 00:01:10,760 و آن را به پیگیری چه بسیاری از واژه ها در فرهنگ لغت ما هستند. 24 00:01:10,760 --> 00:01:13,710 >> بنابراین اجازه دهید نگاهی به بار. 25 00:01:13,710 --> 00:01:16,390 توجه داشته باشید که بار، آن را برمی گرداند بولی. 26 00:01:16,390 --> 00:01:20,530 شما به راست اگر آن را با موفقیت بود بارگذاری می شود، و غیر این صورت false. 27 00:01:20,530 --> 00:01:23,990 و آن را به کاراکتر توایع * فرهنگ لغت، است که در آن فرهنگ لغت 28 00:01:23,990 --> 00:01:25,280 که ما می خواهیم برای باز کردن. 29 00:01:25,280 --> 00:01:27,170 به طوری که اولین چیزی که است ما قصد داریم برای انجام این کار. 30 00:01:27,170 --> 00:01:29,500 >> ما قصد داریم به fopen فرهنگ لغت برای خواندن. 31 00:01:29,500 --> 00:01:31,680 و ما قصد داریم که باید به شوید که در آن موفق بوده است. 32 00:01:31,680 --> 00:01:35,920 بنابراین اگر آن را بازگشت NULL، پس ما نمی با موفقیت باز کردن فرهنگ لغت. 33 00:01:35,920 --> 00:01:37,440 و ما نیاز به بازگشت نادرست است. 34 00:01:37,440 --> 00:01:41,580 اما فرض کنید که آن را با موفقیت انجام داد باز، پس از آن ما می خواهیم به عنوان خوانده شده 35 00:01:41,580 --> 00:01:42,400 فرهنگ لغت. 36 00:01:42,400 --> 00:01:46,450 بنابراین حلقه را تا زمانی پیدا کنیم و برخی از دلیلی برای گریز از این حلقه، 37 00:01:46,450 --> 00:01:47,570 که ما آن را خواهید دید. 38 00:01:47,570 --> 00:01:48,920 بنابراین حلقه را نگه دارد. 39 00:01:48,920 --> 00:01:51,780 >> و در حال حاضر ما در حال رفتن به malloc یک گره تک. 40 00:01:51,780 --> 00:01:54,020 و البته ما نیاز به پخش دوباره چک کنید. 41 00:01:54,020 --> 00:01:58,680 بنابراین اگر mallocing موفق نبود، پس از آن ما می خواهیم برای خالی کردن هر گره که ما 42 00:01:58,680 --> 00:02:02,590 به malloc اتفاق افتاده است قبل از، نزدیک فرهنگ لغت و نادرست بازگشت. 43 00:02:02,590 --> 00:02:06,830 اما نادیده گرفتن آن، فرض ما موفق شد، پس از آن ما می خواهیم برای استفاده از fscanf 44 00:02:06,830 --> 00:02:12,400 برای خواندن یک کلمه از ما دیکشنری به گره است. 45 00:02:12,400 --> 00:02:17,940 بنابراین به یاد داشته باشید که ورود> کلمه کاراکتر است بافر کلمه از اندازه طول + 1 46 00:02:17,940 --> 00:02:20,300 که ما قصد داریم به ذخیره کلمه شوید 47 00:02:20,300 --> 00:02:25,070 >> بنابراین fscanf است که به بازگشت 1، تا زمانی به عنوان آن را قادر به موفقیت بود 48 00:02:25,070 --> 00:02:26,750 خواندن یک کلمه از فایل. 49 00:02:26,750 --> 00:02:30,460 اگر هر دو خطا رخ می دهد، و یا ما رسیدن به انتهای فایل، آن 50 00:02:30,460 --> 00:02:31,950 نه باز خواهد گشت 1. 51 00:02:31,950 --> 00:02:35,180 که در این صورت آن را بر نمی گرداند 1، ما در نهایت در حال رفتن به گریز از 52 00:02:35,180 --> 00:02:37,280 این حلقه در حالی که. 53 00:02:37,280 --> 00:02:42,770 بنابراین ما می بینیم که یک بار ما را با موفقیت خواندن کلمه به 54 00:02:42,770 --> 00:02:48,270 ورود> کلمه، پس از آن ما قصد داریم که کلمه با استفاده از تابع هش ما. 55 00:02:48,270 --> 00:02:49,580 >> اجازه دهید یک نگاه تابع هش. 56 00:02:49,580 --> 00:02:52,430 57 00:02:52,430 --> 00:02:55,610 بنابراین شما واقعا نیاز دارند برای درک این مطلب. 58 00:02:55,610 --> 00:02:59,460 و در واقع ما فقط کشیده این مخلوط کار از اینترنت. 59 00:02:59,460 --> 00:03:04,010 تنها چیزی که شما نیاز به شناخت است که این طول می کشد کاراکتر توایع * کلمه است. 60 00:03:04,010 --> 00:03:08,960 پس از آن به در نظر گرفتن یک رشته را به عنوان ورودی، و بازگشت به یک int بدون علامت به عنوان خروجی. 61 00:03:08,960 --> 00:03:12,360 به طوری که تمام یک تابع هش است، آن را طول می کشد در ورود و به شما می دهد 62 00:03:12,360 --> 00:03:14,490 شاخص به پشته دارید. 63 00:03:14,490 --> 00:03:18,530 >> توجه داشته باشید که ما در حال moding توسط NUM_BUCKETS، به طوری که مقدار برگردانده 64 00:03:18,530 --> 00:03:21,730 در واقع یک شاخص به پشته است و آیا شاخص نیست فراتر از 65 00:03:21,730 --> 00:03:24,320 مرزهای آرایه. 66 00:03:24,320 --> 00:03:28,060 با توجه به این تابع، ما قصد داریم به هش کلمه که ما به عنوان خوانده شده 67 00:03:28,060 --> 00:03:29,390 فرهنگ لغت. 68 00:03:29,390 --> 00:03:31,700 و پس از آن ما قصد استفاده از که مخلوط برای وارد کردن 69 00:03:31,700 --> 00:03:33,750 ورود به پشته دارید. 70 00:03:33,750 --> 00:03:38,520 >> مخلوط در حال حاضر پشته دارید در حال حاضر است لیست در جدول مرتبط است. 71 00:03:38,520 --> 00:03:41,410 و این بسیار ممکن که آن را فقط NULL. 72 00:03:41,410 --> 00:03:44,960 ما می خواهیم برای وارد کردن ورود ما در ابتدای این لیست پیوندی. 73 00:03:44,960 --> 00:03:48,600 و به این ترتیب ما در حال رفتن به فعلی ما نقطه ورود به آنچه که پشته دارید 74 00:03:48,600 --> 00:03:50,380 در حال حاضر به اشاره. 75 00:03:50,380 --> 00:03:53,310 و پس از آن ما قصد داریم برای ذخیره، در پشته دارید در 76 00:03:53,310 --> 00:03:55,350 مخلوط، ورودی فعلی. 77 00:03:55,350 --> 00:03:59,320 بنابراین این دو خط با موفقیت وارد ورود در آغاز از 78 00:03:59,320 --> 00:04:02,260 لیست پیوندی که در آن شاخص در پشته دارید. 79 00:04:02,260 --> 00:04:04,900 >> هنگامی که ما با آن انجام می شود، ما می دانیم که ما کلمه ای دیگر در بر داشت 80 00:04:04,900 --> 00:04:07,790 فرهنگ لغت و ما دوباره افزایش. 81 00:04:07,790 --> 00:04:13,960 بنابراین ما ادامه دهیم تا fscanf در نهایت چیزی غیر 1 در بازگشت 82 00:04:13,960 --> 00:04:16,950 که نقطه یاد داشته باشید که ما نیاز به آزاد ورود. 83 00:04:16,950 --> 00:04:19,459 پس تا اینجا ما یک ورودی malloced. 84 00:04:19,459 --> 00:04:21,329 و ما سعی به خواندن چیزی از فرهنگ لغت. 85 00:04:21,329 --> 00:04:23,910 و ما به موفقیت نمی خواند چیزی را از فرهنگ، در 86 00:04:23,910 --> 00:04:26,650 که در این صورت ما نیاز به آزادی ورود که ما در واقع هرگز به قرار 87 00:04:26,650 --> 00:04:29,140 پشته دارید، و در نهایت شکستن. 88 00:04:29,140 --> 00:04:32,750 >> زمانی که ما شکستن ما باید برای دیدن، خوب، به ما شکستن دلیل وجود دارد 89 00:04:32,750 --> 00:04:34,360 شد خطا در خواندن از فایل؟ 90 00:04:34,360 --> 00:04:37,120 آیا ما شکستن زیرا ما انتهای فایل رسیده است؟ 91 00:04:37,120 --> 00:04:39,480 اگر خطایی وجود داشته باشد، ما می خواهیم برای بازگشت کاذب. 92 00:04:39,480 --> 00:04:40,930 از آنجا که بار موفق نشد. 93 00:04:40,930 --> 00:04:43,890 و در این روند ما می خواهیم به خالی کردن تمامی واژگان که ما خوانده شده در، و 94 00:04:43,890 --> 00:04:45,670 بستن فایل فرهنگ لغت. 95 00:04:45,670 --> 00:04:48,740 >> با فرض اینکه ما موفق شوند، پس ما فقط هنوز هم نیاز به بستن فرهنگ لغت 96 00:04:48,740 --> 00:04:53,040 فایل، و در نهایت به راست از ما با موفقیت لود فرهنگ لغت. 97 00:04:53,040 --> 00:04:54,420 و که آن را برای بار. 98 00:04:54,420 --> 00:04:59,020 بنابراین در حال حاضر را بررسی کنید، با توجه به پشته دارید لود شده، رفتن به شبیه به این. 99 00:04:59,020 --> 00:05:03,140 بنابراین بررسی کنید، آن را برمی گرداند بولی است که رفتن به نشان می دهد که آیا گذشت 100 00:05:03,140 --> 00:05:07,530 در کاراکتر * کلمه، چه گذشت در رشته در فرهنگ لغت ما است. 101 00:05:07,530 --> 00:05:09,890 بنابراین اگر آن را در فرهنگ لغت است، اگر آن را در پشته دارید ما است، 102 00:05:09,890 --> 00:05:11,170 ما درست باز خواهد گشت. 103 00:05:11,170 --> 00:05:13,380 و اگر این طور نیست، ما نادرست بازگشت. 104 00:05:13,380 --> 00:05:17,740 >> با توجه به این که در کلمه گذشت، ما رفتن به هش کلمه. 105 00:05:17,740 --> 00:05:22,110 در حال حاضر چیزی که مهم است به رسمیت شناختن است که در بار ما می دانستیم که همه از 106 00:05:22,110 --> 00:05:23,820 کلمات ما قصد داریم به مورد پایین تر است. 107 00:05:23,820 --> 00:05:25,820 اما در اینجا ما خیلی مطمئن نیستید. 108 00:05:25,820 --> 00:05:29,510 اگر ما نگاهی به تابع هش ما، تابع هش ما در واقع 109 00:05:29,510 --> 00:05:32,700 پوشش پایین تر هر یک از شخصیت است کلمه. 110 00:05:32,700 --> 00:05:37,940 بنابراین بدون در نظر گرفتن سرمایه از کلمه، تابع هش ما بازگشت است 111 00:05:37,940 --> 00:05:42,270 همین شاخص برای هر سرمایه است، به عنوان آن می توانست 112 00:05:42,270 --> 00:05:45,280 برای کاملا کوچک بازگشت نسخه از کلمه است. 113 00:05:45,280 --> 00:05:46,600 بسیار خوب. 114 00:05:46,600 --> 00:05:49,790 این شاخص ما به پشته برای این کلمه است. 115 00:05:49,790 --> 00:05:52,940 >> در حال حاضر این حلقه در حال رفتن به تکرار بیش از لیست پیوندی 116 00:05:52,940 --> 00:05:55,000 که در آن شاخص بود. 117 00:05:55,000 --> 00:05:59,610 بنابراین متوجه ما مقدار دهی اولیه ورود به نقطه را به که شاخص. 118 00:05:59,610 --> 00:06:02,750 ما قصد داریم به ادامه در حالی که ورود به! = NULL. 119 00:06:02,750 --> 00:06:07,770 و به یاد داشته باشید که به روز رسانی اشاره گر در فهرست ورود ما در ارتباط = ورود> بعدی. 120 00:06:07,770 --> 00:06:14,400 بنابراین نقطه ورود فعلی ما به آیتم بعدی در لیست پیوندی. 121 00:06:14,400 --> 00:06:19,250 >> بنابراین برای هر ورودی در لیست پیوندی، ما قصد استفاده از strcasecmp. 122 00:06:19,250 --> 00:06:20,330 این strcomp نیست. 123 00:06:20,330 --> 00:06:23,780 از آنجا که یک بار دیگر، ما به خواهید انجام کارهای مورد insensitively. 124 00:06:23,780 --> 00:06:27,870 بنابراین ما استفاده strcasecmp برای مقایسه کلمه ای که از طریق این تصویب شد 125 00:06:27,870 --> 00:06:31,860 عملکرد در مقابل کلمه که در این مطلب. 126 00:06:31,860 --> 00:06:35,570 اگر آن را می گرداند صفر است، این بدان معناست که وجود دارد یک بازی، که در این صورت ما به خواهید 127 00:06:35,570 --> 00:06:36,630 بازگشت درست است. 128 00:06:36,630 --> 00:06:39,590 ما با موفقیت در بر داشت کلمه در پشته دارید ما. 129 00:06:39,590 --> 00:06:43,040 >> بود اگر یک بازی وجود ندارد، پس ما رفتن به حلقه دوباره و در نگاه 130 00:06:43,040 --> 00:06:43,990 نوشته بعدی. 131 00:06:43,990 --> 00:06:47,640 و ما رو تو حلقه در حالی که وجود دارد ادامه ورودی در این لیست پیوندی می باشد. 132 00:06:47,640 --> 00:06:50,160 اگر ما شکستن چه اتفاقی می افتد از این حلقه؟ 133 00:06:50,160 --> 00:06:55,110 این بدان معناست که ما ورود پیدا کند که تطبیق این کلمه، که در این صورت 134 00:06:55,110 --> 00:07:00,220 ما بازگشت کاذب نشان می دهد که ما پشته دارید فاقد این کلمه نیست. 135 00:07:00,220 --> 00:07:02,540 و این چک است. 136 00:07:02,540 --> 00:07:04,790 >> بنابراین اجازه دهید نگاهی به اندازه. 137 00:07:04,790 --> 00:07:06,970 در حال حاضر اندازه است خواهد خیلی ساده است. 138 00:07:06,970 --> 00:07:11,080 از آنجا که در بار به یاد داشته باشید، برای هر کلمه ما در بر داشت، ما افزایش جهانی 139 00:07:11,080 --> 00:07:12,880 اندازه پشته دارید متغیر است. 140 00:07:12,880 --> 00:07:16,480 بنابراین تابع اندازه است فقط رفتن برای بازگشت به متغیر جهانی است. 141 00:07:16,480 --> 00:07:18,150 و آن نیست. 142 00:07:18,150 --> 00:07:22,300 >> حالا در نهایت، ما نیاز به خالی کردن فرهنگ لغت یک بار همه چیز را انجام می شود. 143 00:07:22,300 --> 00:07:25,340 پس چگونه می خواهیم به انجام این کار؟ 144 00:07:25,340 --> 00:07:30,440 در اینجا ما در حال حلقه زنی بیش از همه سطل از جدول ما. 145 00:07:30,440 --> 00:07:33,240 بنابراین NUM_BUCKETS سطل وجود دارد. 146 00:07:33,240 --> 00:07:37,410 و برای هر یک از لیست پیوندی در ما پشته دارید، ما قصد داریم به حلقه بیش از 147 00:07:37,410 --> 00:07:41,070 تمامیت لیست پیوندی، آزاد کردن هر عنصر. 148 00:07:41,070 --> 00:07:42,900 >> در حال حاضر ما باید مراقب باشید. 149 00:07:42,900 --> 00:07:47,910 بنابراین در اینجا ما یک متغیر موقت که ذخیره سازی اشاره گر به بعد 150 00:07:47,910 --> 00:07:49,730 عنصر در لیست پیوندی. 151 00:07:49,730 --> 00:07:52,140 و پس از آن ما قصد داریم به آزاد عنصر فعلی. 152 00:07:52,140 --> 00:07:55,990 ما باید مطمئن شوید که ما این کار را از ما می تواند نه تنها آزاد عنصر فعلی 153 00:07:55,990 --> 00:07:59,180 و سپس سعی کنید برای دسترسی به اشاره گر بعدی، از زمانی که ما آن را آزاد کرده ام، 154 00:07:59,180 --> 00:08:00,870 حافظه نامعتبر است. 155 00:08:00,870 --> 00:08:04,990 >> بنابراین ما نیاز به نگه داشتن حدود یک اشاره گر به عنصر بعدی، پس از آن ما می تواند آزاد 156 00:08:04,990 --> 00:08:08,360 عنصر فعلی، و پس از آن ما می تواند به روز رسانی عنصر فعلی ما به نقطه را به 157 00:08:08,360 --> 00:08:09,550 عنصر بعدی. 158 00:08:09,550 --> 00:08:12,800 ما حلقه در حالی که می خواهید عناصر وجود دارد در این لیست در ارتباط است. 159 00:08:12,800 --> 00:08:15,620 ما برای همه در ارتباط است انجام این کار لیست در پشته دارید. 160 00:08:15,620 --> 00:08:19,460 و هنگامی که ما با آن انجام می شود، ما به طور کامل تخلیه پشته دارید، و 161 00:08:19,460 --> 00:08:20,190 ما در حال انجام می شود. 162 00:08:20,190 --> 00:08:23,200 پس از آن غیر ممکن است برای خالی کردن تا کنون بازگشت کاذب. 163 00:08:23,200 --> 00:08:26,470 و هنگامی که ما در حال انجام، ما فقط به راست. 164 00:08:26,470 --> 00:08:29,000 >> اجازه دهید به این راه حل را امتحان کنید. 165 00:08:29,000 --> 00:08:33,070 بنابراین اجازه دهید نگاهی به آنچه که ما گره ساختار خواهد شد. 166 00:08:33,070 --> 00:08:36,220 در اینجا ما می بینیم ما در حال رفتن به یک بولی کلمه و یک گره ساختار * کودکان 167 00:08:36,220 --> 00:08:37,470 الفبای براکت. 168 00:08:37,470 --> 00:08:38,929 169 00:08:38,929 --> 00:08:42,020 بنابراین اولین چیزی که شما ممکن است نگرانم، چرا حروف الفبا است 170 00:08:42,020 --> 00:08:44,660 اد به عنوان 27 تعریف شده است؟ 171 00:08:44,660 --> 00:08:47,900 خب، به یاد داشته باشید که ما نیاز به رفتن به به دست زدن به آپوستروف. 172 00:08:47,900 --> 00:08:51,910 به طوری که رفتن به تا حدودی از است مورد خاص در سراسر این برنامه است. 173 00:08:51,910 --> 00:08:54,710 >> حالا به یاد داشته باشید که چگونه یک درخت به در واقع کار می کند. 174 00:08:54,710 --> 00:08:59,380 اجازه دهید بگویم که ما در حال نمایه سازی واژه "گربه ها". سپس از ریشه درخت به، 175 00:08:59,380 --> 00:09:02,610 ما قصد داریم تا در کودکان نگاه آرایه، و ما در حال رفتن به در نگاه 176 00:09:02,610 --> 00:09:08,090 شاخص که مربوط به نامه C. به طوری که توان ایندکس خواهد شد 2. 177 00:09:08,090 --> 00:09:11,530 با توجه به این، که یک گره جدید به ما بدهد. 178 00:09:11,530 --> 00:09:13,820 و سپس ما را از آن گره کار می کنند. 179 00:09:13,820 --> 00:09:17,770 >> با توجه به این گره، ما یک بار دیگر هستیم رفتن به در آرایه کودکان نگاه کنید. 180 00:09:17,770 --> 00:09:22,110 و ما قصد داریم تا در شاخص صفر نگاه متناظر با در گربه. 181 00:09:22,110 --> 00:09:27,170 پس ما به قصد رفتن به آن گره، و با توجه به اینکه گره ما در حال رفتن 182 00:09:27,170 --> 00:09:31,090 در پایان نگاه آن را مربوط به T. و در حال حرکت به آن گره، 183 00:09:31,090 --> 00:09:35,530 در نهایت، ما شده اند به طور کامل نگاه از طریق کلمه ما "گربه." و در حال حاضر بولی 184 00:09:35,530 --> 00:09:40,960 کلمه قرار است نشان می دهد که آیا این کلمه داده شده است که در واقع یک کلمه. 185 00:09:40,960 --> 00:09:43,470 >> پس چرا ما نیاز داریم که مورد خاص؟ 186 00:09:43,470 --> 00:09:47,700 خوب آنچه از کلمه "فاجعه" است در فرهنگ لغت ما، اما 187 00:09:47,700 --> 00:09:50,150 کلمه "گربه" است، نه؟ 188 00:09:50,150 --> 00:09:54,580 بنابراین و به دنبال دیدن در صورتی که کلمه "گربه" در فرهنگ لغت ما، ما هستیم 189 00:09:54,580 --> 00:09:59,970 رفتن به موفقیت از طریق نگاه شاخص های C-A-T در گره های منطقه است. 190 00:09:59,970 --> 00:10:04,290 اما این فقط به این دلیل فاجعه اتفاق افتاده است به ایجاد گره در راه است 191 00:10:04,290 --> 00:10:07,190 از C-A-T، تمام راه را به در پایان کلمه است. 192 00:10:07,190 --> 00:10:12,020 بنابراین بولی کلمه استفاده می شود به نشان می دهد که آیا این محل خاص 193 00:10:12,020 --> 00:10:14,310 در واقع نشان می دهد یک کلمه. 194 00:10:14,310 --> 00:10:15,140 >> بسیار خوب. 195 00:10:15,140 --> 00:10:19,310 بنابراین در حال حاضر که ما می دانیم آنچه در آن درخت است رفتن به مانند نگاه کنید، اجازه دهید نگاهی به نگاه 196 00:10:19,310 --> 00:10:20,730 بار تابع. 197 00:10:20,730 --> 00:10:24,610 بنابراین بار است که برای بازگشت به بولی برای چه ما با موفقیت و یا 198 00:10:24,610 --> 00:10:26,720 ناموفق لود فرهنگ لغت. 199 00:10:26,720 --> 00:10:30,460 و این است که رفتن به فرهنگ لغت که ما می خواهیم برای بارگذاری. 200 00:10:30,460 --> 00:10:33,930 >> پس اولین چیزی که ما را به انجام باز است تا که فرهنگ لغت برای خواندن. 201 00:10:33,930 --> 00:10:36,160 و ما باید مطمئن شوید ما شکست نیست. 202 00:10:36,160 --> 00:10:39,580 بنابراین اگر فرهنگ لغت نیست با موفقیت افتتاح شد، از آن باز خواهد گشت 203 00:10:39,580 --> 00:10:42,400 تهی، که در این صورت ما رفتن به نادرست بازگشت. 204 00:10:42,400 --> 00:10:47,230 اما فرض کنید که آن را با موفقیت باز، پس ما در واقع می تواند به عنوان خوانده شده 205 00:10:47,230 --> 00:10:48,220 از طریق فرهنگ لغت. 206 00:10:48,220 --> 00:10:50,880 >> پس اولین چیزی که ما در حال رفتن به می خواهیم انجام دهیم این است که ما باید این 207 00:10:50,880 --> 00:10:52,500 ریشه متغیر جهانی است. 208 00:10:52,500 --> 00:10:56,190 در حال حاضر ریشه است برای رفتن به یک گره *. 209 00:10:56,190 --> 00:10:59,760 این بالای درخت به ما است که ما هستیم رفتن به تکرار از طریق. 210 00:10:59,760 --> 00:11:02,660 پس اولین چیزی که ما در حال رفتن می خواهید برای انجام شده است اختصاص 211 00:11:02,660 --> 00:11:04,140 حافظه برای ریشه های ما. 212 00:11:04,140 --> 00:11:07,980 توجه داشته باشید که ما در حال استفاده از calloc تابع است که در واقع همان 213 00:11:07,980 --> 00:11:11,500 به عنوان تابع malloc، به جز آن را تضمین برای بازگشت به چیزی است که 214 00:11:11,500 --> 00:11:13,180 به طور کامل zeroed از. 215 00:11:13,180 --> 00:11:17,290 بنابراین اگر ما malloc استفاده می شود، ما را به نیاز رفتن را از طریق تمام اشاره گرها در ما 216 00:11:17,290 --> 00:11:20,160 گره، و مطمئن شوید که همه آنها پوچ است. 217 00:11:20,160 --> 00:11:22,710 بنابراین calloc خواهد برای ما انجام دهد. 218 00:11:22,710 --> 00:11:26,330 >> در حال حاضر فقط مثل malloc، ما نیاز به ایجاد شوید که تخصیص در واقع 219 00:11:26,330 --> 00:11:27,520 موفق. 220 00:11:27,520 --> 00:11:29,990 اگر این بازگشت تهی، پس از آن ما نیاز به بستن و یا فرهنگ لغت 221 00:11:29,990 --> 00:11:32,100 فایل و بازگشت نادرست است. 222 00:11:32,100 --> 00:11:36,835 بنابراین فرض کنید که تخصیص شد موفق، ما قصد استفاده از یک گره * 223 00:11:36,835 --> 00:11:40,270 مکان نما را از طریق درخت به ما تکرار. 224 00:11:40,270 --> 00:11:43,890 بنابراین ریشه های ما هرگز به تغییر، اما ما قصد استفاده از مکان نما به 225 00:11:43,890 --> 00:11:47,875 در واقع از گره به گره برود. 226 00:11:47,875 --> 00:11:50,940 >> بنابراین در این حلقه ما در حال خواندن از طریق فایل فرهنگ لغت. 227 00:11:50,940 --> 00:11:53,670 و ما با استفاده از fgetc. 228 00:11:53,670 --> 00:11:56,290 Fgetc است که برای گرفتن یک شخصیت از فایل. 229 00:11:56,290 --> 00:11:59,370 ما قصد داریم به ادامه گرفتن شخصیت در حالی که ما نمی رسند 230 00:11:59,370 --> 00:12:01,570 انتهای فایل. 231 00:12:01,570 --> 00:12:03,480 >> دو مورد ما نیاز داریم که مسئولیت رسیدگی وجود دارد. 232 00:12:03,480 --> 00:12:06,610 اول، اگر شخصیت یک خط جدید است. 233 00:12:06,610 --> 00:12:10,450 بنابراین ما می دانیم که اگر آن را یک خط جدید بود، پس از آن ما در مورد به حرکت بر روی یک کلمه جدید است. 234 00:12:10,450 --> 00:12:15,240 اما با فرض آن را یک خط جدید نیست، پس در اینجا ما می خواهیم به کشف کردن 235 00:12:15,240 --> 00:12:18,380 شاخص ما در حال رفتن به صفحه اول به در آرایه کودکان که 236 00:12:18,380 --> 00:12:19,810 ما در قبل از نگاه. 237 00:12:19,810 --> 00:12:23,880 >> بنابراین، مانند قبل از من گفت، ما نیاز به مورد خاص آپوستروف. 238 00:12:23,880 --> 00:12:26,220 توجه کنید که ما در حال استفاده از سه تایی اپراتور اینجا. 239 00:12:26,220 --> 00:12:29,580 بنابراین ما در حال به خواندن این عنوان، اگر شخصیت ما به عنوان خوانده شده در یک بود 240 00:12:29,580 --> 00:12:35,330 آپوستروف، پس از آن ما قصد داریم به مجموعه صفحه اول = "الفبا" -1، که 241 00:12:35,330 --> 00:12:37,680 است شاخص 26. 242 00:12:37,680 --> 00:12:41,130 >> دیگر، اگر آن را در مواقع حذف حرف یا بخشی از کلمه نیست، وجود دارد ما قصد داریم به مجموعه ای از شاخص 243 00:12:41,130 --> 00:12:43,760 برابر ج -. 244 00:12:43,760 --> 00:12:49,030 بنابراین به یاد داشته باشید از قبلا p-مجموعه، ج - به ما می دهد 245 00:12:49,030 --> 00:12:53,410 موقعیت حروف الفبا از C. بنابراین اگر C نامه است، این خواهد شد 246 00:12:53,410 --> 00:12:54,700 شاخص صفر به ما بدهد. 247 00:12:54,700 --> 00:12:58,120 برای حرف B، آن را خواهد داد ما شاخص 1، و غیره. 248 00:12:58,120 --> 00:13:03,010 >> پس این به ما می دهد این شاخص به آرایه کودکان که ما می خواهیم. 249 00:13:03,010 --> 00:13:08,890 حال اگر این شاخص در حال حاضر تهی کودکان، که بدان معنی است که یک گره 250 00:13:08,890 --> 00:13:11,830 در حال حاضر وجود ندارد از این مسیر. 251 00:13:11,830 --> 00:13:15,160 بنابراین ما نیاز داریم که یک گره را برای آن مسیر. 252 00:13:15,160 --> 00:13:16,550 این چیزی است که ما در اینجا به شما انجام دهد. 253 00:13:16,550 --> 00:13:20,690 >> بنابراین ما قصد داریم دوباره استفاده از calloc عملکرد، به طوری که ما لازم نیست 254 00:13:20,690 --> 00:13:22,880 صفر از تمام اشاره گر. 255 00:13:22,880 --> 00:13:27,240 و ما دوباره نیاز به بررسی که calloc شکست نیست. 256 00:13:27,240 --> 00:13:30,700 اگر calloc شکست، پس ما نیاز به خالی کردن همه چیز، نزدیک ما 257 00:13:30,700 --> 00:13:32,820 فرهنگ لغت و نادرست بازگشت. 258 00:13:32,820 --> 00:13:40,050 بنابراین فرض کنید که آن را شکست نیست، پس این فرزند جدید را برای ما ایجاد کند. 259 00:13:40,050 --> 00:13:41,930 و پس از آن ما خواهد به آن کودک بروید. 260 00:13:41,930 --> 00:13:44,960 مکان نما ما تکرار خواهد کرد به پایین که فرزند. 261 00:13:44,960 --> 00:13:49,330 >> حال اگر این تهی نیست برای شروع، سپس مکان نما فقط می توانید تکرار 262 00:13:49,330 --> 00:13:52,590 به پایین که کودک در واقع بدون نیاز به اختصاص هر چیزی. 263 00:13:52,590 --> 00:13:56,730 این مورد که در آن ما برای اولین بار رخ داده است اختصاص کلمه "گربه". و 264 00:13:56,730 --> 00:14:00,330 این بدان معناست که هنگامی که ما به اختصاص "فاجعه" ما نیازی به ایجاد 265 00:14:00,330 --> 00:14:01,680 گره برای C-A-T دوباره. 266 00:14:01,680 --> 00:14:04,830 آنها در حال حاضر وجود دارد. 267 00:14:04,830 --> 00:14:06,080 >> چه این چیز دیگری است؟ 268 00:14:06,080 --> 00:14:10,480 این وضعیت که در آن c است بک اسلش نفر، که در آن c یک خط جدید است. 269 00:14:10,480 --> 00:14:13,710 این به این معنی است که ما باید موفقیت یک کلمه کامل شده است. 270 00:14:13,710 --> 00:14:16,860 در حال حاضر آنچه که ما می خواهیم انجام دهیم زمانی که ما با موفقیت انجام شد یک کلمه؟ 271 00:14:16,860 --> 00:14:21,100 ما قصد استفاده از این زمینه کلمه در داخل گره ساختار است. 272 00:14:21,100 --> 00:14:23,390 ما می خواهیم به مجموعه ای است که به درست است. 273 00:14:23,390 --> 00:14:27,150 به طوری که نشان می دهد که این گره نشان می دهد که موفق 274 00:14:27,150 --> 00:14:29,250 کلمه، یک کلمه واقعی. 275 00:14:29,250 --> 00:14:30,940 >> در حال حاضر مجموعه که به درست است. 276 00:14:30,940 --> 00:14:35,150 ما می خواهیم برای تنظیم مجدد مکان نما ما را به نقطه به ابتدای این درخت دوباره. 277 00:14:35,150 --> 00:14:40,160 و در نهایت، افزایش فرهنگ لغت ما اندازه، از آنجایی که ما در بر داشت کار دیگر. 278 00:14:40,160 --> 00:14:43,230 بنابراین ما قصد داریم به ادامه دهیم، خواندن در شخصیت های شخصیت، 279 00:14:43,230 --> 00:14:49,150 ساخت گره جدید در درخت به ما و برای هر کلمه در فرهنگ لغت، تا زمانی که 280 00:14:49,150 --> 00:14:54,020 ما در نهایت رسیدن به C! = EOF، که در آن صورت ما از فایل شکستن. 281 00:14:54,020 --> 00:14:57,050 >> در حال حاضر دو مورد زیر وجود دارد که ما ممکن است EOF رسید. 282 00:14:57,050 --> 00:15:00,980 اول این است که اگر خطایی وجود دارد خواندن از فایل. 283 00:15:00,980 --> 00:15:03,470 بنابراین اگر خطایی وجود دارد، ما نیاز به انجام نمونه. 284 00:15:03,470 --> 00:15:06,460 خالی کردن همه چیز، نزدیک فایل، بازگشت کاذب. 285 00:15:06,460 --> 00:15:09,810 با فرض خطایی وجود ندارد، که فقط بدان معناست که ما در واقع ضربه آخر 286 00:15:09,810 --> 00:15:13,750 فایل، که در این صورت، ما بستن فایل و بازگشت واقعی از ما 287 00:15:13,750 --> 00:15:17,330 فرهنگ لغت با موفقیت لود شده به درخت به ما. 288 00:15:17,330 --> 00:15:20,170 >> پس به چک کردن چک. 289 00:15:20,170 --> 00:15:25,156 نگاهی به تابع چک، ما می بینیم که چک است که برای بازگشت به بولی. 290 00:15:25,156 --> 00:15:29,680 این تابع اگر درست این کلمه که آن را گذشت که در درخت به ما است. 291 00:15:29,680 --> 00:15:32,110 این تابع غیر این صورت false. 292 00:15:32,110 --> 00:15:36,050 پس چگونه شما که آیا تعیین این کلمه در درخت به ما است؟ 293 00:15:36,050 --> 00:15:40,190 >> ما در اینجا می بینیم که، درست مثل قبل، ما قصد داریم به استفاده از مکان نما به تکرار 294 00:15:40,190 --> 00:15:41,970 از درخت به ما. 295 00:15:41,970 --> 00:15:46,600 حالا در اینجا ما قصد داریم به تکرار بیش از تمام حرف ما. 296 00:15:46,600 --> 00:15:50,620 بنابراین شمارش کلمه ما گذشته است، ما قصد داریم برای تعیین 297 00:15:50,620 --> 00:15:56,400 شاخص در آرایه کودکان که مربوط به کلمه براکت I. بنابراین این 298 00:15:56,400 --> 00:15:59,670 رفتن به نگاه دقیقا مانند بار، که در آن اگر کلمه [من] 299 00:15:59,670 --> 00:16:03,310 یک آپوستروف، پس از آن ما می خواهیم استفاده از شاخص "الفبا" - 1. 300 00:16:03,310 --> 00:16:05,350 از آنجا که ما تشخیص داده شود که که جایی است که ما در حال رفتن به فروشگاه 301 00:16:05,350 --> 00:16:07,100 آپوستروف. 302 00:16:07,100 --> 00:16:11,780 >> دیگری که ما قصد استفاده از دو کلمه کمتر براکت I. بنابراین به یاد داشته باشید که سخن می تواند 303 00:16:11,780 --> 00:16:13,920 باید سرمایه های دلخواه. 304 00:16:13,920 --> 00:16:17,540 و به این ترتیب ما می خواهیم مطمئن شوید که ما با استفاده از یک نسخه کوچک از چیزهایی است. 305 00:16:17,540 --> 00:16:21,920 و بعد از آن یک به یک بار تفریق دوباره ما بر اساس حروف الفبا را 306 00:16:21,920 --> 00:16:23,880 موقعیت است که شخصیت. 307 00:16:23,880 --> 00:16:27,680 به طوری که برای رفتن به صفحه ما در آرایه کودکان. 308 00:16:27,680 --> 00:16:32,420 >> و در حال حاضر در صورتی که شاخص به کودکان آرایه تهی است، که به معنی ما 309 00:16:32,420 --> 00:16:34,990 دیگر نمی تواند ادامه تکرار پایین درخت به ما. 310 00:16:34,990 --> 00:16:38,870 اگر چنین است، این واژه را می توانید احتمالا در این درخت ما باشد. 311 00:16:38,870 --> 00:16:42,340 از آنجا که اگر آن بود، که به این معنی خواهد بود که یک مسیر وجود دارد 312 00:16:42,340 --> 00:16:43,510 به آن کلمه است. 313 00:16:43,510 --> 00:16:45,290 و شما هرگز تهی روبرو می شوند. 314 00:16:45,290 --> 00:16:47,850 بنابراین در مواجهه با تهی، ما بازگشت کاذب. 315 00:16:47,850 --> 00:16:49,840 کلمه در فرهنگ لغت نیست. 316 00:16:49,840 --> 00:16:53,660 اگر آن بود تهی نیست، پس ما هستیم رفتن به تکرار ادامه خواهد داد. 317 00:16:53,660 --> 00:16:57,220 >> بنابراین ما در حال بیرون رفتن مکان نما وجود دارد به نقطه را که خاص 318 00:16:57,220 --> 00:16:59,760 گره که در آن شاخص. 319 00:16:59,760 --> 00:17:03,150 ما را انجام می دهند که در سراسر کل کلمه، با فرض 320 00:17:03,150 --> 00:17:03,950 ما هرگز ضربه تهی. 321 00:17:03,950 --> 00:17:07,220 این بدان معناست که ما قادر به نفوذ کنه بودند کل کلمه و پیدا کردن 322 00:17:07,220 --> 00:17:08,920 یک گره در تلاش است. 323 00:17:08,920 --> 00:17:10,770 اما ما هنوز تمام نشده. 324 00:17:10,770 --> 00:17:12,290 >> ما نمی خواهیم که به فقط به راست. 325 00:17:12,290 --> 00:17:14,770 ما می خواهیم برای بازگشت به مکان نما> کلمه. 326 00:17:14,770 --> 00:17:18,980 از آنجا دوباره به یاد داشته باشید، "گربه" است نه در فرهنگ لغت ما، و "فاجعه" 327 00:17:18,980 --> 00:17:22,935 است، پس از آن ما خواهد موفقیت ما از طریق کلمه "گربه". اما مکان نما 328 00:17:22,935 --> 00:17:25,760 کلمه نادرست و درست نخواهد بود. 329 00:17:25,760 --> 00:17:30,930 بنابراین ما بازگشت کلمه مکان نما را به نشان می دهد که آیا این گره است که در واقع یک کلمه. 330 00:17:30,930 --> 00:17:32,470 و که آن را برای چک. 331 00:17:32,470 --> 00:17:34,250 >> بنابراین اجازه دهید بررسی از اندازه. 332 00:17:34,250 --> 00:17:37,350 بنابراین اندازه است برای رفتن به بسیار آسان از آن زمان، به یاد داشته باشید در بار، ما 333 00:17:37,350 --> 00:17:41,430 افزایش اندازه فرهنگ لغت برای هر کلمه ای که ما روبرو می شوند. 334 00:17:41,430 --> 00:17:45,350 بنابراین اندازه فقط رفتن به بازگشت اندازه فرهنگ لغت. 335 00:17:45,350 --> 00:17:47,390 و آن نیست. 336 00:17:47,390 --> 00:17:50,590 >> بنابراین در نهایت ما خالی است. 337 00:17:50,590 --> 00:17:55,100 بنابراین خالی کردن، ما قصد داریم به استفاده از تابع بازگشتی در واقع انجام تمام 338 00:17:55,100 --> 00:17:56,530 از کار برای ما. 339 00:17:56,530 --> 00:17:59,340 بنابراین عملکرد ما در حال رفتن به بر روی unloader نامیده می شود. 340 00:17:59,340 --> 00:18:01,650 چه شده است unloader کاری انجام دهید؟ 341 00:18:01,650 --> 00:18:06,580 ما در اینجا می بینیم که unloader در حال رفتن به تکرار بیش از همه کودکان در 342 00:18:06,580 --> 00:18:08,410 این گره خاص است. 343 00:18:08,410 --> 00:18:11,750 و اگر گره فرزند است تهی، پس از آن ما قصد داریم به 344 00:18:11,750 --> 00:18:13,730 خالی کردن گره فرزند است. 345 00:18:13,730 --> 00:18:18,010 >> پس این است که شما به صورت بازگشتی خالی کردن همه بچه های ما. 346 00:18:18,010 --> 00:18:21,080 هنگامی که ما مطمئن هستیم که هستیم همه بچه های ما اند تخلیه شده است، پس ما 347 00:18:21,080 --> 00:18:25,210 می توانیم خودمان را آزاد، تا خالی کردن خود. 348 00:18:25,210 --> 00:18:29,460 این بازگشتی به کار خواهد کرد خالی کردن کل درخت به. 349 00:18:29,460 --> 00:18:32,850 و پس از آن یک بار که انجام شده، ما فقط می تواند به راست. 350 00:18:32,850 --> 00:18:34,210 خالی نمی تواند شکست بخورد. 351 00:18:34,210 --> 00:18:35,710 ما فقط آزاد کردن همه چیز. 352 00:18:35,710 --> 00:18:38,870 پس یک بار ما در حال انجام آزاد همه چیز، به راست. 353 00:18:38,870 --> 00:18:40,320 و آن نیست. 354 00:18:40,320 --> 00:18:41,080 نام من راب است. 355 00:18:41,080 --> 00:18:42,426 و این هجی بود. 356 00:18:42,426 --> 00:18:47,830 >> [MUSIC پخش]