1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [بخش 6] [راحت تر] 2 00:00:01,000 --> 00:00:04,000 [راب Bowden] [دانشگاه هاروارد] 3 00:00:04,000 --> 00:00:09,000 [این CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> ما می توانیم به بخش ما را از سوالات سر. 5 00:00:11,000 --> 00:00:17,000 URL برای فضای قبل فرستاده شده. 6 00:00:17,000 --> 00:00:22,000 آغاز بخش از پرسش ها می گویند 7 00:00:22,000 --> 00:00:26,000 ظاهرا من به طور کامل نمی unsick یک سوال بسیار آسان است 8 00:00:26,000 --> 00:00:28,000 از تنها چیزی است که valgrind؟ 9 00:00:28,000 --> 00:00:30,000 چه valgrind انجام دهید؟ 10 00:00:30,000 --> 00:00:34,000 هر کس می خواهند به آنچه valgrind می کند؟ 11 00:00:34,000 --> 00:00:36,000 [دانشجو] چک حافظه نشت. 12 00:00:36,000 --> 00:00:41,000 آره، valgrind حافظه جستجوگر به طور کلی است. 13 00:00:41,000 --> 00:00:44,000 این، در پایان، به شما می گوید که اگر شما هر گونه نشت حافظه، 14 00:00:44,000 --> 00:00:49,000 است که بیشتر آنچه که ما در حال استفاده از آن برای چرا که اگر شما می خواهید به 15 00:00:49,000 --> 00:00:54,000 انجام این کار به خوبی در مجموعه مشکل و یا اگر شما می خواهید 16 00:00:54,000 --> 00:00:59,000 در هیئت مدیره بزرگ، شما نیاز به هیچ نشت حافظه آنچه، 17 00:00:59,000 --> 00:01:01,000 و در صورتی که شما دارای نشت حافظه است که شما نمی توانید، 18 00:01:01,000 --> 00:01:04,000 همچنین در نظر داشته باشید که حفظ هر زمان که شما برای باز کردن یک فایل 19 00:01:04,000 --> 00:01:07,000 و اگر شما آن را بسته نمی شود، که نشت حافظه است. 20 00:01:07,000 --> 00:01:10,000 >> بسیاری از مردم به دنبال برخی از گره که آنها آزاد نیست 21 00:01:10,000 --> 00:01:15,000 زمانی که واقعا، آنها فرهنگ لغت در اولین گام بسیار نزدیک نیست. 22 00:01:15,000 --> 00:01:19,000 این برنامه همچنین به شما می گوید که اگر شما هر گونه نامعتبر می خواند یا می نویسد، 23 00:01:19,000 --> 00:01:22,000 بدان معناست که اگر شما سعی می کنید و مجموعه ای از ارزش 24 00:01:22,000 --> 00:01:26,000 که فراتر از انتهای پشته و آن را به گسل SEG اتفاق نمی افتد 25 00:01:26,000 --> 00:01:30,000 اما valgrind آن جلب، شما در واقع نباید نوشتن وجود دارد، 26 00:01:30,000 --> 00:01:33,000 و بنابراین شما قطعا باید هر یک از کسانی که یا ندارد. 27 00:01:33,000 --> 00:01:38,000 چگونه می توانم به شما استفاده از valgrind؟ 28 00:01:38,000 --> 00:01:42,000 چگونه می توانم به شما استفاده از valgrind؟ 29 00:01:42,000 --> 00:01:45,000 >> این یک سوال کلی از 30 00:01:45,000 --> 00:01:49,000 نوع آن را اجرا کنید و به دنبال در خروجی. 31 00:01:49,000 --> 00:01:51,000 خروجی در حال غلبه بر بسیاری از اوقات. 32 00:01:51,000 --> 00:01:54,000 اشتباهات سرگرم کننده نیز وجود دارد که در آن اگر شما برخی چیز وحشتناکی اشتباه 33 00:01:54,000 --> 00:01:59,000 اتفاق می افتد در یک حلقه، و سپس آن را در نهایت خواهد شد، می گویند: "اشتباهات راه بیش از حد بسیاری از. 34 00:01:59,000 --> 00:02:03,000 من قصد دارم برای جلوگیری از شمارش در حال حاضر است. " 35 00:02:03,000 --> 00:02:08,000 اساسا خروجی متنی که شما را به تجزیه و تحلیل است. 36 00:02:08,000 --> 00:02:13,000 در پایان، آن را به شما را به هر گونه نشت حافظه است که شما باید بگویید، 37 00:02:13,000 --> 00:02:16,000 چگونه بسیاری از بلوک، که می تواند مفید باشد به دلیل 38 00:02:16,000 --> 00:02:20,000 اگر آن را یک بلوک unfreed، سپس آن را معمولا آسان تر برای پیدا کردن 39 00:02:20,000 --> 00:02:23,000 از 1،000 بلوک unfreed. 40 00:02:23,000 --> 00:02:26,000 1000 بلوک unfreed احتمالا معنی است که شما آزادی نیست 41 00:02:26,000 --> 00:02:30,000 لیست های مرتبط با خود را مناسب و یا چیزی. 42 00:02:30,000 --> 00:02:32,000 که valgrind. 43 00:02:32,000 --> 00:02:35,000 >> در حال حاضر ما باید بخش ما را از سوالات، 44 00:02:35,000 --> 00:02:38,000 که شما نیازی به دانلود نیست. 45 00:02:38,000 --> 00:02:41,000 شما می توانید بر روی اسم من کلیک کنید و کشیدن آنها را در فضا است. 46 00:02:41,000 --> 00:02:44,000 در حال حاضر بر روی من کلیک کنید. 47 00:02:44,000 --> 00:02:46,000 ویرایشهای 1 خواهد بود پشته، که ما انجام می دهیم 1. 48 00:02:46,000 --> 00:02:55,000 ویرایشهای 2 خواهد بود، صف، و ویرایشهای 3 خواهد بود به تنهایی مرتبط فهرست. 49 00:02:55,000 --> 00:02:58,000 شروع کردن با پشته ما. 50 00:02:58,000 --> 00:03:02,000 همانطور آن را می گوید در اینجا، یک پشته یکی از اساسی ترین است، 51 00:03:02,000 --> 00:03:07,000 ساختارهای اساسی داده ها از علم کامپیوتر است. 52 00:03:07,000 --> 00:03:11,000 مثال نمونه 53 00:03:11,000 --> 00:03:13,000 پشته سینی در سالن غذاخوری. 54 00:03:13,000 --> 00:03:16,000 اساسا هر زمان که شما در حال معرفی به پشته، 55 00:03:16,000 --> 00:03:20,000 کسی در حال رفتن به می گویند، "اوه، مانند یک پشته از سینی. 56 00:03:20,000 --> 00:03:22,000 سینی پشته. 57 00:03:22,000 --> 00:03:24,000 سپس هنگامی که شما به جلو و یک سینی، 58 00:03:24,000 --> 00:03:31,000 اولین سینی که داره کشیده یکی از آخرین که در پشته قرار داده شده است. 59 00:03:31,000 --> 00:03:34,000 پشته نیز مانند آن را می گوید در اینجا 60 00:03:34,000 --> 00:03:37,000 در حال حاضر بخشی از حافظه به نام پشته است. 61 00:03:37,000 --> 00:03:40,000 و به همین دلیل است که آن را به نام پشته؟ 62 00:03:40,000 --> 00:03:42,000 >> از آنجا که مانند یک پشته ساختمان داده، 63 00:03:42,000 --> 00:03:46,000 آن را هل می دهد و باز فریم پشته در پشته، 64 00:03:46,000 --> 00:03:53,000 که در آن قاب پشته مانند یک تماس خاص از یک تابع. 65 00:03:53,000 --> 00:03:57,000 و مانند یک پشته، شما همیشه می خواهد به بازگشت به 66 00:03:57,000 --> 00:04:03,000 از فراخوانی تابع قبل از اینکه شما می توانید به فریم پایین پشته دوباره. 67 00:04:03,000 --> 00:04:08,000 شما می توانید تماس صنایع غذایی اصلی نوار تماس ها و بازگشت نوار به طور مستقیم به بخش اصلی آمار سایت ندارد. 68 00:04:08,000 --> 00:04:14,000 همیشه به دنبال پشته صحیح هل دادن و ظاهر. 69 00:04:14,000 --> 00:04:18,000 من می خواهم گفت، این دو عملیات، فشار و پاپ. 70 00:04:18,000 --> 00:04:20,000 اینها شرایط جهانی است. 71 00:04:20,000 --> 00:04:26,000 شما باید فشار و پاپ در پشته بدون توجه به آنچه می دانیم. 72 00:04:26,000 --> 00:04:28,000 خواهیم دید صف نوع های مختلف هستند. 73 00:04:28,000 --> 00:04:32,000 این واقعا یک اصطلاح جهانی، اما فشار و پاپ جهانی برای پشته. 74 00:04:32,000 --> 00:04:34,000 فشار فقط بر روی پشته قرار داده شده است. 75 00:04:34,000 --> 00:04:37,000 پاپ را خاموش پشته. 76 00:04:37,000 --> 00:04:43,000 و ما می بینیم که در اینجا ما باید ساختار پشته ما typedef، 77 00:04:43,000 --> 00:04:46,000 بنابراین ما باید رشته ** کاراکتر. 78 00:04:46,000 --> 00:04:51,000 آیا ترس با هر **. 79 00:04:51,000 --> 00:04:54,000 این است که برای پایان دادن به آرایه ای از رشته ها 80 00:04:54,000 --> 00:04:58,000 و یا آرایه ای از اشاره گرها به شخصیت ها، که در آن 81 00:04:58,000 --> 00:05:00,000 اشاره گر به کاراکتر تمایل به رشته. 82 00:05:00,000 --> 00:05:05,000 این را ندارد به رشته، اما در اینجا، آنها در حال رفتن به رشته است. 83 00:05:05,000 --> 00:05:08,000 >> ما باید آرایه ای از رشته ها. 84 00:05:08,000 --> 00:05:14,000 ما باید یک اندازه، که نشان دهنده که چگونه بسیاری از عناصر در حال حاضر بر روی پشته، 85 00:05:14,000 --> 00:05:19,000 و پس از آن ما باید از ظرفیت است، که چگونه بسیاری از عناصر را می توان در پشته. 86 00:05:19,000 --> 00:05:22,000 ظرفیت باید به عنوان چیزی بزرگتر از 1 شروع 87 00:05:22,000 --> 00:05:27,000 اما اندازه برای شروع کردن با 0 است. 88 00:05:27,000 --> 00:05:36,000 در حال حاضر، اساسا سه راه مختلف شما می توانید از یک پشته فکر می کنم وجود دارد. 89 00:05:36,000 --> 00:05:39,000 خب، احتمالا وجود دارد، اما دو روش اصلی عبارتند از 90 00:05:39,000 --> 00:05:43,000 شما می توانید آن را با استفاده از یک آرایه پیاده سازی، یا شما می توانید آن را با استفاده از پیاده سازی یک لیست پیوندی. 91 00:05:43,000 --> 00:05:48,000 لیست لینک نوع پیش پا افتاده را به پشته از. 92 00:05:48,000 --> 00:05:51,000 این بسیار آسان است برای ایجاد یک پشته با استفاده از لیست های پیوندی، 93 00:05:51,000 --> 00:05:55,000 بنابراین در اینجا ما قصد داریم به ایجاد یک پشته با استفاده از آرایه 94 00:05:55,000 --> 00:05:59,000 و پس از آن با استفاده از آرایه، همچنین شما می توانید در مورد آن فکر می کنم دو راه وجود دارد. 95 00:05:59,000 --> 00:06:01,000 پیش از این، زمانی که من گفت: ما باید ظرفیت پشته، 96 00:06:01,000 --> 00:06:04,000 بنابراین ما می توانیم یک عنصر در پشته مناسب. 97 00:06:04,000 --> 00:06:09,000 >> یکی از راه آن می تواند اتفاق می افتد این است که به زودی به شما به عنوان ضربه 10 عناصر، و سپس شما انجام می شود. 98 00:06:09,000 --> 00:06:13,000 شما ممکن است ندانید این است که بالاتر از 10 چیز در جهان محدود وجود دارد 99 00:06:13,000 --> 00:06:16,000 که شما بیش از 10 چیز را بر روی پشته خود را هرگز، 100 00:06:16,000 --> 00:06:20,000 که در این صورت شما می توانید یک کران بالا در اندازه پشته خود را داشته باشد. 101 00:06:20,000 --> 00:06:23,000 یا شما می توانید از پشته شما نامحدود، 102 00:06:23,000 --> 00:06:27,000 اما اگر شما در حال انجام یک آرایه، که بدان معنی است که هر وقت به شما ضربه 10 عنصر، 103 00:06:27,000 --> 00:06:29,000 سپس شما مجبور به رشد به 20 عنصر و 20 عنصر را در زمانی که شما ضربه، 104 00:06:29,000 --> 00:06:33,000 شما در حال رفتن به آرایه خود را به رشد تا 30 عناصر یا 40 عناصر است. 105 00:06:33,000 --> 00:06:37,000 شما در حال رفتن به نیاز به افزایش ظرفیت، که همان چیزی است که ما قصد داریم برای انجام این کار در اینجا. 106 00:06:37,000 --> 00:06:40,000 هر بار که ما در رسیدن به حداکثر اندازه پشته ما، 107 00:06:40,000 --> 00:06:46,000 زمانی که چیز دیگری بر روی ما قرار دهد، ما در حال رفتن به نیاز به افزایش ظرفیت. 108 00:06:46,000 --> 00:06:50,000 در اینجا، ما فشار به عنوان فشار بولی (کاراکتر * خ) اعلام شده است. 109 00:06:50,000 --> 00:06:54,000 خ * کاراکتر رشته ای که ما در حال هل دادن بر روی پشته، 110 00:06:54,000 --> 00:06:58,000 و بولی فقط می گوید که آیا ما موفق یا شکست خورده است. 111 00:06:58,000 --> 00:07:00,000 >> چگونه می تواند ما را شکست؟ 112 00:07:00,000 --> 00:07:04,000 است که شرایط است که شما می توانید از فکر می کنم. 113 00:07:04,000 --> 00:07:07,000 که در آن ما را نیاز به بازگشت غلط؟ 114 00:07:07,000 --> 00:07:09,000 آره. 115 00:07:09,000 --> 00:07:12,000 [دانشجو] اگر آن را پر و ما با استفاده از یک اجرای محدود است. 116 00:07:12,000 --> 00:07:17,000 آره، پس چگونه تعریف کنیم، او جواب داد: 117 00:07:17,000 --> 00:07:23,000 اگر آن را پر و ما با استفاده از یک اجرای محدود است. 118 00:07:23,000 --> 00:07:26,000 سپس ما قطعا بازگشت کاذب. 119 00:07:26,000 --> 00:07:31,000 به محض این که ما 10 همه چیز در آرایه، ما می توانیم 11 مناسب نیست، بنابراین ما بازگشت غلط. 120 00:07:31,000 --> 00:07:32,000 چه می شود اگر آن نامحدود است؟ آره. 121 00:07:32,000 --> 00:07:38,000 اگر شما می توانید مجموعه ای برای برخی از دلیل گسترش نیست. 122 00:07:38,000 --> 00:07:43,000 آره، پس حافظه یک منبع محدود است، 123 00:07:43,000 --> 00:07:51,000 و در نهایت، اگر ما در حفظ و هل دادن همه چیز را بر روی پشته را بارها و بارها، 124 00:07:51,000 --> 00:07:54,000 ما قصد داریم به تلاش و تخصیص یک آرایه بزرگتر به جا 125 00:07:54,000 --> 00:07:59,000 ظرفیت بزرگتر، و malloc یا هر چیز دیگری که ما با استفاده از رفتن به بازگشت غلط است. 126 00:07:59,000 --> 00:08:02,000 خب، malloc باز خواهد گشت تهی. 127 00:08:02,000 --> 00:08:05,000 >> به یاد داشته باشید، هر زمان شما تا کنون تماس malloc، شما باید چک کنید اگر آن 128 00:08:05,000 --> 00:08:12,000 را برمی گرداند تهی و یا دیگری است که یک کسر صحت است. 129 00:08:12,000 --> 00:08:17,000 از آنجا که ما می خواهیم به یک پشته بیکران، 130 00:08:17,000 --> 00:08:21,000 تنها مورد است که ما قصد داریم به بازگشت غلط است اگر ما سعی می کنیم به 131 00:08:21,000 --> 00:08:26,000 افزایش ظرفیت و malloc یا هر چه مقدار false برگرداند. 132 00:08:26,000 --> 00:08:30,000 سپس پاپ بدون استدلال، طول می کشد 133 00:08:30,000 --> 00:08:37,000 و این رشته ای است که در بالای پشته را بر می گرداند. 134 00:08:37,000 --> 00:08:41,000 هر آنچه که اخیرا در پشته رانده شد چه پاپ بازگشت، 135 00:08:41,000 --> 00:08:44,000 و همچنین آن را از پشته حذف. 136 00:08:44,000 --> 00:08:50,000 و توجه کنید که آن را تهی می گرداند اگر چیزی در پشته وجود دارد. 137 00:08:50,000 --> 00:08:53,000 این است که همیشه این امکان وجود دارد که پشته خالی است. 138 00:08:53,000 --> 00:08:55,000 در جاوا، اگر شما به آن، و یا زبان های دیگر استفاده می شود، 139 00:08:55,000 --> 00:09:01,000 تلاش برای از پشته خالی پاپ ممکن است یک استثنا و یا چیزی می شود. 140 00:09:01,000 --> 00:09:09,000 >> اما در C، تهی نوع در بسیاری از موارد که چگونه این مشکلات ما رسیدگی است. 141 00:09:09,000 --> 00:09:13,000 بازگشت به تهی، این است که چگونه ما در حال رفتن به دلالت که پشته خالی بود. 142 00:09:13,000 --> 00:09:16,000 ما ارائه کد است که قابلیت پشته خود را تست، 143 00:09:16,000 --> 00:09:19,000 پیاده سازی فشار و پاپ. 144 00:09:19,000 --> 00:09:23,000 این خواهد بود که تعداد زیادی از کد. 145 00:09:23,000 --> 00:09:40,000 من در واقع، قبل از ما انجام این کار، اشاره، اشاره، 146 00:09:40,000 --> 00:09:44,000 اگر شما آن را ندیده، malloc تنها تابع نمی باشد. 147 00:09:44,000 --> 00:09:47,000 که تخصیص حافظه در پشته برای شما. 148 00:09:47,000 --> 00:09:51,000 یک خانواده از توابع alloc وجود دارد. 149 00:09:51,000 --> 00:09:53,000 malloc، که شما استفاده می شود به. 150 00:09:53,000 --> 00:09:56,000 سپس calloc وجود دارد که همین کار را به عنوان malloc، 151 00:09:56,000 --> 00:09:59,000 اما آن را به همه چیز از صفر برای شما. 152 00:09:59,000 --> 00:10:04,000 اگر شما تا کنون به تنظیم همه چیز را به تهی پس از mallocing چیزی می خواستم 153 00:10:04,000 --> 00:10:06,000 شما باید فقط calloc در وهله اول به جای نوشتن استفاده می شود 154 00:10:06,000 --> 00:10:09,000 حلقه به صفر کردن تمام بلوک از حافظه است. 155 00:10:09,000 --> 00:10:15,000 >> بازتخصیص مثل malloc است و تعداد زیادی از موارد خاص، 156 00:10:15,000 --> 00:10:19,000 اما اساسا چه بازتخصیص می کند 157 00:10:19,000 --> 00:10:24,000 آن را طول می کشد یک اشاره گر است که در حال حاضر اختصاص داده شده است. 158 00:10:24,000 --> 00:10:27,000 بازتخصیص تابع شما می خواهید توجه به اینجا است. 159 00:10:27,000 --> 00:10:31,000 طول می کشد تا یک اشاره گر است که در حال حاضر از malloc برگردانده شده است. 160 00:10:31,000 --> 00:10:35,000 بیایید می گویند شما از malloc درخواست یک اشاره گر از 10 کلمه در ادامه متن. 161 00:10:35,000 --> 00:10:38,000 سپس شما متوجه شما می خواستم 20 بایت، 162 00:10:38,000 --> 00:10:42,000 بنابراین شما تماس بازتخصیص در آن اشاره گر با 20 کلمه در ادامه متن 163 00:10:42,000 --> 00:10:47,000 و بازتخصیص به طور خودکار بیش از همه چیز برای شما کپی می کند. 164 00:10:47,000 --> 00:10:51,000 اگر شما فقط به نام malloc دوباره، مثل من یک بلوک از 10 کلمه در ادامه متن. 165 00:10:51,000 --> 00:10:53,000 حالا من نیاز به یک بلوک از 20 بایت، 166 00:10:53,000 --> 00:10:58,000 بنابراین اگر من malloc 20 بایت، پس من باید به صورت دستی کپی کنید بیش از 10 کلمه در ادامه متن از اولین چیزی که 167 00:10:58,000 --> 00:11:01,000 به نکته دوم و پس از آن اولین چیزی که رایگان است. 168 00:11:01,000 --> 00:11:04,000 بازتخصیص خواهد شد که کار را برای شما اداره کند. 169 00:11:04,000 --> 00:11:11,000 >> متوجه امضا خواهد بود * از درجه اعتبار ساقط 170 00:11:11,000 --> 00:11:15,000 است که فقط بازگشت به یک اشاره گر به بلوک از حافظه، 171 00:11:15,000 --> 00:11:17,000 پس از آن از درجه اعتبار ساقط * PTR. 172 00:11:17,000 --> 00:11:22,000 شما می توانید از خالی * فکر می کنم به عنوان یک اشاره گر عمومی است. 173 00:11:22,000 --> 00:11:27,000 به طور کلی، شما با خالی * هرگز، 174 00:11:27,000 --> 00:11:30,000 اما malloc بازگشت به * از درجه اعتبار ساقط، و سپس آن را درست مثل استفاده می شود 175 00:11:30,000 --> 00:11:34,000 این است که در واقع به عنوان یک کاراکتر *. 176 00:11:34,000 --> 00:11:37,000 * باطل قبلی که توسط malloc برگشته بود 177 00:11:37,000 --> 00:11:41,000 در حال حاضر رفتن به بازتخصیص منتقل، و پس از آن اندازه 178 00:11:41,000 --> 00:11:49,000 شماره جدید از بایت می خواهید به تخصیص است، بنابراین ظرفیت جدید خود را. 179 00:11:49,000 --> 00:11:57,000 من به شما چند دقیقه به من بدهید، و آن را در فضای ما. 180 00:11:57,000 --> 00:12:02,000 شروع با نسخه 1. 181 00:12:16,000 --> 00:12:21,000 من شما را پس از متوقف امیدوارم در مورد زمان به اندازه کافی برای اجرای فشار، 182 00:12:21,000 --> 00:12:24,000 و سپس من شما را یکی دیگر از استراحت برای انجام پاپ را به من بدهید. 183 00:12:24,000 --> 00:12:27,000 اما آن واقعا که کد بسیار نیست در همه. 184 00:12:27,000 --> 00:12:35,000 ترین کد مسائل در حال گسترش است که احتمالا، گسترش ظرفیت. 185 00:12:35,000 --> 00:12:39,000 خوب، هیچ فشاری به طور کامل انجام می شود، 186 00:12:39,000 --> 00:12:47,000 اما تا زمانی که شما احساس می کنید که شما را در مسیر درست هستید، خوب است. 187 00:12:47,000 --> 00:12:53,000 >> آیا کسی که هر کد با من کشیدن تا آنها احساس راحتی؟ 188 00:12:53,000 --> 00:12:59,000 آره، من خواهد شد، اما هر کسی که هر کد می توانید بکشید تا؟ 189 00:12:59,000 --> 00:13:05,000 خوب، می تواند به شما شروع می کنید، آن را ذخیره کنید، هر آنچه در آن است؟ 190 00:13:05,000 --> 00:13:09,000 من همیشه این مرحله را فراموش کرده ام. 191 00:13:09,000 --> 00:13:15,000 خوب، به دنبال در فشار، 192 00:13:15,000 --> 00:13:18,000 آیا شما می خواهید به توضیح کد شما؟ 193 00:13:18,000 --> 00:13:24,000 [دانشجو] اول از همه، من افزایش اندازه. 194 00:13:24,000 --> 00:13:28,000 من حدس می زنم شاید من باید که به هر حال، افزایش اندازه، 195 00:13:28,000 --> 00:13:31,000 و من می بینم اگر آن را کمتر از ظرفیت است. 196 00:13:31,000 --> 00:13:36,000 و اگر کمتر از ظرفیت است، من به آرایه است که ما در حال حاضر اضافه کنید. 197 00:13:36,000 --> 00:13:42,000 و اگر این طور نیست، ظرفیت 2 ضرب، 198 00:13:42,000 --> 00:13:50,000 و من دوباره اختصاص آرایه رشته ها را به چیزی با اندازه بزرگتر ظرفیت در حال حاضر. 199 00:13:50,000 --> 00:13:55,000 و پس از آن در صورتی که با شکست مواجه، من به کاربر و بازگشت کاذب، 200 00:13:55,000 --> 00:14:04,000 و اگر آن را خوب است، پس از آن من رشته در نقطه ای جدید قرار داده است. 201 00:14:04,000 --> 00:14:07,000 >> [راب B.] نیز که ما با استفاده از یک عملگر بیتی زیبا اینجا متوجه 202 00:14:07,000 --> 00:14:09,000 2 ضرب است. 203 00:14:09,000 --> 00:14:11,000 به یاد داشته باشید، از SHIFT سمت چپ همیشه با 2 ضرب شود. 204 00:14:11,000 --> 00:14:15,000 Shift سمت راست 2 تا زمانی تقسیم شده که شما را به یاد داشته باشید که به این معنی 205 00:14:15,000 --> 00:14:18,000 تقسیم 2 در یک عدد صحیح تقسیم بر 2. 206 00:14:18,000 --> 00:14:20,000 ممکن است 1 در اینجا وجود دارد و یا کوتاه. 207 00:14:20,000 --> 00:14:26,000 اما شیفت به چپ با 1 است همیشه در 2 ضرب شود، 208 00:14:26,000 --> 00:14:32,000 مگر اینکه شما سرریز مرزهای عدد صحیح، و سپس آن را نمی خواهد. 209 00:14:32,000 --> 00:14:34,000 یک نظر طرف. 210 00:14:34,000 --> 00:14:39,000 من می خواهم به انجام این است که رفتن به تغییر برنامه نویسی به هیچ وجه آنچه، 211 00:14:39,000 --> 00:14:48,000 اما من می خواهم به انجام این کار چیزی شبیه به این. 212 00:14:48,000 --> 00:14:51,000 در واقع در حال رفتن به آن را کمی طولانی تر است. 213 00:15:04,000 --> 00:15:08,000 شاید این مورد مناسب برای نشان دادن این است، 214 00:15:08,000 --> 00:15:14,000 اما من به بخش آن را می خواهم به این بلوک از 215 00:15:14,000 --> 00:15:17,000 خوب، در صورتی که اگر این اتفاق می افتد، پس از آن من قصد دارم برای انجام کاری، 216 00:15:17,000 --> 00:15:19,000 و پس از آن تابع انجام می شود. 217 00:15:19,000 --> 00:15:22,000 من نیازی به آن حرکت چشم من تمام راه را به پایین تابع 218 00:15:22,000 --> 00:15:25,000 ببینید که چه اتفاقی می افتد پس از دیگری است. 219 00:15:25,000 --> 00:15:27,000 در صورتی که اگر این اتفاق می افتد، پس من فقط بازگشت. 220 00:15:27,000 --> 00:15:30,000 این شهر همچنین دارای سود خوب اضافه شده است از همه چیز فراتر از این 221 00:15:30,000 --> 00:15:33,000 در حال حاضر یک بار به سمت چپ منتقل شده است. 222 00:15:33,000 --> 00:15:40,000 من دیگر نیازی به اگر شما همیشه در نزدیکی خطوط طولانی و مسخره، 223 00:15:40,000 --> 00:15:45,000 سپس آن 4 بایت می تواند کمک کند، و نیز چیزی بیش از چپ است، 224 00:15:45,000 --> 00:15:48,000 کمتر تحت الشعاع شما احساس می کنید اگر مثل خوب، من به یاد داشته باشید 225 00:15:48,000 --> 00:15:53,000 من در حال حاضر در حلقه در حالی که در داخل در داخل دیگری از حلقه for. 226 00:15:53,000 --> 00:15:58,000 در هر جایی که باشید می توانید این بازگشت را بلافاصله انجام دهید، من نوع مانند. 227 00:15:58,000 --> 00:16:05,000 این کاملا اختیاری است و به هیچ وجه انتظار نمی رود. 228 00:16:05,000 --> 00:16:12,000 >> [دانشجو] باید وجود داشته باشد اندازه - در شرایط شکست؟ 229 00:16:12,000 --> 00:16:19,000 شرط اشکال در اینجا است که ما به بازتخصیص شکست خورد، بله. 230 00:16:19,000 --> 00:16:22,000 دقت کنید که چگونه در شرایط شکست، احتمالا، 231 00:16:22,000 --> 00:16:26,000 مگر اینکه ما آزاد مسائل بعد از آن، ما همیشه به شکست 232 00:16:26,000 --> 00:16:29,000 بدون توجه به چند بار ما سعی می کنیم چیزی به فشار. 233 00:16:29,000 --> 00:16:32,000 اگر ما در حفظ و هل دادن، نگه می داریم اندازه افزایش، 234 00:16:32,000 --> 00:16:36,000 حتی اگر ما هر چیزی را بر روی پشته قرار دادن نیست. 235 00:16:36,000 --> 00:16:39,000 معمولا ما به اندازه تا افزایش 236 00:16:39,000 --> 00:16:43,000 پس از اینکه ما با موفقیت آن را در پشته قرار داده است. 237 00:16:43,000 --> 00:16:50,000 ما آن را می گویند، یا در اینجا و اینجا. 238 00:16:50,000 --> 00:16:56,000 و پس از آن به جای گفتن s.size ظرفیت ≤، آن را کمتر از ظرفیت، 239 00:16:56,000 --> 00:17:01,000 فقط به این دلیل که ما نقل مکان کرد که در آن همه چیز بود. 240 00:17:01,000 --> 00:17:07,000 >> و به یاد داشته باشید، تنها مکانی است که ما احتمالا می تواند بازگشت کاذب 241 00:17:07,000 --> 00:17:14,000 اینجا، جایی که بازتخصیص تهی بازگشت، 242 00:17:14,000 --> 00:17:19,000 و اگر شما اتفاق می افتد به یاد داشته باشید خطای استاندارد، 243 00:17:19,000 --> 00:17:22,000 شاید شما ممکن است این مورد را در نظر بگیرید که در آن شما می خواهید برای چاپ یک خطای استاندارد، 244 00:17:22,000 --> 00:17:26,000 stderr fprintf به جای چاپ به طور مستقیم به خارج از استاندارد است. 245 00:17:26,000 --> 00:17:31,000 باز هم، که انتظار می رود نیست، اما اگر آن را خطا، 246 00:17:31,000 --> 00:17:41,000 تایپ printf، و سپس شما ممکن است بخواهید آن را به خطا به جای استاندارد کردن استاندارد چاپ. 247 00:17:41,000 --> 00:17:44,000 >> هر کسی از هر چیز دیگری توجه داشته باشید؟ بله. 248 00:17:44,000 --> 00:17:47,000 [دانشجو] آیا می توانم شما را بیش از [نامفهوم]؟ 249 00:17:47,000 --> 00:17:55,000 [راب B.] بله، binariness واقعی از آن و یا فقط آنچه در آن است؟ 250 00:17:55,000 --> 00:17:57,000 [دانشجو] پس از آن شما را در 2 ضرب کنید؟ 251 00:17:57,000 --> 00:17:59,000 [راب B.] بله، اساسا. 252 00:17:59,000 --> 00:18:11,000 در سرزمین دودویی، ما همیشه مجموعه ای از ارقام را داشته باشد. 253 00:18:11,000 --> 00:18:22,000 تغییر این چپ توسط 1 اساسا آن را درج در اینجا در سمت راست است. 254 00:18:22,000 --> 00:18:25,000 به این، فقط یادآوری است که همه چیز را در باینری 255 00:18:25,000 --> 00:18:28,000 توانی از 2 است، به طوری که این نشان دهنده 2 تا 0، 256 00:18:28,000 --> 00:18:30,000 این 2 تا 1، این 2 تا از 2. 257 00:18:30,000 --> 00:18:33,000 با قرار دادن یک 0 به سمت راست در حال حاضر، ما فقط همه چیز را بیش از تغییر. 258 00:18:33,000 --> 00:18:38,000 چه استفاده می شود 2 به 0 است در حال حاضر 2 تا از شماره 1 است، 2 تا در 2. 259 00:18:38,000 --> 00:18:41,000 در سمت راست است که ما قرار داده شده 260 00:18:41,000 --> 00:18:44,000 لزوما رفتن به 0 باشد، 261 00:18:44,000 --> 00:18:46,000 که حس می کند. 262 00:18:46,000 --> 00:18:49,000 اگر شما همیشه ضرب یک عدد 2، آن را برای پایان دادن به عجیب و غریب، 263 00:18:49,000 --> 00:18:54,000 به طوری که 2 تا جای 0 باید 0، 264 00:18:54,000 --> 00:18:59,000 و این همان چیزی است که من به 1/2 قبل از هشدار داد اگر شما اتفاق می افتد به تغییر 265 00:18:59,000 --> 00:19:01,000 فراتر از تعداد بیت در یک عدد صحیح، 266 00:19:01,000 --> 00:19:04,000 پس از این (1) برای پایان دادن به رفتن کردن. 267 00:19:04,000 --> 00:19:10,000 تنها نگران باشید اگر شما اتفاق می افتد به خرید و فروش با ظرفیت های واقعا بزرگ است. 268 00:19:10,000 --> 00:19:15,000 اما در آن نقطه، و سپس شما برخورد با مجموعه ای از میلیاردها همه چیز، 269 00:19:15,000 --> 00:19:25,000 که ممکن است مناسب در حافظه به هر حال. 270 00:19:25,000 --> 00:19:31,000 >> در حال حاضر ما می توانیم به پاپ است، که حتی آسانتر می کند. 271 00:19:31,000 --> 00:19:36,000 شما می توانید این کار را انجام خواهم اگر شما اتفاق می افتد به ظاهر تمام یک دسته، 272 00:19:36,000 --> 00:19:38,000 و در حال حاضر شما را در نیمی از ظرفیت دوباره. 273 00:19:38,000 --> 00:19:42,000 شما می توانید بازتخصیص مقدار از حافظه شما را مجبور به کوچک، 274 00:19:42,000 --> 00:19:47,000 اما شما لازم نیست که به نگرانی در مورد آن، به طوری که تنها مورد بازتخصیص است برای رفتن به 275 00:19:47,000 --> 00:19:50,000 در حال رشد حافظه، کاهش هرگز حافظه، 276 00:19:50,000 --> 00:19:59,000 است که رفتن را به پاپ فوق العاده آسان است. 277 00:19:59,000 --> 00:20:02,000 در حال حاضر صف، که در حال رفتن به مانند پشته، 278 00:20:02,000 --> 00:20:06,000 اما این که همه چیز شما را معکوس شده است. 279 00:20:06,000 --> 00:20:10,000 به عنوان مثال نمونه از یک صف یک خط است، 280 00:20:10,000 --> 00:20:12,000 بنابراین من حدس می زنم اگر شما انگلیسی است، من می خواهم که گفت: 281 00:20:12,000 --> 00:20:17,000 یک مثال نمونه از یک صف به صف است. 282 00:20:17,000 --> 00:20:22,000 پس مانند یک خط، اگر شما اولین کسی باشید که در خط است، 283 00:20:22,000 --> 00:20:24,000 شما انتظار می رود تا اولین کسی باشید که از خط است. 284 00:20:24,000 --> 00:20:31,000 اگر شما آخرین نفر در خط، شما در حال رفتن به آخرین شخص سرویس. 285 00:20:31,000 --> 00:20:35,000 ما که الگوی FIFO، در حالی که الگوی پشته LIFO بود. 286 00:20:35,000 --> 00:20:40,000 این کلمات بسیار جهانی است. 287 00:20:40,000 --> 00:20:46,000 >> مانند پشته ها و بر خلاف آرایه ها، صف ها به طور معمول دسترسی به عناصر در وسط اجازه نمی دهد. 288 00:20:46,000 --> 00:20:50,000 در اینجا، پشته، ما باید فشار و پاپ. 289 00:20:50,000 --> 00:20:54,000 در اینجا، ما رخ می دهد به نام آنها enqueue و dequeue. 290 00:20:54,000 --> 00:20:58,000 من همچنین شنیده ام آنها را به نام شیفت و unshift. 291 00:20:58,000 --> 00:21:02,000 من شنیده ام که مردم می گویند فشار و پاپ نیز به صف درخواست شده است. 292 00:21:02,000 --> 00:21:05,000 من شنیده ام درج، حذف، 293 00:21:05,000 --> 00:21:11,000 و فشار، اگر شما در حال صحبت کردن در مورد پشته پاپ، شما در حال هل دادن و ظاهر. 294 00:21:11,000 --> 00:21:16,000 اگر شما در حال صحبت کردن در مورد صف، شما می توانید کلمات مورد نظر شما می خواهید به استفاده از انتخاب 295 00:21:16,000 --> 00:21:23,000 برای درج و حذف، و هیچ اجماع در مورد آنچه در آن باید به نام وجود دارد. 296 00:21:23,000 --> 00:21:27,000 اما در اینجا، ما باید enqueue و dequeue. 297 00:21:27,000 --> 00:21:37,000 در حال حاضر، ساختار تقریبا یکسان به نظر می رسد به ساختار پشته. 298 00:21:37,000 --> 00:21:40,000 اما ما باید به پیگیری از سر. 299 00:21:40,000 --> 00:21:44,000 من حدس می زنم آن را در اینجا می گوید، اما چرا ما نیاز به سر؟ 300 00:21:53,000 --> 00:21:57,000 نمونه اساسا یکسان به فشار و پاپ. 301 00:21:57,000 --> 00:21:59,000 شما می توانید از آن به عنوان فشار و پاپ فکر می کنم. 302 00:21:59,000 --> 00:22:08,000 تنها تفاوت این است پاپ بازگشت و به جای آن از آخرین، آن را بازگشت به اول است. 303 00:22:08,000 --> 00:22:12,000 2، 1، 3، 4، و یا چیزی. 304 00:22:12,000 --> 00:22:14,000 و در اینجا آغاز شده است. 305 00:22:14,000 --> 00:22:17,000 صف ما این است که به طور کامل، به طوری که چهار عنصر در آن وجود دارد. 306 00:22:17,000 --> 00:22:21,000 پایان صف ما در حال حاضر 2، 307 00:22:21,000 --> 00:22:24,000 و در حال حاضر ما برای وارد کردن به چیز دیگری است. 308 00:22:24,000 --> 00:22:29,000 >> هنگامی که ما می خواهیم برای وارد کردن که چیز دیگری، چیزی است که ما برای نسخه پشته 309 00:22:29,000 --> 00:22:36,000 این است که ما در بلوک خود را از حافظه است. 310 00:22:36,000 --> 00:22:40,000 با این مشکل چیست؟ 311 00:22:40,000 --> 00:22:45,000 [دانشجو] شما حرکت 2. 312 00:22:45,000 --> 00:22:51,000 چیزی که من قبل از آخر صف گفت:، 313 00:22:51,000 --> 00:22:57,000 این معنی است که ما شروع به 1 را ندارد. 314 00:22:57,000 --> 00:23:01,000 پس از آن ما به dequeue 1 می خواهم، و سپس dequeue 3، و سپس dequeue 4، 315 00:23:01,000 --> 00:23:05,000 سپس dequeue 2، و سپس این یکی dequeue. 316 00:23:05,000 --> 00:23:08,000 ما می توانیم بازتخصیص استفاده نمی کند در حال حاضر، 317 00:23:08,000 --> 00:23:11,000 و یا حداقل، شما مجبور به استفاده از بازتخصیص در راه های مختلف. 318 00:23:11,000 --> 00:23:15,000 اما شما احتمالا فقط باید استفاده نمی بازتخصیص. 319 00:23:15,000 --> 00:23:18,000 شما در حال رفتن به حافظه خود را به صورت دستی کپی کنید. 320 00:23:18,000 --> 00:23:21,000 >> دو تابع باشند که برای کپی کردن حافظه وجود دارد. 321 00:23:21,000 --> 00:23:25,000 memcopy و memmove وجود دارد. 322 00:23:25,000 --> 00:23:29,000 من در حال حاضر به خواندن صفحات مرد را ببینید که کدام یک شما قصد دارید که مایل به استفاده از. 323 00:23:29,000 --> 00:23:35,000 خوب، در memcopy، تفاوت 324 00:23:35,000 --> 00:23:38,000 که memcopy و memmove، یک دسته مورد درستی 325 00:23:38,000 --> 00:23:41,000 که در آن شما در حال کپی کردن به منطقه ای که اتفاق می افتد با هم همپوشانی دارند منطقه 326 00:23:41,000 --> 00:23:46,000 شما در حال کپی برداری از. 327 00:23:46,000 --> 00:23:50,000 Memcopy آن را اداره می کند نیست. Memmove هم اینکار را در مورد شما نمی کنند. 328 00:23:50,000 --> 00:23:59,000 شما می توانید این مشکل را به عنوان فکر می کنم 329 00:23:59,000 --> 00:24:09,000 اجازه دهید بگویم من می خواهم برای کپی کردن این مرد، 330 00:24:09,000 --> 00:24:13,000 این چهار نفر را به این مرد بیش از. 331 00:24:13,000 --> 00:24:16,000 در پایان، چه آرایه باید مانند نگاه 332 00:24:16,000 --> 00:24:26,000 پس از نسخه 2، 1، 2، 1، 3، 4، و پس از آن برخی از مسائل در پایان است. 333 00:24:26,000 --> 00:24:29,000 اما این بستگی دارد که ما در واقع کپی، 334 00:24:29,000 --> 00:24:32,000 چرا که اگر ما به این واقعیت است که منطقه ما در حال کپی کردن به نظر نمی 335 00:24:32,000 --> 00:24:35,000 همپوشانی یکی از ما کپی کردن از، 336 00:24:35,000 --> 00:24:46,000 پس از آن ما ممکن است مانند شروع در اینجا، کپی کردن از 2 به جایی است که ما می خواهیم به آن بروید، 337 00:24:46,000 --> 00:24:52,000 سپس اشاره گر ما به جلو حرکت می کند. 338 00:24:52,000 --> 00:24:56,000 >> در حال حاضر ما در حال رفتن به اینجا و اینجا، و در حال حاضر ما می خواهید کپی کنید 339 00:24:56,000 --> 00:25:04,000 این مرد در طول این پسر و حرکت اشاره گر ما به جلو. 340 00:25:04,000 --> 00:25:07,000 ما قصد داریم برای پایان دادن به گرفتن 2، 1، 2، 1، 2، 1 341 00:25:07,000 --> 00:25:10,000 به جای مناسب در 2، 1، 2، 1، 3، 4 به خاطر 342 00:25:10,000 --> 00:25:15,000 2، 1 از 3 اصلی، 4 overrode. 343 00:25:15,000 --> 00:25:19,000 Memmove دسته که صحیح می باشد. 344 00:25:19,000 --> 00:25:23,000 در این مورد، اساسا فقط همیشه استفاده از memmove 345 00:25:23,000 --> 00:25:26,000 چون آن دسته صحیح می باشد. 346 00:25:26,000 --> 00:25:29,000 به طور کلی هیچ بدتر انجام دهد. 347 00:25:29,000 --> 00:25:32,000 ایده این است که به جای شروع از ابتدا و کپی کردن این راه 348 00:25:32,000 --> 00:25:35,000 مثل ما فقط در اینجا، آن را از پایان شروع می شود و کپی، 349 00:25:35,000 --> 00:25:38,000 و در آن صورت، شما می توانید مشکل را هرگز. 350 00:25:38,000 --> 00:25:40,000 عملکرد وجود دارد از دست داده است. 351 00:25:40,000 --> 00:25:47,000 همیشه memmove استفاده کنید. هرگز در مورد memcopy نگران. 352 00:25:47,000 --> 00:25:51,000 و این که در آن شما باید به طور جداگانه memmove 353 00:25:51,000 --> 00:26:01,000 بخش پیچیده در اطراف صف شما. 354 00:26:01,000 --> 00:26:04,000 هیچ نگرانی در صورتی که به طور کامل انجام می شود. 355 00:26:04,000 --> 00:26:10,000 این است که سخت تر از پشته، فشار، و موسیقی پاپ است. 356 00:26:10,000 --> 00:26:15,000 >> هر کس هر کد می تواند با کار؟ 357 00:26:15,000 --> 00:26:21,000 حتی اگر به طور کامل ناقص است؟ 358 00:26:21,000 --> 00:26:23,000 [دانشجو] آره، آن را کاملا ناقص است، هر چند. 359 00:26:23,000 --> 00:26:27,000 به طور کامل ناقص خوب است تا زمانی که ما می تواند تجدید نظر را ذخیره کنید؟ 360 00:26:27,000 --> 00:26:32,000 من را فراموش کرده ام که هر زمان. 361 00:26:32,000 --> 00:26:39,000 خوب، بدون در نظر گرفتن آنچه که اتفاق می افتد زمانی که ما نیاز به تغییر همه چیز می باشد. 362 00:26:39,000 --> 00:26:42,000 به طور کامل تصویر را نادیده گرفت. 363 00:26:42,000 --> 00:26:49,000 این کد را توضیح دهید. 364 00:26:49,000 --> 00:26:54,000 من دارم اول از همه اگر به اندازه کمتر از نسخه اول از همه 365 00:26:54,000 --> 00:27:01,000 و سپس بعد از آن، من وارد-I را سر + اندازه، 366 00:27:01,000 --> 00:27:05,000 و من مطمئن شوید که آن را در سراسر ظرفیت آرایه پیچد، 367 00:27:05,000 --> 00:27:08,000 و من وارد رشته جدید در آن موقعیت است. 368 00:27:08,000 --> 00:27:12,000 سپس به اندازه من افزایش و بازگشت واقعی است. 369 00:27:12,000 --> 00:27:22,000 >> [راب B.] این است که قطعا یکی از این موارد که در آن شما می خواهید با استفاده از وزارت دفاع است. 370 00:27:22,000 --> 00:27:25,000 هر نوع مورد جایی که شما کاغذ بسته بندی در اطراف، اگر شما فکر می کنم کاغذ بسته بندی در اطراف، 371 00:27:25,000 --> 00:27:29,000 فکر فوری باید وزارت دفاع. 372 00:27:29,000 --> 00:27:36,000 به عنوان یک بهینه سازی سریع / ایجاد کد یک خط کوتاه، 373 00:27:36,000 --> 00:27:42,000 شما توجه کنید که خط بلافاصله پس از این یکی 374 00:27:42,000 --> 00:27:53,000 فقط اندازه + +، بنابراین شما با یکدیگر ادغام می شوند که به این خط، اندازه + +. 375 00:27:53,000 --> 00:27:58,000 در حال حاضر را در اینجا، در حال حاضر مورد 376 00:27:58,000 --> 00:28:01,000 جایی که ما حافظه کافی نیست، 377 00:28:01,000 --> 00:28:05,000 بنابراین ما در حال افزایش ظرفیت و توانایی ما 2. 378 00:28:05,000 --> 00:28:09,000 من حدس می زنم شما می توانید مشکل مشابه داشته باشد، اما در حال حاضر ما می توانیم آن را نادیده گرفت، 379 00:28:09,000 --> 00:28:13,000 جایی که اگر شما موفق به افزایش ظرفیت خود را، 380 00:28:13,000 --> 00:28:18,000 پس از آن شما می خواهید به ظرفیت خود را به دوباره توسط 2 را کاهش می دهد. 381 00:28:18,000 --> 00:28:24,000 یکی دیگر از توجه داشته باشید کوتاه است که فقط شما می توانید انجام دهید + =، 382 00:28:24,000 --> 00:28:30,000 شما همچنین می توانید << = انجام دهد. 383 00:28:30,000 --> 00:28:43,000 تقریبا هر چیزی می تواند به قبل از برابر، + =، | =، =، << = 384 00:28:43,000 --> 00:28:52,000 کاراکتر * جدید بلوک جدید ما از حافظه است. 385 00:28:52,000 --> 00:28:55,000 آه، در اینجا. 386 00:28:55,000 --> 00:29:02,000 >> چه مردم در مورد نوع بلوک جدید خود را از حافظه فکر می کنم؟ 387 00:29:02,000 --> 00:29:06,000 [دانشجو] آن را باید ** کاراکتر است. 388 00:29:06,000 --> 00:29:12,000 فکر کردن به بازگشت به ساختار ما اینجا، 389 00:29:12,000 --> 00:29:14,000 رشته است آنچه ما reallocating. 390 00:29:14,000 --> 00:29:21,000 ما در حال ساخت یک کل جدید ذخیره سازی پویا برای عناصر موجود در صف است. 391 00:29:21,000 --> 00:29:25,000 آنچه که ما در حال رفتن به اختصاص به رشته شما همان چیزی است که ما در حال حاضر در حال mallocing، 392 00:29:25,000 --> 00:29:30,000 و آنقدر جدید است که رفتن به ** کاراکتر است. 393 00:29:30,000 --> 00:29:34,000 رفتن به آرایه ای از رشته ها است. 394 00:29:34,000 --> 00:29:38,000 پس چه شده است که تحت آن ما قصد داریم به بازگشت غلط؟ 395 00:29:38,000 --> 00:29:41,000 [دانشجو] باید به انجام * کاراکتر؟ 396 00:29:41,000 --> 00:29:44,000 [راب B.] بله، تماس خوب است. 397 00:29:44,000 --> 00:29:46,000 [دانشجو] چه بود؟ 398 00:29:46,000 --> 00:29:49,000 [راب B.] ما می خواستیم به انجام اندازه * کاراکتر زیرا ما دیگر 399 00:29:49,000 --> 00:29:53,000 این در واقع یک مشکل بسیار بزرگ خواهد بود چرا که sizeof (کاراکتر) خواهد بود 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof * کاراکتر به 4، 401 00:29:55,000 --> 00:29:58,000 بنابراین تعداد زیادی از زمانی که شما در حال خرید و فروش با نوع داده int، 402 00:29:58,000 --> 00:30:01,000 شما تمایل به دور آن به دلیل اندازه int و اندازه * داده int 403 00:30:01,000 --> 00:30:04,000 در یک سیستم 32 بیتی در حال رفتن به همان چیزی. 404 00:30:04,000 --> 00:30:09,000 اما در اینجا، sizeof (کاراکتر) و sizeof (کاراکتر) در حال حاضر رفتن به همان چیزی. 405 00:30:09,000 --> 00:30:15,000 >> شرایطی که در آن ما بازگشت غلط چیست؟ 406 00:30:15,000 --> 00:30:17,000 [دانشجو] null است. 407 00:30:17,000 --> 00:30:23,000 بله، اگر جدید تهی، بازگشت کاذب، 408 00:30:23,000 --> 00:30:34,000 و من قصد دارم به پرتاب کردن در اینجا 409 00:30:34,000 --> 00:30:37,000 [دانشجو] [نامفهوم] 410 00:30:37,000 --> 00:30:39,000 [راب B.] آره، این خوب است. 411 00:30:39,000 --> 00:30:46,000 شما می توانید 2 بار ظرفیت و یا تغییر ظرفیت 1 و پس از آن تنها آن را در اینجا و یا هر آنچه را انجام دهد. 412 00:30:46,000 --> 00:30:52,000 ما می خواهیم آن را به عنوان ما آن را به حال انجام دهد. 413 00:30:52,000 --> 00:30:56,000 ظرفیت >> = 1. 414 00:30:56,000 --> 00:31:08,000 و تو هرگز نیازی به نگرانی در مورد از دست دادن جای 1 415 00:31:08,000 --> 00:31:12,000 دلیل این که شما به سمت چپ منتقل شده توسط 1 است، بنابراین مکان 1 است لزوما یک 0، 416 00:31:12,000 --> 00:31:16,000 تا حق تغییر توسط 1، شما هنوز هم می شود خوب است. 417 00:31:16,000 --> 00:31:19,000 [دانشجو] آیا شما نیاز به انجام این کار قبل از بازگشت؟ 418 00:31:19,000 --> 00:31:29,000 [راب B.] بله، این باعث می شود به هیچ وجه حس است. 419 00:31:29,000 --> 00:31:36,000 >> حالا فرض ما قصد داریم برای پایان دادن به بازگشت واقعی به پایان است. 420 00:31:36,000 --> 00:31:39,000 راه ما قصد داریم برای انجام این memmoves، 421 00:31:39,000 --> 00:31:45,000 ما باید مراقب باشید که ما چگونه آنها را انجام دهید. 422 00:31:45,000 --> 00:31:50,000 آیا هر کسی هر گونه پیشنهادات خود را برای ما آنها را انجام دهید؟ 423 00:32:17,000 --> 00:32:21,000 در اینجا شروع ما است. 424 00:32:21,000 --> 00:32:28,000 به ناچار، ما می خواهیم در ابتدا شروع دوباره 425 00:32:28,000 --> 00:32:35,000 کپی و چیزهایی از آنجا، 1، 3، 4، 2. 426 00:32:35,000 --> 00:32:41,000 چگونه می توانم به شما انجام این کار؟ 427 00:32:41,000 --> 00:32:52,000 اول، من به مرد نگاه برای memmove دوباره. 428 00:32:52,000 --> 00:32:57,000 Memmove، منظور از استدلال همیشه مهم است. 429 00:32:57,000 --> 00:33:01,000 ما می خواهیم مقصد ما برای اولین بار، دومین منبع، سوم اندازه. 430 00:33:01,000 --> 00:33:06,000 بسیاری از توابع است که معکوس منبع و مقصد وجود دارد. 431 00:33:06,000 --> 00:33:11,000 مقصد، منبع، تمایل به سازگار باشد تا حدودی. 432 00:33:17,000 --> 00:33:21,000 حرکت، آنچه در آن است بازگشت؟ 433 00:33:21,000 --> 00:33:27,000 این تابع یک اشاره گر به مقصد، به هر دلیل شما ممکن است بخواهید که. 434 00:33:27,000 --> 00:33:32,000 من می توانم آن را بخواند، اما ما می خواهیم به مقصد خود حرکت می کند. 435 00:33:32,000 --> 00:33:35,000 >> مقصد ما باشد؟ 436 00:33:35,000 --> 00:33:37,000 [دانشجو]. 437 00:33:37,000 --> 00:33:39,000 [راب B.] بله، و جایی که ما از کپی کردن؟ 438 00:33:39,000 --> 00:33:43,000 اولین چیزی که ما در حال کپی کردن این، 1، 3، 4 است. 439 00:33:43,000 --> 00:33:50,000 این 1، 3، 4. 440 00:33:50,000 --> 00:33:55,000 آدرس این 1 چیست؟ 441 00:33:55,000 --> 00:33:58,000 آدرس که 1 چیست؟ 442 00:33:58,000 --> 00:34:01,000 [دانشجو] [نامفهوم] 443 00:34:01,000 --> 00:34:03,000 [راب B.] سر + آدرس عنصر اول است. 444 00:34:03,000 --> 00:34:05,000 چگونه اولین عنصر در آرایه را دریافت کنم؟ 445 00:34:05,000 --> 00:34:10,000 [دانشجو] صف. 446 00:34:10,000 --> 00:34:15,000 [راب B.] بله، q.strings. 447 00:34:15,000 --> 00:34:20,000 به یاد داشته باشید، در اینجا، سر ما 1 است. 448 00:34:20,000 --> 00:34:24,000 لعنتی آن است. من فقط فکر می کنم آن را جادویی 449 00:34:24,000 --> 00:34:29,000 در اینجا، سر ما 1 است. من قصد دارم به تغییر رنگ بیش از حد است. 450 00:34:29,000 --> 00:34:36,000 و در اینجا رشته ها است. 451 00:34:36,000 --> 00:34:41,000 این یا می توانید آن را به عنوان ما در اینجا نوشتن 452 00:34:41,000 --> 00:34:43,000 با سر + q.strings. 453 00:34:43,000 --> 00:34:51,000 بسیاری از مردم نیز به نوشتن آن و q.strings [سر]. 454 00:34:51,000 --> 00:34:55,000 این است که واقعا کمتر کارآمد است. 455 00:34:55,000 --> 00:34:58,000 شما ممکن است از آن فکر می کنم که شما آن را غیر مرجع و سپس با گرفتن آدرس، 456 00:34:58,000 --> 00:35:04,000 کامپایلر رفتن به ترجمه آن به آنچه که ما تا به حال به هر حال، q.strings + سر. 457 00:35:04,000 --> 00:35:06,000 در هر راه که می خواهید به آن فکر می کنم. 458 00:35:06,000 --> 00:35:11,000 >> و چگونه بسیاری از بایت می خواهیم برای کپی کردن؟ 459 00:35:11,000 --> 00:35:15,000 [دانشجو] ظرفیت - سر. 460 00:35:15,000 --> 00:35:18,000 ظرفیت - سر. 461 00:35:18,000 --> 00:35:21,000 و پس از آن شما همیشه می تواند خارج از نوشتن به عنوان مثال 462 00:35:21,000 --> 00:35:23,000 برای کشف کردن در صورتی که درست است. 463 00:35:23,000 --> 00:35:26,000 [دانشجو] به آن نیاز دارد به 2 سپس تقسیم شده است. 464 00:35:26,000 --> 00:35:30,000 آره، بنابراین من حدس می زنم ما می تواند اندازه استفاده کنید. 465 00:35:30,000 --> 00:35:35,000 ما هنوز هم به اندازه بودن 466 00:35:35,000 --> 00:35:39,000 با استفاده از اندازه، ما به اندازه برابر با 4 است. 467 00:35:39,000 --> 00:35:42,000 اندازه ما 4 است. سر ما 1 است. 468 00:35:42,000 --> 00:35:46,000 ما می خواهیم برای کپی کردن این 3 عنصر است. 469 00:35:46,000 --> 00:35:54,000 که سلامت عقل را بررسی کنید که حجم - سر درست 3 است. 470 00:35:54,000 --> 00:35:58,000 و آمدن به اینجا، ما قبل گفت: 471 00:35:58,000 --> 00:36:00,000 اگر ما با استفاده از ظرفیت، پس از آن ما می خواهم که به توسط 2 تقسیم 472 00:36:00,000 --> 00:36:04,000 از آنجا که ما در حال حاضر رشد ظرفیت و توانایی ما، تا به جای آن، ما در حال رفتن به استفاده از اندازه است. 473 00:36:11,000 --> 00:36:13,000 که نسخه های آن بخش است. 474 00:36:13,000 --> 00:36:18,000 در حال حاضر، ما نیاز به کپی کردن بخش دیگر، بخشی است که از سمت چپ شروع شده است. 475 00:36:18,000 --> 00:36:28,000 >> که به چه موقعیت memmove؟ 476 00:36:28,000 --> 00:36:32,000 [دانشجو] به همراه اندازه - سر. 477 00:36:32,000 --> 00:36:38,000 بله، بنابراین ما در حال حاضر در اندازه کپی - بایت سر، 478 00:36:38,000 --> 00:36:43,000 و تا جایی که ما می خواهیم برای کپی بایت باقی مانده است جدید 479 00:36:43,000 --> 00:36:48,000 و سپس اندازه منهای چاه، تعداد کلمه در ادامه متن ما قبلا کپی شوید. 480 00:36:48,000 --> 00:36:52,000 و پس از آن جایی که ما از کپی کردن؟ 481 00:36:52,000 --> 00:36:54,000 [دانشجو] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [راب B.] بله، q.strings. 483 00:36:56,000 --> 00:37:02,000 ما یا می تواند انجام دهد و q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 این است که به طور قابل توجهی کمتر از این است. 485 00:37:05,000 --> 00:37:14,000 اگر آن را فقط به 0 باشد، سپس شما تمایل برای دیدن q.strings. 486 00:37:14,000 --> 00:37:16,000 این جایی است که ما در حال کپی برداری از. 487 00:37:16,000 --> 00:37:18,000 چند بایت را ترک کرده اند را کپی کنید؟ >> [دانشجو] 10. 488 00:37:18,000 --> 00:37:20,000 راست. 489 00:37:20,000 --> 00:37:25,000 [دانشجو] آیا ما باید به ضرب 5 - 10 برابر اندازه کلمه در ادامه متن و یا چیزی؟ 490 00:37:25,000 --> 00:37:30,000 آره، پس این است که در آن، آنچه که دقیقا کپی کردن؟ 491 00:37:30,000 --> 00:37:32,000 [دانشجو] [نامفهوم] 492 00:37:32,000 --> 00:37:34,000 چه نوع از چیزی که ما در حال کپی کردن؟ 493 00:37:34,000 --> 00:37:36,000 [دانشجو] [نامفهوم] 494 00:37:36,000 --> 00:37:41,000 آره، به طوری * کاراکتر است که ما در حال کپی کردن، ما نمی دانیم که در آن کسانی که از. 495 00:37:41,000 --> 00:37:47,000 خب، جایی که آنها با اشاره به، مانند رشته ها، ما تا پایان هل دادن آن بر روی صف 496 00:37:47,000 --> 00:37:49,000 enqueuing بر روی صف. 497 00:37:49,000 --> 00:37:51,000 که در آن کسانی را از آمدن، در حال حاضر هیچ نظری ندارم. 498 00:37:51,000 --> 00:37:56,000 ما فقط نیاز به پیگیری * کاراکتر های خود را. 499 00:37:56,000 --> 00:38:00,000 ما نمی خواهیم به اندازه کپی - بایت سر. 500 00:38:00,000 --> 00:38:03,000 ما می خواهیم به اندازه - سر کاراکتر * ها را کپی کنید، 501 00:38:03,000 --> 00:38:11,000 بنابراین ما در حال رفتن به ضرب توسط sizeof (کاراکتر). 502 00:38:11,000 --> 00:38:17,000 همان را در اینجا، سر * sizeof (کاراکتر). 503 00:38:17,000 --> 00:38:24,000 >> [دانشجو] در مورد [نامفهوم] 504 00:38:24,000 --> 00:38:26,000 این حق در اینجا؟ 505 00:38:26,000 --> 00:38:28,000 [دانشجو]، در زیر آن، به اندازه - سر. 506 00:38:28,000 --> 00:38:30,000 [راب B.] این حق در اینجا؟ 507 00:38:30,000 --> 00:38:32,000 ریاضی اشاره گر است. 508 00:38:32,000 --> 00:38:35,000 چگونه ریاضی اشاره گر در حال رفتن به محل کار 509 00:38:35,000 --> 00:38:40,000 آن را به طور خودکار اندازه از این نوع است که ما در حال برخورد با تکثیر. 510 00:38:40,000 --> 00:38:46,000 فقط مثل اینجا، جدید + (اندازه - سر) 511 00:38:46,000 --> 00:38:56,000 دقیقا معادل و اندازه - رئیس جدید 512 00:38:56,000 --> 00:39:00,000 تا زمانی که ما انتظار داریم که به درستی کار کند، 513 00:39:00,000 --> 00:39:04,000 چرا که اگر ما در حال برخورد با یک آرایه از نوع int، پس از آن ما انجام شده توسط INT-شاخص نیست 514 00:39:04,000 --> 00:39:07,000 یا اگر آن را از اندازه از 5 است و شما می خواهید این عنصر 4، پس از آن ما را به صفحه اول 515 00:39:07,000 --> 00:39:10,000 اعضای هیات آرایه [4]. 516 00:39:10,000 --> 00:39:14,000 شما don't-[4] * اندازه از نوع int است. 517 00:39:14,000 --> 00:39:21,000 که آن دسته به طور خودکار، و این مورد 518 00:39:21,000 --> 00:39:29,000 به معنای واقعی کلمه معادل است، بنابراین به نحو براکت 519 00:39:29,000 --> 00:39:34,000 فقط رفتن است به این تبدیل می شود به محض اینکه شما کامپایل شده است. 520 00:39:34,000 --> 00:39:38,000 این چیزی است که شما نیاز به مراقب باشید که 521 00:39:38,000 --> 00:39:42,000 هنگامی که شما در حال افزودن اندازه - سر 522 00:39:42,000 --> 00:39:45,000 شما در حال اضافه کردن یک بایت است. 523 00:39:45,000 --> 00:39:53,000 شما با اضافه کردن یک * کاراکتر، که می تواند یک بایت یا هر چیز دیگری. 524 00:39:53,000 --> 00:39:56,000 >> سوال دیگر؟ 525 00:39:56,000 --> 00:40:04,000 خوب، dequeue است برای رفتن به آسان تر است. 526 00:40:04,000 --> 00:40:11,000 من به شما یک دقیقه برای پیاده سازی را می دهد. 527 00:40:11,000 --> 00:40:18,000 اوه، و من حدس می زنم این است که وضعیت مشابه که در آن 528 00:40:18,000 --> 00:40:21,000 چه مورد enqueue، اگر ما در حال enqueuing تهی، 529 00:40:21,000 --> 00:40:24,000 شاید ما می خواهیم آن را اداره کند، شاید ما نمی کنند. 530 00:40:24,000 --> 00:40:27,000 ما این کار را انجام نمی دوباره در اینجا، اما به همان صورت پشته ما. 531 00:40:27,000 --> 00:40:34,000 اگر ما به تهی enqueue، ما ممکن است بخواهید به آن بی اعتنایی کند. 532 00:40:34,000 --> 00:40:40,000 هر کس کد می توانید بکشید تا برخی از؟ 533 00:40:40,000 --> 00:40:45,000 [دانشجو] من فقط باید dequeue. 534 00:40:45,000 --> 00:40:56,000 نسخه 2 است که درست است. 535 00:40:56,000 --> 00:40:59,000 شما می خواهید به توضیح؟ 536 00:40:59,000 --> 00:41:01,000 [دانشجو] اول از همه، شما مطمئن شوید که چیزی در صف وجود دارد 537 00:41:01,000 --> 00:41:07,000 و این که اندازه توسط 1. 538 00:41:07,000 --> 00:41:11,000 شما نیاز به انجام این کار، و سپس سر را به شما بازگشت 539 00:41:11,000 --> 00:41:13,000 و سپس سر تا 1 حرکت می کند. 540 00:41:13,000 --> 00:41:19,000 خوب، پس یک مورد گوشه ما باید در نظر وجود دارد. آره. 541 00:41:19,000 --> 00:41:24,000 [دانشجو] اگر سر خود را در آخرین عنصر، 542 00:41:24,000 --> 00:41:26,000 پس از آن شما نمی خواهید سر به خارج از آرایه اشاره. 543 00:41:26,000 --> 00:41:29,000 >> آره، به طوری که به زودی به عنوان رئیس بازدید آخر از آرایه های ما، 544 00:41:29,000 --> 00:41:35,000 در هنگامی که ما dequeue، سر ما باید تا 0، کامپیوتر. 545 00:41:35,000 --> 00:41:40,000 متاسفانه، ما می توانیم در یک مرحله انجام نیست. 546 00:41:40,000 --> 00:41:44,000 من حدس می زنم راه من احتمالا می خواهم حل آن است 547 00:41:44,000 --> 00:41:52,000 این است که رفتن به * کاراکتر، آنچه که ما در حال بازگشت، 548 00:41:52,000 --> 00:41:55,000 هر نام متغیر را می خواهد. 549 00:41:55,000 --> 00:42:02,000 سپس ما می خواهیم به وزارت دفاع سر ظرفیت ما 550 00:42:02,000 --> 00:42:10,000 و پس از آن RET بازگشت. 551 00:42:10,000 --> 00:42:14,000 بسیاری از مردم در اینجا ممکن است انجام دهند 552 00:42:14,000 --> 00:42:19,000 این مورد قرار گرفتند مردم انجام دهد اگر سر 553 00:42:19,000 --> 00:42:29,000 بیشتر از ظرفیت است، سر انجام - ظرفیت. 554 00:42:29,000 --> 00:42:36,000 و فقط در اطراف چه وزارت دفاع مشغول به کار است. 555 00:42:36,000 --> 00:42:41,000 سرپرست وزارت دفاع ظرفیت = بسیار تمیزتر 556 00:42:41,000 --> 00:42:51,000 از کاغذ بسته بندی در اطراف از سر بالاتر از سر ظرفیت - ظرفیت. 557 00:42:51,000 --> 00:42:56,000 >> پرسش و پاسخ؟ 558 00:42:56,000 --> 00:43:02,000 خوب، آخرین چیزی است که ما را ترک کرده اند، لیست پیوندی ما است. 559 00:43:02,000 --> 00:43:07,000 شما ممکن است به برخی از رفتار لیست پیوندی استفاده می شود که اگر شما را 560 00:43:07,000 --> 00:43:11,000 لیست های مرتبط در جداول هش خود را، اگر شما یک جدول هش. 561 00:43:11,000 --> 00:43:15,000 من به شدت انجام یک جدول هش را توصیه کند. 562 00:43:15,000 --> 00:43:17,000 شما ممکن است در حال حاضر انجام می شود یک درخت، 563 00:43:17,000 --> 00:43:23,000 اما تلاش آنها مشکل تر است. 564 00:43:23,000 --> 00:43:27,000 در تئوری، آنها مجانبی بهتر است. 565 00:43:27,000 --> 00:43:30,000 اما فقط در هیئت مدیره بزرگ نگاه کنید، 566 00:43:30,000 --> 00:43:35,000 و تلاش می کند هرگز بهتر است، و آنها را از حافظه است. 567 00:43:35,000 --> 00:43:43,000 همه چیز در مورد تلاش می کند به پایان می رسد تا اینکه بدتر برای کار بیشتر است. 568 00:43:43,000 --> 00:43:49,000 این چیزی است که راه حل دیوید مالان همیشه 569 00:43:49,000 --> 00:43:56,000 او همیشه پست ها راه حل های درخت خود را، و اجازه دهید را ببینید که در آن وی در حال حاضر است. 570 00:43:56,000 --> 00:44:00,000 چه بود که او تحت، دیوید J؟ 571 00:44:00,000 --> 00:44:06,000 او # 18 است، به طوری که وحشتناکی بد نیست، 572 00:44:06,000 --> 00:44:09,000 و است که برای رفتن به یکی از بهترین تلاش می کند شما می توانید از فکر می کنم 573 00:44:09,000 --> 00:44:17,000 و یا یکی از بهترین تلاش می کند از یک درخت. 574 00:44:17,000 --> 00:44:23,000 و حتی آن را راه حل اصلی خود را؟ 575 00:44:23,000 --> 00:44:29,000 من احساس می کنم مثل راه حل های درخت تمایل بیشتری را در این محدوده استفاده از RAM است. 576 00:44:29,000 --> 00:44:33,000 >> رفتن به پایین بسیار بالا، و استفاده از RAM در تک رقمی است. 577 00:44:33,000 --> 00:44:36,000 برو به پایین به سمت پایین، و پس از آن شما شروع به دیدن تلاش می کند 578 00:44:36,000 --> 00:44:41,000 که در آن شما می توانید استفاده کاملا عظیم RAM، 579 00:44:41,000 --> 00:44:45,000 و تلاش می کند آنها مشکل تر است. 580 00:44:45,000 --> 00:44:53,000 به طور کامل به ارزش آن، اما یک تجربه آموزشی اگر شما تا حالا دیدی کسی نیست. 581 00:44:53,000 --> 00:44:56,000 آخرین چیزی که لیست پیوندی ما است، 582 00:44:56,000 --> 00:45:04,000 و این چیزها سه، پشته، صف، و لیست های پیوندی، 583 00:45:04,000 --> 00:45:09,000 هر چیزی در آینده که شما تا به حال در علم کامپیوتر 584 00:45:09,000 --> 00:45:12,000 فرض شما باید آشنایی با این چیزها. 585 00:45:12,000 --> 00:45:19,000 آنها فقط تا به همه چیز اساسی است. 586 00:45:19,000 --> 00:45:25,000 >> لینک لیست ها، و در اینجا ما یک لیست به تنهایی در ارتباط است برای رفتن به اجرای ما. 587 00:45:25,000 --> 00:45:34,000 چه تنهایی مرتبط میانگین به عنوان مخالف به پیوند مضاعف؟ بله. 588 00:45:34,000 --> 00:45:37,000 [دانشجو] تنها به اشاره گر بعد به جای اشاره گر اشاره، 589 00:45:37,000 --> 00:45:39,000 مانند قبل از آن و بعد از آن. 590 00:45:39,000 --> 00:45:44,000 آره، بنابراین در قالب تصویر، چه من فقط کاری انجام دهید؟ 591 00:45:44,000 --> 00:45:48,000 من دو چیز است. من تصویر و تصویر. 592 00:45:48,000 --> 00:45:51,000 در قالب تصویر، تنهایی ما مرتبط با لیست ها، 593 00:45:51,000 --> 00:45:57,000 به ناچار، ما باید برخی از نوع اشاره گر به سر از لیست ما 594 00:45:57,000 --> 00:46:02,000 و پس از آن در لیست ما، ما فقط باید اشاره گر، 595 00:46:02,000 --> 00:46:05,000 و شاید این امتیاز به تهی. 596 00:46:05,000 --> 00:46:08,000 این رفتن را به رسم معمول خود را از یک فهرست به تنهایی در ارتباط است. 597 00:46:08,000 --> 00:46:14,000 لیست پیوند مضاعف، شما می توانید به عقب بروید. 598 00:46:14,000 --> 00:46:19,000 اگر من به تو هر گره در لیست می دهد، و سپس شما لزوما می تواند برای به دست آوردن 599 00:46:19,000 --> 00:46:23,000 هر گره دیگر در این لیست در صورتی که آن را به یک فهرست پیوند مضاعف است. 600 00:46:23,000 --> 00:46:27,000 اما اگر من به شما گره سوم در لیست و فهرست تنهایی مرتبط، 601 00:46:27,000 --> 00:46:30,000 هیچ راهی وجود ندارد که شما تا کنون برای رسیدن به گره اول و دوم است. 602 00:46:30,000 --> 00:46:34,000 و مزایا و detriments و یکی یکی آشکار وجود دارد 603 00:46:34,000 --> 00:46:42,000 است که شما را تا اندازه بیشتر، و شما را مجبور به پیگیری از جایی که این کارها با اشاره به در حال حاضر. 604 00:46:42,000 --> 00:46:49,000 اما ما فقط در مورد تنهایی مرتبط مراقبت. 605 00:46:49,000 --> 00:46:53,000 >> چند چیز ما در حال رفتن به برای به اجرا درآوردن. 606 00:46:53,000 --> 00:47:00,000 گره ساختار typedef شما، و من بین المللی: ساختار گره * بعد، گره. 607 00:47:00,000 --> 00:47:09,000 که typedef باید به ذهن خود را سوزانده است. 608 00:47:09,000 --> 00:47:14,000 مسابقه 1 باید خواهم typedef از یک گره لیست پیوندی، 609 00:47:14,000 --> 00:47:18,000 و شما باید قادر باشد که بلافاصله خط ناخوانا است که به پایین 610 00:47:18,000 --> 00:47:22,000 بدون حتی راجع به آن فکر می کند. 611 00:47:22,000 --> 00:47:27,000 من حدس می زنم چند سوال، چرا ما نیاز به ساختار در اینجا؟ 612 00:47:27,000 --> 00:47:32,000 چرا ما می گویند * گره نه؟ 613 00:47:32,000 --> 00:47:35,000 [دانشجو] [نامفهوم] 614 00:47:35,000 --> 00:47:38,000 آره. 615 00:47:38,000 --> 00:47:44,000 تنها چیزی که تعریف یک گره به عنوان یک چیز 616 00:47:44,000 --> 00:47:47,000 typedef خود است. 617 00:47:47,000 --> 00:47:55,000 اما در این نقطه، زمانی که ما نوع تجزیه را از طریق این تعریف ساختار گره، 618 00:47:55,000 --> 00:48:01,000 ما را typedef ما تمام نشده است با این حال، از آنجا که typedef تمام نشده است. 619 00:48:01,000 --> 00:48:05,000 گره وجود ندارد. 620 00:48:05,000 --> 00:48:12,000 اما ساختار گره می کند، و این گره در اینجا، 621 00:48:12,000 --> 00:48:14,000 این نیز می تواند نامیده می شود می شود هر چیز دیگری. 622 00:48:14,000 --> 00:48:16,000 این می تواند به نام N. 623 00:48:16,000 --> 00:48:19,000 این می تواند به نام گره لیست پیوندی. 624 00:48:19,000 --> 00:48:21,000 این می تواند هر چیزی. 625 00:48:21,000 --> 00:48:26,000 اما این ساختار گره نیاز به آن می شود همان چیزی که به عنوان گره در ساختار این است. 626 00:48:26,000 --> 00:48:29,000 چه با شما تماس نیز می تواند در اینجا، 627 00:48:29,000 --> 00:48:32,000 و به طوری که هم نکته دوم این سوال را پاسخ 628 00:48:32,000 --> 00:48:37,000 به همین دلیل است که بسیاری از بار زمانی که می بینید ساختمانها و تعریف نوعهای از ساختمانها، 629 00:48:37,000 --> 00:48:42,000 شما از ساختمانها ناشناس که در آن شما خواهید دید ساختار typedef را ببینید، 630 00:48:42,000 --> 00:48:47,000 پیاده سازی ساختار، فرهنگ لغت، یا هر چیز دیگری. 631 00:48:47,000 --> 00:48:51,000 >> چرا در اینجا ما نیاز به گفتن گره؟ 632 00:48:51,000 --> 00:48:54,000 چرا ساختار ناشناس می توانید آن را نمی شود؟ 633 00:48:54,000 --> 00:48:56,000 این تقریبا همان جواب است. 634 00:48:56,000 --> 00:48:58,000 [دانشجو] شما نیاز به مراجعه به آن را در درون ساختار. 635 00:48:58,000 --> 00:49:04,000 بله، در داخل ساختار، شما نیاز به مراجعه به ساختار خود است. 636 00:49:04,000 --> 00:49:10,000 اگر شما نمی دهد ساختار یک نام، اگر آن را ساختار ناشناس، شما نمی تواند به آن است. 637 00:49:10,000 --> 00:49:17,000 و آخرین اما حداقل این همه باید تا حدی سر راست، 638 00:49:17,000 --> 00:49:20,000 و آنها باید به شما کمک کند درک اگر شما در حال نوشتن این پایین 639 00:49:20,000 --> 00:49:24,000 که شما در حال انجام کاری اشتباه است اگر این چیزها حس را ندارد. 640 00:49:24,000 --> 00:49:28,000 تاریخ و زمان آخرین اما نه کم، چرا این باید به ساختار گره *؟ 641 00:49:28,000 --> 00:49:34,000 چرا می توانید آن را نه تنها ساختار شود گره بعدی؟ 642 00:49:34,000 --> 00:49:37,000 [دانشجو] اشاره گر به ساختار بعدی. 643 00:49:37,000 --> 00:49:39,000 که به ناچار چیزی است که ما می خواهیم. 644 00:49:39,000 --> 00:49:42,000 چرا می تواند آن را هرگز گره ساختار بعدی؟ 645 00:49:42,000 --> 00:49:50,000 چرا آن را باید در ساختار گره * بعدی؟ آره. 646 00:49:50,000 --> 00:49:53,000 [دانشجو] آن را مانند یک حلقه بی نهایت است. 647 00:49:53,000 --> 00:49:55,000 آره. 648 00:49:55,000 --> 00:49:57,000 [دانشجو] این همه را در یکی خواهد بود. 649 00:49:57,000 --> 00:50:02,000 آره، فقط فکر می کنم که ما چگونه می اندازه و یا چیزی. 650 00:50:02,000 --> 00:50:08,000 اندازه ساختار است که اساسا + یا - برخی از الگوی اینجا و آنجا. 651 00:50:08,000 --> 00:50:15,000 این اساسا رفتن به مجموع اندازه از چیزهایی که در ساختار است. 652 00:50:15,000 --> 00:50:18,000 این حق در اینجا، بدون تغییر هر چیز، به اندازه است که برای رفتن به آسان. 653 00:50:18,000 --> 00:50:24,000 حجم از ساختار گره است برای رفتن به اندازه من اندازه + بعدی. 654 00:50:24,000 --> 00:50:27,000 اندازه از من در حال رفتن به 4. حجم بعدی به 4. 655 00:50:27,000 --> 00:50:30,000 حجم از ساختار گره به 8 است. 656 00:50:30,000 --> 00:50:34,000 اگر ما نمی * را نداشته باشند، به فکر sizeof، 657 00:50:34,000 --> 00:50:37,000 سپس sizeof (من) در حال رفتن به 4. 658 00:50:37,000 --> 00:50:43,000 حجم از ساختار گره بعدی این است که رفتن به اندازه از من + اندازه از گره ساختار بعدی 659 00:50:43,000 --> 00:50:46,000 + اندازه از من + اندازه از گره ساختار بعدی. 660 00:50:46,000 --> 00:50:55,000 این امر می تواند بازگشت نامتناهی از گره است. 661 00:50:55,000 --> 00:51:00,000 این است که چرا این است که چه چیزهایی را می شود. 662 00:51:00,000 --> 00:51:03,000 >> دوباره، قطعا که حفظ، 663 00:51:03,000 --> 00:51:06,000 یا حداقل آن را به اندازه کافی است که شما می توانید قادر به درک 664 00:51:06,000 --> 00:51:12,000 دلیل را از طریق آنچه در آن باید مانند نگاه کنند. 665 00:51:12,000 --> 00:51:14,000 چیزهایی که ما در حال رفتن به خواهید برای به اجرا درآوردن. 666 00:51:14,000 --> 00:51:18,000 اگر طول لیست 667 00:51:18,000 --> 00:51:21,000 شما می توانید از تقلب و در حدود 668 00:51:21,000 --> 00:51:24,000 طول و یا چیزی جهانی است، اما ما قصد داریم برای انجام این کار است. 669 00:51:24,000 --> 00:51:28,000 ما قصد داریم به شمارش طول از لیست. 670 00:51:28,000 --> 00:51:34,000 در حال حاضر به وجود دارد، به طوری که اساسا مانند یک جستجو، 671 00:51:34,000 --> 00:51:41,000 بنابراین ما باید یک لیست پیوندی از اعداد صحیح را به دیدن اگر این عدد صحیح در لیست پیوندی. 672 00:51:41,000 --> 00:51:44,000 Prepend رفتن به در ابتدای لیست قرار دادن. 673 00:51:44,000 --> 00:51:46,000 افزودنپرونده رفتن به درج در پایان. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted در حال رفتن به سمت طبقه بندی شده اند در لیست قرار دادن. 675 00:51:53,000 --> 00:52:01,000 نوع Insert_sorted از فرض بر این است که شما prepend استفاده می شود هرگز و یا در راه های بد اضافه شده است. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted زمانی که شما در حال اجرای insert_sorted 677 00:52:09,000 --> 00:52:13,000 اجازه دهید می گویند ما با ما فهرست. 678 00:52:13,000 --> 00:52:18,000 این همان چیزی است که در حال حاضر، 2، 4، 5 به نظر می رسد. 679 00:52:18,000 --> 00:52:24,000 من می خواهم برای وارد کردن 3 است، بنابراین تا زمانی که لیست خود را در حال حاضر طبقه بندی شده اند، 680 00:52:24,000 --> 00:52:27,000 آن آسان برای پیدا کردن جایی که 3 تعلق دارد. 681 00:52:27,000 --> 00:52:29,000 من در 2 شروع می شود. 682 00:52:29,000 --> 00:52:32,000 خوب، 3 از 2 بیشتر است، بنابراین من می خواهم به رفتن ادامه دهید. 683 00:52:32,000 --> 00:52:35,000 آه، 4 بیش از حد بزرگ است، به طوری که من می دانم 3 رفتن به در بین 2 و 4، 684 00:52:35,000 --> 00:52:39,000 و من باید به تعمیر اشاره گرها و تمام چیزهای که. 685 00:52:39,000 --> 00:52:43,000 اما اگر ما به شدت استفاده نمی insert_sorted 686 00:52:43,000 --> 00:52:50,000 می خواهم اجازه دهید فقط می گویند من prepend 6، 687 00:52:50,000 --> 00:52:55,000 سپس لیست پیوندی من می خواهم برای تبدیل شدن به. 688 00:52:55,000 --> 00:53:01,000 در حال حاضر باعث می شود بدون معنا، به طوری برای insert_sorted، شما فقط می توانید فرض 689 00:53:01,000 --> 00:53:04,000 فهرست طبقه بندی شده اند، حتی اگر عملیات وجود دارد 690 00:53:04,000 --> 00:53:09,000 است که می تواند باعث شود که آن را به نه طبقه بندی شده اند، و این از آن است. 691 00:53:09,000 --> 00:53:20,000 یافتن درج مفید پس آن چیزهایی هستند که شما قصد به پیاده سازی. 692 00:53:20,000 --> 00:53:24,000 >> در حال حاضر، یک دقیقه به طول و شامل 693 00:53:24,000 --> 00:53:30,000 و کسانی که باید نسبتا سریع است. 694 00:53:41,000 --> 00:53:48,000 نزدیک شدن زمان بسته شدن، تا هر کسی هر چیزی در طول و یا شامل؟ 695 00:53:48,000 --> 00:53:50,000 آنها در حال رفتن به تقریبا یکسان است. 696 00:53:50,000 --> 00:53:57,000 [دانشجو] طول. 697 00:53:57,000 --> 00:54:01,000 بیایید ببینید، تجدید نظر. 698 00:54:01,000 --> 00:54:04,000 باشه. 699 00:54:12,000 --> 00:54:15,000 شما می خواهید به توضیح؟ 700 00:54:15,000 --> 00:54:21,000 [دانش آموز] من فقط ایجاد یک گره اشاره گر و مقداردهی اولیه آن را به اول، است که متغیر جهانی ما، 701 00:54:21,000 --> 00:54:27,000 و سپس چک کنید و ببینید اگر آن را تهی، بنابراین من می توانم در یک گسل SEG می کنید و بازگشت 0 در صورتی که این مورد. 702 00:54:27,000 --> 00:54:34,000 در غیر این صورت، من حلقه را از طریق، پیگیری در داخل عدد صحیح 703 00:54:34,000 --> 00:54:38,000 چند بار من دسترسی به عنصر بعدی از لیست 704 00:54:38,000 --> 00:54:43,000 و در همان عمل افزایش نیز که عنصر واقعی دسترسی داشته باشید. 705 00:54:43,000 --> 00:54:47,000 و پس از آن من به طور مداوم چک تا ببینید که آیا آن را به تهی، 706 00:54:47,000 --> 00:54:56,000 و اگر آن را تهی، سپس آن را aborts و فقط تعدادی از عناصر من دیده را بر می گرداند. 707 00:54:56,000 --> 00:55:01,000 >> [راب B.] آیا هر کسی هر گونه نظر در مورد هر چیزی؟ 708 00:55:01,000 --> 00:55:06,000 این به نظر می رسد صحت خوب عاقلانه است. 709 00:55:06,000 --> 00:55:10,000 [دانشجو] من فکر نمی کنم شما نیاز به گره == تهی. 710 00:55:10,000 --> 00:55:13,000 آره، بنابراین اگر گره == 0 تهی بازگشت. 711 00:55:13,000 --> 00:55:18,000 اما اگر گره == تهی سپس این-OH، یک مسئله صحت وجود دارد. 712 00:55:18,000 --> 00:55:23,000 این بود که فقط شما به من باز می گردد، اما آن را در محدوده در حال حاضر است. 713 00:55:23,000 --> 00:55:30,000 شما فقط نیاز به دانشنامه هوشمند من است، پس من = 0. 714 00:55:30,000 --> 00:55:34,000 اما اگر گره صفر است، پس از آن من است هنوز هم به 0 باشد، 715 00:55:34,000 --> 00:55:39,000 و ما قصد داریم به بازگشت 0 است، بنابراین این مورد یکسان است. 716 00:55:39,000 --> 00:55:48,000 چیز دیگری که رایج است که برای حفظ اعلامیه 717 00:55:48,000 --> 00:55:51,000 از داخل گره از حلقه for. 718 00:55:51,000 --> 00:55:54,000 شما می توانید می گویند آه، نه. 719 00:55:54,000 --> 00:55:56,000 اجازه دهید آن را به عنوان این است. 720 00:55:56,000 --> 00:55:59,000 من احتمالا من بین المللی = 0 در اینجا قرار دهید، 721 00:55:59,000 --> 00:56:05,000 سپس گره * گره = برای اولین بار در اینجا. 722 00:56:05,000 --> 00:56:11,000 و این است که احتمالا چگونه به خلاص شدن از این در حال حاضر. 723 00:56:11,000 --> 00:56:14,000 این است که احتمالا چگونه من می خواهم که آن نوشته شده است. 724 00:56:14,000 --> 00:56:21,000 همچنین شما می توانید از نگاه کردن به آن مثل این. 725 00:56:21,000 --> 00:56:25,000 این ساختار حلقه در اینجا 726 00:56:25,000 --> 00:56:30,000 باید تقریبا به عنوان به شما طبیعی به عنوان اعضای هیات من = 0 727 00:56:30,000 --> 00:56:33,000 من کمتر از طول آرایه + +. 728 00:56:33,000 --> 00:56:38,000 در صورتی که شما بیش از یک آرایه تکرار، این است که چگونه شما را بیش از یک لیست پیوندی تکرار. 729 00:56:38,000 --> 00:56:45,000 >> این باید طبیعت دوم در برخی از نقطه. 730 00:56:45,000 --> 00:56:50,000 با توجه به آن، این است که تقریبا همان چیزی خواهد بود. 731 00:56:50,000 --> 00:56:57,000 شما در حال رفتن به می خواهم به تکرار بیش از یک لیست پیوندی. 732 00:56:57,000 --> 00:57:02,000 اگر گره من هیچ ایده چه چیزی ارزش نامیده می شود. 733 00:57:02,000 --> 00:57:04,000 گره i است. 734 00:57:04,000 --> 00:57:15,000 اگر مقدار که در آن گره = بازگشت من درست باشد، و این از آن است. 735 00:57:15,000 --> 00:57:18,000 توجه داشته باشید که تنها راهی که ما تا به حال بازگشت غلط 736 00:57:18,000 --> 00:57:23,000 اگر ما بر سر لیست کل مرتبط تکرار و بازگشت واقعی، 737 00:57:23,000 --> 00:57:29,000 به طوری که چه می کند این است. 738 00:57:29,000 --> 00:57:36,000 به عنوان یک طرف توجه ما احتمالا نمی خواهد برای اضافه و یا prepend. 739 00:57:36,000 --> 00:57:39,000 >> آخرین میانبر توجه داشته باشید. 740 00:57:39,000 --> 00:57:52,000 اگر کلمه کلیدی استاتیک می بینید، به طوری که می گویند استاتیک تعداد اعضای هیات = 0، 741 00:57:52,000 --> 00:57:56,000 پس از آن ما به حساب + +، شما اساسا می تواند از آن به عنوان یک متغیر جهانی فکر می کنم، 742 00:57:56,000 --> 00:58:00,000 حتی اگر من فقط گفت، این است که چگونه ما در حال رفتن به پیاده سازی طول نه. 743 00:58:00,000 --> 00:58:06,000 من برای انجام این کار در اینجا، و سپس تعداد دفعات مشاهده + +. 744 00:58:06,000 --> 00:58:11,000 به هر حال ما می توانیم یک گره در لیست پیوندی ما در حال افزایش تعداد را وارد کنید. 745 00:58:11,000 --> 00:58:15,000 نقطه از این است که چه کلمه کلیدی استاتیک به معنای. 746 00:58:15,000 --> 00:58:20,000 اگر من فقط به حال تعداد نوع int = 0 خواهد بود که به طور منظم قدیمی متغیر جهانی است. 747 00:58:20,000 --> 00:58:25,000 چه معنی تعداد اعضای هیات تحریریه استاتیک آن است که یک متغیر جهانی برای این فایل. 748 00:58:25,000 --> 00:58:28,000 این غیر ممکن است برای برخی از فایل های دیگر، 749 00:58:28,000 --> 00:58:34,000 از pset 5 فکر می کنم، اگر شما را شروع کرده اند. 750 00:58:34,000 --> 00:58:39,000 شما باید هر دو speller.c، و شما باید dictionary.c، 751 00:58:39,000 --> 00:58:42,000 و اگر شما فقط یک چیز جهانی، اعلام کرد پس از آن هر چیزی را در speller.c 752 00:58:42,000 --> 00:58:45,000 می توان در dictionary.c و بالعکس قابل دسترسی است. 753 00:58:45,000 --> 00:58:48,000 متغیر های جهانی در دسترس هستند با هر فایل C، 754 00:58:48,000 --> 00:58:54,000 اما متغیرهای استاتیک فقط از درون خود فایل قابل دسترسی، 755 00:58:54,000 --> 00:59:01,000 بنابراین داخل املا و یا در داخل dictionary.c، 756 00:59:01,000 --> 00:59:06,000 این نوع چگونه من می خواهم متغیر برای اندازه آرایه من اعلام 757 00:59:06,000 --> 00:59:10,000 یا به اندازه تعداد کلمات موجود در فرهنگ لغت است. 758 00:59:10,000 --> 00:59:15,000 از آنجا که من نمی خواهم یک متغیر جهانی به اعلام است که هر کسی برای دسترسی به، 759 00:59:15,000 --> 00:59:18,000 من واقعا در مورد آن را برای مقاصد خود من اهمیت می دهند. 760 00:59:18,000 --> 00:59:21,000 >> چیز خوبی در این مورد نیز کل نام مسائل برخورد. 761 00:59:21,000 --> 00:59:27,000 اگر برخی از فایل های دیگر تلاش می کند به استفاده از یک متغیر سراسری به نام شمارش، همه چیز به بسیار، بسیار اشتباه است، 762 00:59:27,000 --> 00:59:33,000 بنابراین این سادگی چیزهایی را ایمن نگه می دارد، و تنها شما می توانید به آن دسترسی داشته باشید. 763 00:59:33,000 --> 00:59:38,000 و هیچ کس دیگری نمی تواند، و اگر شخص دیگری اعلام کرد که یک متغیر سراسری به نام شمارش، 764 00:59:38,000 --> 00:59:43,000 پس آن را نمی خواهد دخالت با متغیر استاتیک خود را به نام شمارش. 765 00:59:43,000 --> 00:59:47,000 این چیزی است که استاتیک می باشد. این فایل یک متغیر جهانی است. 766 00:59:47,000 --> 00:59:52,000 >> سوالات مطرح شده در هر چیز؟ 767 00:59:52,000 --> 00:59:59,000 تمام مجموعه. خداحافظ. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]