DAVID J. مالان: بسیار خوب. بنابراین برای اولین خوش آمدید مرگ CS50 برای یک مسابقه. ما فکر کردم ما افتتاح این سنت این سال است. و این فرصتی خواهد بود از طریق راه رفتن راه حل های به مسابقه. و ما به سرعت یا کم کردن سرعت بر اساس در بهره از آن را در اینجا. بنابراین شما احتمالا در اینجا چون تو علاقه مند چگونه می تواند داشته باشد و یا باید برخی از پاسخ از این مشکلات. پس چرا ما نه نگاهی در این بخش برای اولین بار؟ پس گرفتن رشته ها. این به شما داد سه نسخه های مختلف از برنامه ای که بود، در نهایت، به منظور دریافت یک رشته از کاربر. یا این که آیا آن را انجام داد که نبود از چپ به شما برای تعیین. و ما در سوال 0 پرسید: فرض کنید که نسخه 1 است وارد شده و اعدام شد. چرا ممکن است برنامه segfault؟ در نگاه اول، هر گونه پیشنهاد که چرا؟ آره. یک مدعو: بنابراین من به خاطر دارم این در به عنوان مثال قبل از نگاه کردن به * کاراکتر ها و دیدن اسکن و دیدن دلیل آن را به یک اشاره گر، چگونه آن را تحت تاثیر قرار بود آنچه را که در اسکن شده؟ آیا آن را و یا آدرس ها؟ DAVID J. مالان: OK. خوب. پس در نهایت، منبع هر گونه مشکل احتمالا رفتن به کاهش به متغیر ها. و این در واقع یک متغیر. نوع داده آن متغیر است * کاراکتر، که به معنی آن را به شامل آدرس یک شخصیت. و در آن نهفته است بینش. آن را که شامل آدرس از یک کاراکتر یا، به طور کلی، آدرس اولین کاراکتر در بلوک کل از شخصیت های. اما گرفتن این است که بازدید کنندگان اسکن، هدف در زندگی، یک آدرس داده شده است و با توجه به کد فرمت مانند٪ s را، به عنوان خوانده شده یک رشته را به تکه از حافظه در آن آدرس. اما از آنجا که هیچ علامت مساوی قبل وجود دارد که نقطه و ویرگول در اولین خط از کد، از آنجا که ما در واقع نه اختصاص هر حافظه با malloc، به دلیل آن را نداشت در واقع تخصیص مجموعه ای از برخی از اندازه، همه شما در حال انجام است خواندن کاربر ورودی صفحه کلید را به برخی از کامل ارزش زباله، که است در بازدید کنندگان به طور پیش فرض. بنابراین شانس شما در حال رفتن به segfault اگر که آدرس نه تنها به طوری اتفاق می افتد به یک ارزش است که شما می توانید، در واقع، به نوشتن. بنابراین بد به اختصاص حافظه شما وجود دارد. بنابراین در سوال 1، از ما خواسته، فرض کنید که نسخه 2 است وارد شده و اعدام شد. چرا ممکن است این برنامه segfault؟ بنابراین یک حشره دار کمتر است. و واقعا وجود دارد تنها یک راه آشکار است که در آن شما می توانید باعث segfault در اینجا. و این موضوعی است. هر زمان ما با استفاده از C در حافظه، چه می توانید انجام دهید را القاء می segfault با نسخه 2؟ یک مدعو: اگر شما استفاده کنید که ورودی در یک رشته که بیش از 49 شخصیت. DAVID J. مالان: دقیقا. هر بار که شما چیزی ثابت طول ببینید که آن را به یک آرایه می آید، خود را رادار باید خاموش به که این می تواند مشکل اگر شما در حال چک کردن نیست مرز یک آرایه. و این مشکل در اینجا است. ما هنوز در حال استفاده از scanf. ما هنوز در حال استفاده از٪ s را، که به معنی امتحان کنید برای خواندن یک رشته از کاربر. که که رفتن به به بازدید کنندگان خوانده شود،، در این نقطه، به طور موثر آدرس یک تکه از حافظه یا آن را معادل. این نام از یک آرایه است از شخصیت های از حافظه است. اما دقیقا همان است که، اگر شما به عنوان خوانده شده رشته که بیش از 49 کاراکتر، 49 زیرا شما باید اتاق را برای بک اسلش 0، شما در حال رفتن به سرریز که بافر شده است. و شما ممکن است خوش شانس دریافت می شود و قادر به ارسال یک شخصیت 51، 52، 53. اما در برخی موارد، سیستم عامل در حال رفتن به می گویند، هیچ. این قطعا حافظه شما مجاز به لمس. و این برنامه در حال رفتن به segfault. بنابراین وجود دارد، فن آوری هوشمند باید هر است زمانی که شما طول ثابت کردم، شما باید مطمئن شوید که شما در حال چک کردن طول از هر چه باشد شما در تلاش هستید به خواندن را در آن. یک مدعو: بنابراین برای حل آن، شما می توانید از یک بیانیه چک کردن در واقع به حال بیشتر طول است از و یا کمتر از؟ DAVID J. مالان: کاملا. شما فقط یک وضعیت دارند که می گوید، اگر - و یا به جای شما لزوما نمی دانند در پیشبرد چگونگی بسیاری از شخصیت های کاربر در حال رفتن به تایپ، به دلیل شما باید مرغ و تخم مرغ. نه تا زمانی که شما آن را در با scanf خوانده ام می تواند به شما چطور مدت آن است. اما در آن نقطه، که خیلی دیر است، چرا که شما در حال حاضر آن را به عنوان خوانده شده برخی از بلوک از حافظه است. بنابراین به عنوان به کنار، اجتناب کتابخانه CS50 این موضوع در دسترس نباشد، فراخوان با استفاده از fgetc. و آن را می خواند یکی از شخصیت ها در یک زمان، نوک چرخش پا همراه، دانستن اینکه شما می توانید یک شخصیت اگر سرریز نمی شما یکی به عنوان خوانده شده در یک زمان. گرفتن است با فراخوان getstring است که ما باید به طور مداوم دوباره اندازه که تکه از حافظه که فقط یک درد است. این یک مقدار زیادی از خطوط است کد به انجام این کار. بنابراین روش دیگری می شود در واقع استفاده از یکی از بستگانم، بنابراین به صحبت می کنند، از scanf. انواع بسیاری از این وجود دارد توابع که در واقع بررسی طول چگونه بسیاری از شخصیت های شما ممکن است حداکثر به عنوان خوانده شده. و شما می توانید مشخص کنید، نمی خواند بیش از 50 حرف می باشد. به طوری که می تواند روش دیگری است اما انطباق کمتر از ورودی های بزرگتر. بنابراین سوال 2 می پرسد، فرض کنید که نسخه 3 وارد می شود و اجرا می شود. چرا ممکن است که برنامه segfault؟ پس این یکی است که در واقع همان پاسخ، حتی اگر آن را به نظر می رسد کمی خیال باف. ما با استفاده از malloc، که احساس می کند مانند ما در حال دادن به خود گزینه های بیشتر. و پس از آن ما آزاد است که حافظه در پایان. این هنوز تنها 50 بایت از حافظه است. بنابراین ما هنوز هم ممکن است سعی کنید به عنوان خوانده شده در 51، 52، 1000 کلمه در ادامه متن. آن را به segfault برای دقیقا به همین دلیل. اما دلیل دیگری نیز وجود دارد. چه چیز دیگری می تواند بازگشت علاوه بر malloc آدرس یک تکه از حافظه؟ این می تواند تهی گشت. و از آنجایی که ما برای چک کردن نمی که، ما ممکن است انجام کاری کامپیوتر و نرم افزار به دلیل دیگری، که این است که ما ممکن است گفتن scanf، به عنوان خوانده شده ورودی کاربر را از صفحه کلید به 0 محل، AKA تهی. و این، بیش از حد، قطعا خواهد شد باعث segfault. بنابراین برای هدف مسابقه، ما را یا از آن به عنوان یک پذیرفته شده اند دلیل معتبر. یکی یکسان است. یکی است که کمی متفاوت تر است. در نهایت، با توجه به برنامه استفاده از حافظه، چگونه می توانم نسخه 2 و نسخه 3 متفاوت است؟ پس برای چه آن را به ارزش، ما شاهد عرضه به ظاهر بی پایان از امکان پاسخ به این. و در پاسخ مردم، آنچه که ما بودند امید است، اما ما دیگر پذیرفته همه چیز، برخی اشاره ای بود واقعیت این است که نسخه 2 با استفاده از پشته به اصطلاح. نسخه 3 با استفاده از پشته. و عملکرد، این کار را واقعا نمی را تمام است که بسیاری از تفاوت. در پایان روز، ما هنوز هم فقط گرفتن 50 بایت از حافظه است. اما این یکی از پاسخ های ممکن بود که ما در دنبال شد. اما شما خواهید دید، به عنوان آزمون خود را دریافت کنید از TFS، که ما دیگر بحث از شرایط خود استفاده متفاوت از حافظه نیز هست. اما پشته و توده می شده اند پاسخ آسان به رفتن با. هر گونه سؤال؟ من به شما راب به من بدهید. ROB BOWDEN: بنابراین مشکل 4. این یکی که در آن شما را مجبور به پر کردن است در تعداد بایت از همه این انواع مختلف استفاده می شود. پس اولین چیزی که ما می بینیم. فرض کنید یک معماری 32 بیتی، مثل این دستگاه CS50. بنابراین یکی از چیزهایی که اساسی در مورد معماری 32 بیتی، که به ما می گوید دقیقا چقدر بزرگ یک اشاره گر است که در معماری باشد. بنابراین بلافاصله، ما می دانیم که هر اشاره گر نوع 32 بیت و یا 4 بایت است. بنابراین به دنبال در این جدول، گره * نوع اشاره گر است. که برای رفتن به 4 بایت. گره ساختار *، که به معنای واقعی کلمه یکسان به ستاره گره. و به طوری که برای رفتن به 4 بایت. رشته، پس از آن مانند به نظر نمی آید اشاره گر است، اما typedef، رشته فقط یک کاراکتر *، که یک نوع اشاره گر است. به طوری که برای رفتن به 4 بایت. بنابراین این سه همه 4 بایت. در حال حاضر، گره و دانش آموز کمی پیچیده تر است. بنابراین به دنبال گره و دانش آموز، ما می بینیم گره به عنوان یک عدد صحیح و یک اشاره گر. و دانش آموز دو اشاره گر است در داخل آن است. بنابراین حداقل در مورد ما در اینجا، راه که ما تا پایان محاسبه اندازه این ساختار است فقط اضافه کردن تا همه چیز که در داخل ساختار است. بنابراین برای گره، ما باید یک عدد صحیح، که 4 بایت است. ما یک اشاره گر است که 4 بایت. و به این ترتیب یک گره در جریان است را به 8 بایت. و به همین ترتیب برای دانش آموزان، ما یک اشاره گر که 4 بایت و دیگری اشاره گر که 4 بایت. به طوری که رفتن برای پایان دادن به تا که 8 بایت. بنابراین گره و دانش آموز 8 بایت می باشد. و این سه همه 4 بایت. سوالات در آن؟ بله. یک مدعو: آیا آن 64 بیتی بود معماری، خواهد بود که دو برابر همه آنها را؟ ROB BOWDEN: آن را نمی خواهد دو برابر همه آنها. بنابراین معماری 64 بیتی، از آن، دوباره، تغییراتی که چیزی اساسی است که اشاره گر در حال حاضر 64 بیت. آره. بنابراین یک اشاره گر 8 بایت است. پس از این که 4 بایت بود رفتن به 8 بایت. یک دانش آموز، که دو اشاره گر بود، خوب، اکنون آن را به است 8 بایت، 8 بایت. این اتفاق باعث شود که 16 بایت. اما یک گره است که هنوز هم 4 بایت. پس این اشاره گر است که به 8 بایت. این 4 بایت است. بنابراین یک گره فقط رفتن به 12 بایت. هر گونه سؤال دیگر می کنید؟ بنابراین یک بعدی، این کدهای وضعیت HTTP. و شما تا به حال برای توصیف شرایط که تحت آن این قدرت به شما بازگشت. یک مشکل که من برخی از دانشجویان شنیده است که آنها تلاش کردند تا خطا در پایان مشتری باشد. بنابراین، هنگامی که ما سعی می کنیم به درخواست به سرور، چیزی می رود اشتباه در پایان ما. اما به طور کلی، این کد ها که توسط سرور بازگشت. بنابراین ما می خواهیم به شکل چه خبر است درست و غلط بر روی سرور است که باعث می شود این چیز ها می شود برگشت. پس چرا ممکن است بازده سرور کد وضعیت 200؟ هر گونه افکار؟ آره. بنابراین چیزی در مورد موفقیت درخواست از طریق رفت. و آنها قادر به بازگشت هستید هر آنچه شما خواسته. پس همه چیز خوب بود. چه در مورد 302 در بر داشت؟ آره. یک مدعو: سرور به دنبال برای آنچه که مورد درخواست شما. اما می تواند از آن را پیدا کند. بنابراین یک خطا وجود دارد. ROB BOWDEN: بنابراین سرور به دنبال آنچه شما می خواهید. بنابراین فقط به دنبال در اینجا، 302 یافت، آن را قادر به پیدا کردن آن بود. یک مدعو: من متاسفم. یافت بدان معنی است که آنها پیدا کردن آن. متأسفم. ROB BOWDEN: پس 302 در بر داشت. سرور قادر به پیدا کردن است آنچه شما می خواهید. رسید اما آن را نمایش نیست؟ ROB BOWDEN: تفاوت بین این 302 و 200 است که آن را می داند که آنچه شما می خواهید. اما این دقیقا همان جایی که نمی شما می خواستم بپرسم. بنابراین 302 تغییر مسیر معمولی است. پس درخواست یک صفحه شما. این می داند، آه، من می خواهم به شما بازگشت این. اما این در URL های مختلف. پس سلام، شما در واقع این می خواهم. DAVID J. مالان: این قطعه که گفت است که ما به شما بچه ها تغییر مسیر تابع که تابع ضربه سر استفاده می شود که، به نوبه خود، چاپ شده از محل، روده بزرگ، و پس از آن URL را که شما می خواهید به رد کاربر. حتی اگر شما به 302 نمی بینم به صراحت وجود دارد، که آنچه را که PHP است را به طرزی جادویی به عنوان هدر وارد گفت: دقیقا همان چیزی راب گفت: وجود دارد - یافت. اما به جای این صفحه بروید. ROB BOWDEN: OK. بنابراین آنچه در مورد 403 ممنوع است؟ یک مدعو: من فکر می کنم که سرور است که اساسا و گفت که به مشتری می توانید از صفحه اصلی دسترسی پیدا کنید. ROB BOWDEN: بله. خب، پاسخ معمول ما انتظار چیزی شبیه، فایل است مناسب chmodded نیست. که احتمالا تحت چه شرایطی شما آنها را دیدم. اما یک دلیل وجود دارد که مشتری می تواند در گسل در اینجا باشد. در واقع کد وضعیت دیگری وجود دارد - 401. بنابراین این خیلی مشابه هستند. 401 غیر مجاز است. و 403 ممنوع است. و به این ترتیب غیر مجاز شما به طور انحصاری اگر شما وارد سایت نشده اید اما ورود به سیستم ممکن است به معنای که شما مجاز. اما اگر شما در حال حاضر به سیستم وارد شده و شما هنوز هم اجازه دسترسی ندارید، شما همچنین می توانید ممنوع است. بنابراین اگر شما به سیستم وارد شده و لازم نیست اجازه ممنوع است چیزی است که شما می توانید دریافت کنید. DAVID J. مالان و مکانیزم های که این مشکلات معمولا حل بر روی سرور است از طریق آنچه دستور؟ سطح دسترسی، اگر آن، در واقع، یک مجوز صدور در فایل یا دایرکتوری. ROB BOWDEN: پس از 404 یافت نشد. آره. بنابراین بر خلاف 302 که در آن دقیقا نمی که در آن شما می گی اما می داند چه شما می خواهید، این، آن را فقط هیچ ایده چه چیزی می خواهید. و شما درخواست نمی چیزی معتبر است. 418 من یک قوری هستم و پس از آن 500 سرور داخلی. پس چرا ممکن است شما دریافت کنید که؟ بنابراین segfault - من در واقع از درجه بندی را نمی دانم استاندارد برای این. اما اگر کد PHP خود را چیزی به حال اشتباه در آن، در تئوری، می تواند در واقع segfault، که در این صورت، این 500 سرور داخلی خطا، چیزی اشتباه سرور شما می باشد پیکربندی. و یا یک خطای نحوی وجود دارد در کد PHP خود را. و یا چیزی بد در جریان است. DAVID J. مالان: ما دیدن segfault در پاسخ به چند نفر است. و از لحاظ فنی، می تواند رخ دهد. اما این امر می تواند PHP، برنامه نوشته شده توسط افراد دیگر، در واقع segfaulted، که تنها کسانی که اگر مردم پیچ و کد حشره دار در نوشت مترجم خود را PHP خود را segfault. بنابراین حتی اگر 500 است مانند یک segfault در روح و روان، آن را تقریبا همیشه نتیجه یک مسئله فایل پیکربندی با وب سرور شما و یا، به عنوان راب گفت: یک خطای نحوی، مثل شما یک نقل قول نزدیک نیست. یا شما یک نقطه و ویرگول از دست رفته جایی. رسید بنابراین برای pset شاتل، I فکر می کنم زمانی که من این کار را کرد یک بار من کلیک مرورگر، اما هیچ چیز آمد، آنچه که آنها صفحه سفید می شود. اما به دلیل کد بود. من فکر می کنم که جاوا اسکریپت بود، درست است؟ ROB BOWDEN: آره. یک مدعو: آیا این خطا هنوز هم می آیند تا؟ ROB BOWDEN: پس می خواهی بدست نمی شده است این خطا به خاطر همه چیز از دیدگاه وب سرور کاملا خوب بود. اما شما درخواست میکنید. شما درخواست shuttle.js و service.js. و آن را قادر به موفقیت بازگشت بود به همه آن چیزهایی که شما - 200. OK. این تنها زمانی که مرورگر شما سعی در تفسیر کد جاوا اسکریپت است که آن را مانند، صبر کنید، این است که خطا در جاوا اسکریپت معتبر است. هر گونه سؤال دیگر؟ بسیار خوب. DAVID J. مالان: بنابراین بعدی تا عدد 11 بود. و 11 ترسناک ترین بود برای بسیاری از مردم است. بنابراین مهم ترین نکته در اینجا این بود که این بود، در واقع، در مورد لیست مضاعف مرتبط است. اما این همان است که در سال گذشته نیست مشکل لیست مضاعف مرتبط است، که به شما اخطار نمی دهد که لیست می تواند، در واقع، جستجوی ساده و عادی باشد. بنابراین این واقعیت است که در لیست نامرتب بود و این واقعیت است که آن کلمه بود زیر خط دار برای انتقال وجود دارد به معنای شد که این در واقع ساده از آنچه در غیر این صورت می شده اند مشکل بیشتر به چالش کشیدن و یکی دیگر. بنابراین یک اشتباه معمول در اینجا بود تا قرار داده اند راه حل سال گذشته در یکی از خود را پیجر و پس از آن فقط کورکورانه کپی کنید که را به عنوان پاسخ، که حق است پاسخ به یک سوال متفاوت است در روح مشابه. اما پیچیدگی های خاص در اینجا به شرح زیر بود. به همین دلیل یک، ما یک گره اعلام کرد و تعریف شده به روش معمول در اینجا. سپس ما تعریف لیست از یک جهانی اشاره گر مقدار دهی اولیه تهی. سپس ظاهرا، این دو تابع وجود دارد ما نمونه های اولیه برای اینجا، درج و حذف. و سپس ما به برخی از نمونه کد در اینجا انجام یک دسته از اضافه. و پس از آن که از شما برای تکمیل اجرای قرار دادن زیر در چنین یک راه است که آن را درج نفر به لیست در زمان ثابت، همچنین تاکید، حتی اگر در حال حاضر حاضر. بنابراین زیبایی که قادر به وارد کردن در زمان ثابت است که آن را بیان می که شما مجبور به قرار دادن گره جدید که در آن؟ به جلو. پس آن را از بین می برد، خوشبختانه، حداقل یکی از موارد استفاده می شود که نیاز به خطوط و حتی بیشتر از کد، مانند آن را انجام داد در سال گذشته و حتی در کلاس هنگامی که ما از طریق این نوع از چیزی صحبت کردیم با انسان ها و با برخی از شبه کد کلامی. پس در راه حل در اینجا، اجازه دهید به جست و خیز بیش از به که فقط به یک در ویژوال صفحه نمایش. توجه داشته باشید که ما انجام می دهیم به شرح زیر است. و همچنین توجه به ساده سازی های دیگر این بود که حتی اگر آن را در حال حاضر در حال حاضر، بنابراین این بدان معنی است حتی اگر تعداد در حال حاضر وجود دارد، شما می توانید فقط کورکورانه دیگری وارد کپی از آن. و این، بیش از حد، به معنای شد ساده سازی، به طوری که شما می توانید تمرکز بر روی، واقعا، برخی از تر بخش فکری جالب و نه فقط برخی از خطا های اضافی چک با توجه به زمان محدود است. بنابراین در این راه حل نمونه، ما اختصاص یک اشاره گر بر روی دست چپ سمت در اینجا به یک گره. در حال حاضر، متوجه است که اشاره گر، به عنوان راب گفت: فقط 32 بیت است. و آن در واقع شامل نمی شود آدرس تا زمانی که شما آدرس اختصاص دهید. و ما انجام این کار در دست راست سمت طریق malloc. مانند یک شهروند خوب را چک می کنیم malloc است، در واقع، تهی، به طوری که ما به طور تصادفی ایجاد نمی کند segfault در اینجا. و هر زمان به شما استفاده از malloc در زندگی، شما باید برای چک کردن تهی، تا مبادا شما یک اشکال ظریف. سپس ما مقداردهی اولیه که تهی شده توسط اختصاص n و قبلی و بعدی. و در این مورد در اینجا، من مقدار دهی اولیه قبلی به تهی، چرا که این جدید گره در حال رفتن به جدید آغاز از لیست من. بنابراین برای رفتن به وجود دارد هیچ چیز قبل از آن. و من می خواهم به اصل اضافه فهرست موجود به گره جدید تنظیم بعدی برابر خود را فهرست می کنیم. اما من فقط هنوز انجام نشده است. بنابراین اگر لیست خود را در حال حاضر وجود داشته است، و حداقل یک گره وجود دارد در حال حاضر در محل، در صورتی که این لیست است در اینجا و من درج گره جدید در اینجا، من باید مطمئن شوید که گره سابق من اشاره به عقب به گره جدید من، دلیل این است که، دوباره، لیست مضاعف مرتبط است. بنابراین ما انجام بررسی سلامت عقل. اگر لیست تهی نیست، اگر در حال حاضر وجود دارد یک یا چند گره وجود دارد، پس اضافه کردن که پشت مرجع پس به صحبت می کنند. و پس از آن آخرین چیزی است که باید برای انجام این کار است که در واقع بروز رسانی جهانی لیست متغیر خود را به نقطه به آن گره جدید است. آره. رسید در اشاره گر فلش [نامفهوم] برابر تهی، انجام می دهد که مقابله با لیست به دلیل لیست تهی است؟ DAVID J. مالان: نه. این است که به سادگی من که فعالانه مراقب باشید، در صورتی که این من است فهرست اصلی با شاید برخی از گره در اینجا و من قرار دادن من گره جدید در اینجا، رفتن وجود دارد به چیزی بیش از اینجا. و من می خواهم را به تصرف است که ایده با تنظیم های قبلی به تهی در گره جدید. و احتمالا، اگر کد من درست است و هیچ راه دیگری برای وارد کردن وجود دارد گره های دیگر از این تابع، احتمالا، حتی اگر فهرست در حال حاضر دارای یک یا چند گره در آن است، احتمالا لیست، گره اول، باید اشاره گر های قبلی از تهی است. رسید و فقط یک پیگیری. دلیل شما قرار داده اشاره گر برابر بعدی لیست شما در حال ساخت اشاره گر قبل از لیست که در آن اشاره به بعد، من حدس می زنم - I don't - فقط لیست؟ DAVID J. مالان: دقیقا. و بنابراین، اجازه دهید در واقع دو مورد در نظر در اینجا در واقع، حتی اگر منظور ما آنها را در نظر نمی باشد. کاملا همان کد. اما در سطح بالا، در صورتی که این نشان دهنده لیست و 32 بیتی است اشاره گر، ساده ترین سناریو است که این تهی به طور پیش فرض است. حالا فرض کنید که من می خواهم برای قرار دادن تعداد 50 عدد اول است. من می خواهم به جلو بروید و تخصیص یک گره، است که رفتن به شامل سه رشته - نفر، قبلی و بعدی. من قصد دارم برای قرار دادن تعداد 50 در اینجا، چرا که این نفر خواهد بود. این آینده خواهد بود. و این قبل خواهد بود. و به این ترتیب آنچه را می توانم در این مورد انجام دهید؟ خوب، من فقط انجام داده ام خط 1 در اینجا. اشاره گر ازت می شود N. من پس از آن گفت: قبل باید تهی دریافت کنید. پس این است که رفتن به تهی باشد. سپس من قصد دارم برای گفتن بعدی رفتن به فهرست دریافت کنید. و این فقط کار می کند خوب. این تهی است. و به این ترتیب من گفت، گره جدید در آینده درست باید چه که هست. به طوری که قرار می دهد تهی دیگر وجود دارد. و سپس آخرین چیزی که من در حال بررسی است. اگر لیست به تهی برابر نیست، اما آن را به تهی برابر است، بنابراین ما به جست و خیز که در دسترس نباشد. و به این ترتیب تمام من بعدی لیست می شود اشاره گر که pictorially در نتایج یک عکس که می خواهم. به طوری که یک سناریو است. و یکی که شما را در مورد درخواست قرار گرفت به طور خاص وضعیت مثل این است، که در آن ما در حال حاضر یک لیست یک گره. و اگر من را به بالا و در اصلی بیانیه مشکل، در قسمت بعدی به وارد کردن مثلا 34 است، فقط برای به خاطر بحث. بنابراین من قصد دارم فقط به راحتی رسم است که بیش از اینجا. من فقط malloced ام. بیایید فرض کنیم من دارم برای تهی. در حال حاضر، من قصد دارم به مقداردهی اولیه N به 34. و این نفر خواهد بود. این آینده خواهد بود. و این قبل خواهد بود. اجازه دهید مطمئن شوید من نیست این عقب. قبلی می آید برای اولین بار در تعریف. اجازه بدهید من این را حل کنند. این قبلی است. این آینده. حتی اگر این یکسان هستند، اجازه دهید آن را سازگار نگه دارید. قبلی. این آینده. بنابراین من فقط malloced ام توجه داشته باشید من، بررسی می شود برای تهی، 34 به گره اختصاص داده است. قبلی تهی می شود. به طوری که به من می دهد که. بعدی می شود لیست. بنابراین این فهرست است. بنابراین این در حال حاضر همان است که طراحی این فلش، به طوری که آنها به یک نقطه در همان. و پس از آن من دارم اگر لیست است به تهی برابر نیست. و آن را در این زمان نیست. سپس من قصد دارم به کارهای می شود قبلی اشاره گر. بنابراین قبل می شود PTR. بنابراین این اثر از قرار دادن یک فلش گرافیکی در اینجا. و این کم کم مواج، خطوط. و سپس، در نهایت، من به روز رسانی لیست به نقطه را به اشاره گر. بنابراین در حال حاضر این اشاره به این پسر. و در حال حاضر، اجازه دهید سریع انجام ورود به سلامت عقل. در اینجا لیست است، که متغیر جهانی است. اولین گره است، در واقع، 34، به دلیل من دنبال می کنم که فلش. و این درست به این دلیل من می خواهم قرار دادن در ابتدای فهرست تمام گره های جدید. درست در کنار او به من به این پسر می شود. اگر من می خواهم نگه دارید، من ضربه بعدی تهی است. بنابراین هیچ لیستی وجود دارد. اگر من ضربه قبلی، من به جایی که من انتظار می رود. بنابراین هنوز هم وجود دارد چند اشاره گر، بدیهی است، برای دستکاری. اما این واقعیت که به شما گفته شد به انجام این در زمان ثابت معنی است که شما فقط یک تعداد متناهی از همه چیز شما مجاز به انجام. و چیزی که این تعداد است؟ این ممکن است یک گام. این ممکن است دو. این ممکن است به 1000 گام. اما آن را محدود، که به معنی شما می توانید نیست اند هر نوع حلقه در رفتن در اینجا، بدون بازگشت، بدون حلقه. این فقط به خطوط سخت رمزی از کد که ما در این نمونه است. بنابراین مشکل بعدی 12 ما را به خواست تکمیل اجرای حذف در زیر به گونه ای که آن را حذف n از لیست را در زمان خطی. بنابراین شما باید کمی بیشتر تکان دادن اتاق در حال حاضر. شما ممکن است که نفر فرض کنیم، در صورت وجود در این فهرست، حضور خواهد داشت بیش از یک بار. و بیش از حد که به معنای مبتنی بر آزمون فرض ساده است، بنابراین که اگر شما پیدا کردن شماره 50 در جایی در این لیست، شما نیز نمی باید در مورد ادامه به نگرانی تکرار، به دنبال هر ممکن کپی از 50، که فقط می محول به برخی از minutia در زمان محدود است. بنابراین با حذف، این یکی قطعا بود به چالش کشیدن بیشتر و بیشتر کد برای نوشتن. اما در نگاه اول، رک و پوست کنده، آن ممکن است نگاه چیزی قریب به اتفاق و مانند هیچ راهی برای شما می تواند داشته باشد وجود دارد آمد تا با در مسابقه. اما اگر ما در مراحل فردی تمرکز، امیدوارم، آن را به طور ناگهانی خواهد شد حمله به شما است که هر یک از این فرد مراحل را حس می کند آشکار در نگاه به گذشته. بنابراین اجازه دهید نگاهی به. پس اول، ما مقداردهی اولیه اشاره گر به خود را فهرست می کنیم. از آنجا که من می خواهم زمان خطی، که به معنی من قصد دارم به برخی از حلقه. و یک روش مشترک به تکرار بیش از گره در یک ساختار فهرست و یا هر نوع ساختار تکرار شونده است را به یک اشاره گر به جلو داده ها ساختار و پس از آن فقط شروع به به روز رسانی آن و راه رفتن راه خود را از طریق ساختار داده ها. من می خواهم به انجام این کار دقیقا همان است که. در حالی که اشاره گر، متغیر موقت من، است به تهی برابر نیست، اجازه دهید پیش بروید و تیک بزنید. آیا من خوش شانس کنید؟ آیا درست است نفر را در گره من در حال حاضر نگاه به برابر تعداد من به دنبال؟ و اگر چنین است، اجازه دهید کاری انجام دهد. در حال حاضر، این مقررات اگر شرایط احاطه کامل کدهای زیر. این تنها چیزی که من در مورد مراقبت است - پیدا کردن یک شماره در سوال. بنابراین هیچ چیز دیگری، که ساده وجود دارد همه چیز مفهومی کمی. اما در حال حاضر، من متوجه شدم، و شما ممکن است تنها این بعد از فکر کردن متوجه آن را از طریق یک بیت، وجود دارد در واقع دو مورد در اینجا. یکی این است که در آن گره است در ابتدای فهرست است، که یک کمی آزار دهنده است، چرا که مورد خاص، چرا که شما باید برای برخورد با این چیزی که تنها غیر عادی است. هر جای دیگر در لیست، آن هم همانطور است. یک گره قبلی و بعدی وجود دارد گره، گره های قبلی، گره بعدی. اما این پسر خاص کمی است اگر او در آغاز راه است. بنابراین اگر اشاره گر برابر با لیست خود را، تا اگر من در آغاز هستم لیست و I N پیدا کرده اند، من نیاز به انجام چند چیز. یکی، من نیاز به تغییر لیست اشاره به زمینه های بعدی، 50. بنابراین فرض کنید که من در تلاش حذف 34. پس این مرد را کردم برای رفتن دور در یک لحظه. من می خواهم بگویم، لیست می شود اشاره گر بعدی. خوب، این اشاره گر است. بعدی است با اشاره به بیش از اینجا. بنابراین این در حال تغییر است این فلش سمت راست در حال حاضر به نقطه را به این پسر اینجا. در حال حاضر، به یاد داشته باشید، ما یک متغیر موقت است. بنابراین ما هر گره اند یتیم نیست، چون من هم این پسر در داشته باشد من اجرای حذف. بنابراین در حال حاضر، اگر لیست خود است تهی نیست، من نیاز به تعمیر چیزی کم است. من نیاز به اطمینان حاصل کنید که این پیکان به حال را، است که قبلا اشاره 50-34، این کردم تا به دور، چرا که اگر من در تلاش برای خلاص شدن از شر از 34، 50 بهتر است هر حفظ نیست نوع عقب اشاره به آن را به عنوان فلش پیشنهاد شده است. پس من فقط این خط. بنابراین پس از آن که من انجام داده ام. این پرونده است که در واقع بسیار آسان است. قطع کردن سر از لیست نسبتا سر راست است. متاسفانه، این وجود دارد بلوک آزار دهنده دیگری. بنابراین در حال حاضر، من به در نظر گرفتن مورد که در آن چیزی است که در وسط وجود دارد. اما آن را بیش از حد وحشتناک نیست، به جز برای سینتکس شبیه به این. پس اگر من در آغاز نه لیست، من در جایی در وسط هستم. و این خط را در اینجا می گوید، شروع در هر گره هستی. برو به میدان بعدی گره قبل و نکته ای که در اشاره گر. اجازه دهید این کار را انجام pictorially. که در گرفتن پیچیده است. بنابراین اگر من یک زمینه قبلی در اینجا - اجازه دهید این کار را - زمینه های بعدی در اینجا. من قصد دارم به ساده اشاره گر من نه از رسم یک دسته کامل از همه چیز به عقب و جلو متقاطع هر یک از دیگر. و در حال حاضر، اجازه دهید فقط می گویند این است 1، 2، 3 به خاطر بحث و گفتگو، حتی هر چند که به خط تا با مشکل در سوال. بنابراین در اینجا لیست پیوندی من است. من در تلاش برای حذف دو در این نسخه خاص از داستان. بنابراین من اشاره گر به روز شده ام شود با اشاره به این پسر. بنابراین این PTR است. او با اشاره به اینجا. این لیست است که وجود دارد در سطح جهانی مانند قبل. و او با اشاره در اینجا بدون توجه به آنچه. و در حال حاضر، من در تلاش برای حذف دو. بنابراین اگر اشاره گر اشاره در اینجا، من هستم به دنبال، ظاهرا، اشاره گر های قبلی، که من قرار می دهد 1. من پس از رفتن به می گویند که بعدی درست است که من به ارمغان می آورد بیش از این جعبه اینجا است، رفتن به اشاره گر برابر است. بنابراین اگر این اشاره گر، این بعدی است. این بدان معنی است که این فلش نیاز به نقطه را به این پسر. پس چه که خط از کد فقط انجام شده است کمی از این. و در حال حاضر، این است که به دنبال مانند گام به گام در مسیر درست. ما در اصل می خواهم به صدای تیک تیک 2 از وسط 1 و 3. پس از آن را حس می کند که ما به خواهید مسیر این اشاره گر در اطراف آن. بنابراین این خط بعدی این است که چک کردن اگر اشاره گر بعدی تهی نیست، وجود دارد در واقع کسی که در سمت راست 2، این بدان معناست که ما نیز باید انجام دهید کمی صدای تیک تیک در اینجا. بنابراین من در حال حاضر باید به دنبال این اشاره گر و به روز رسانی اشاره گر قبلی در این مرد برای انجام یک کمی از راهحل در اینجا نکته در اینجا. و اکنون، در دید این خوب است. این کمی کثیف در آن وجود دارد هیچ کس با اشاره به 2 دیگر. 2 است با اشاره به سمت چپ. و 2 است با اشاره به سمت راست. اما او می تواند هر کاری که می خواهد انجام دهد، به دلیل او در مورد گرفتن آزاد شده است. و مهم نیست که چه این ارزش ها می باشد دیگر. آنچه که مهم است این است که باقی مانده بچه ها مسیر یابی بالا و در زیر او را در حال حاضر. و در واقع، این چیزی است که ما بعد. ما اشاره گر آزاد، که به معنی ما به سیستم عامل، قابلی ندارد به اصلاح این. و پس از آن در نهایت، بازگشت ما. دیگری به طور ضمنی، اگر ما اند بازگشت نشده است، ما باید به دنبال حفظ. پس اشاره گر برابر است با اشاره گر بعد فقط به معنی حرکت این پسر اینجا. حرکت این پسر اینجا. حرکت این پسر در اینجا اگر، در واقع، ما از شماره پیدا کند ما به دنبال نشده است. پس رک و پوست کنده، آن را به طور کامل به نظر می رسد قریب به اتفاق، من فکر می کنم، در ابتدا نگاه، به خصوص اگر شما تلاش با این در طول مسابقه پس از آن را مشاهده کنید چیزی شبیه به این. و شما خود را در پشت پت. خب، هیچ راهی برای من می تواند داشته باشد که این در مسابقه. اما می خواهم بگویم، شما می توانید اگر شما شکستن آن را به این فرد موارد و فقط از طریق آن راه رفتن دقت، البته، مسلما، تحت شرایط پر تنش باشد. خوشبختانه، تصویر ساخته شده همه چیز را شادتر. شما می توانید این را در رسم هر تعداد از راه. شما لازم نیست برای انجام متقاطع چیزی که در اینجا. شما می توانید آن را با مستقیم انجام خطوط شبیه به این. اما جان کلام این مشکل، در به طور کلی، این بود که متوجه است که تصویر در پایان باید کمی نگاه چیزی شبیه به این، به دلیل زمان ثابت ضمنی که شما در حفظ و متراکم و متراکم و متراکم گره های جدید در آغاز از لیست. هر گونه سؤال؟ شاید به چالش کشیدن بیشتر قطعا سوالات برنامه نویسی. رسید بنابراین لیست مشابه است سر در نمونه های قبلی. DAVID J. مالان: دقیقا، دقیقا. فقط نام های مختلف برای یک متغیر جهانی است. در سراسر جهان چه؟ ROB BOWDEN: OK. پس این یکی که در آن شما است مجبور به نوشتن پاراگراف. برخی از افراد مقاله نوشت برای این سوال. اما شما فقط نیاز به استفاده از این شش نظر برای توصیف چیزی است که وقتی شما سعی می کنید برای تماس با facebook.com. بنابراین من فقط از طریق فرایند بحث با استفاده از تمام این شرایط. بنابراین در مرورگر ما، ما نوع facebook.com و آمار را وارد کنید. بنابراین مرورگر ما رفتن برای ساخت HTTP درخواست کنید که آن را به رفتن به ارسال از طریق برخی از مراحل به فیس بوک برای فیس بوک برای پاسخ دادن به ما با HTML از صفحه آن است. پس چه روند است که درخواست HTTP در واقع به فیس بوک می شود؟ پس اول، ما نیاز به ترجمه Facebook.com. پس فقط با توجه به نام Facebook.com، که در آن در واقع به درخواست HTTP نیاز به رفتن؟ بنابراین ما نیاز به ترجمه Facebook.com به یک آدرس IP، که منحصر به فرد شناسایی ماشین چیزی است که ما در واقع می خواهید برای ارسال این درخواست به. لپ تاپ شما دارای یک آدرس IP. هر چیزی متصل به اینترنت یک آدرس IP. بنابراین DNS، سیستم نام دامنه، است که چه خبر است که مسئولیت رسیدگی به ترجمه از facebook.com به یک آدرس IP که در واقع شما می خواهید برای تماس با. بنابراین تماس با ما سرورهای DNS و بگو، چه facebook.com است؟ این گزارش می گوید، آه، آن را به آدرس IP 190.212 است چیزی، چیزی، چیزی. بسیار خوب. در حال حاضر، من می دانم چه ماشین من می خواهم به تماس بگیرید. بنابراین پس از آن شما درخواست HTTP خود را ارسال به آن ماشین است. پس چگونه آن را به دستگاه می کنید؟ خوب، درخواست می رود از روتر به روتر تندرست. به یاد داشته باشید به عنوان مثال در کلاس، که در آن ما در واقع شاهد این مسیر که به بسته ها در زمان زمانی که ما سعی برای برقراری ارتباط. ما شاهد آن بر فراز اقیانوس اطلس پرش به اقیانوس در یک نقطه و یا هر چیز دیگری. بنابراین پورت مدت گذشته است. پس این است که در حال حاضر بر روی کامپیوتر شما. شما می توانید چیز های متعدد در حال حاضر برقراری ارتباط با اینترنت می باشد. بنابراین من می تواند در حال اجرا، می گویند، اسکایپ. من ممکن است یک مرورگر وب باز داشته باشد. من ممکن است چیزی که torrenting فایل. بنابراین همه این چیزها ارتباط با اینترنت در برخی از راه. بنابراین، هنگامی که کامپیوتر شما برخی از داده ها را دریافت از اینترنت، چگونه آن را می دانید چه برنامه در واقع می خواهد داده؟ چگونه آن را که آیا این خاص می دانند داده ها برای به معنای torrenting نرم افزار به عنوان مخالف به مرورگر وب؟ بنابراین این منظور از پورت در این است که همه این برنامه های کاربردی بر روی کامپیوتر خود ادعا کرد یک پورت. بنابراین مرورگر وب خود می گوید، با سلام، من گوش دادن به پورت 1000. و برنامه torrenting خود را می گوید، من گوش دادن به پورت 3000. و اسکایپ می گوید، من با استفاده از پورت 4000. بنابراین، هنگامی که شما برخی از داده ها را دریافت کنید که به آن تعلق به یکی از این برنامه های کاربردی، داده ها است که با پورت مشخص شده آن را در واقع باید به همراه ارسال می شود. پس این می گوید، آه، من تعلق به پورت 1000. من می دانم که پس از آن من نیاز به جلو در این به همراه مرورگر وب است. بنابراین به این دلیل آن را مربوط به اینجا این است که وب سرور تمایل به گوش دادن به پورت 80. بنابراین، هنگامی که Facebook.com تماس با من، من هستم برقراری ارتباط با برخی از دستگاه. اما من نیاز به گفتن نیست که پورت آن ماشین من می خواهم برای برقراری ارتباط با. و سرویس دهنده های وب تمایل دارند که گوش دادن روی پورت 80. اگر آنها می خواستند، آنها می توانند آن را تا پس از آن به عنوان بر روی پورت 7000 لیست. و پس از آن در مرورگر وب، من می توانم نوع دستی Facebook.com: 7000 تا ارسال درخواست به پورت 7000 وب سرور فیس بوک. DAVID J. مالان: و در این مورد، حتی اگر ما نیاز نیست که مردم ذکر این، در این مورد، چه پورت به درخواست در واقع برای رفتن؟ دوباره سعی کنید. دقیقا. به دنبال نه برای آن است، اما ظرافت که هیچ کدام آخرین وجود دارد. ROB BOWDEN: پس HTTPS، از آن گوش دادن به طور خاص برای رمزگذاری شده، آن را بر روی پورت 4430 است. رسید و ایمیل می 25، درست است؟ DAVID J. مالان: عازم ناحیه دور دست ایمیل، 25، بله. ROB BOWDEN: من حتی بیشتر می دانند - همه آنهایی که کمتر تمایل به برای همه چیز محفوظ می باشد. من فکر می کنم همه چیز را تحت 1024 سایت محفوظ است. یک مدعو: چرا به شما می گویند 3 تعداد اشتباه بود؟ ROB BOWDEN: از آنجا که در یک آدرس IP، این چهار گروه از اعداد وجود دارد. و آنها از 0 تا 255 است. بنابراین 192.168.2.1 مشترک است شبکه محلی آدرس IP. توجه داشته باشید همه کسانی که کمتر از 255 می باشد. بنابراین، هنگامی که من با 300 شروع شده، که نمی تواند احتمالا دارند یکی از اعداد بوده است. DAVID J. مالان: اما این کلیپ احمقانه از - آن CSI، جایی که آنها تا به حال بوده است تعداد که بیش از حد بزرگ بود برای آدرس IP است. ROB BOWDEN: هر گونه سوال در مورد این؟ یک بعدی، تغییر تا کامل در موضوع، اما ما باید این آرایه PHP برای خانه ها در چهار. و ما یک لیست نامرتب. و ما می خواهیم برای چاپ کردن هر آیتم لیست فقط شامل نام خانه. بنابراین ما باید یک حلقه foreach. بنابراین به یاد داشته باشید، نحو حلقه foreach است آرایه به عنوان قلم موجود در آرایه. پس از هر تکرار از حلقه، خانه در رفتن به یکی از را مقادیر داخل آرایه می شود. در تکرار اول، خانه خواهد کابوت خانه باشد. در تکرار دوم، خانه خواهد شد شود پیک خانه و غیره. بنابراین برای هر یک از چهار به عنوان خانه، ما فقط رفتن برای چاپ - شما همچنین می تواند تکرار کرده اند - قلم دوم از اقلام لیست و سپس نام خانه و سپس بستن آیتم از لیست. آکولاد در اینجا اختیاری هستند. و سپس ما نیز در پاسخ به سوال گفت: خود را، به یاد داشته باشید برای بستن لیست نامرتب برچسب. بنابراین ما نیاز به خروج از حالت PHP به منظور انجام این کار. یا ما می توانست تکرار بستن تگ لیست نامرتب. DAVID J. مالان: همچنین خوب است در اینجا به استفاده از یک مدرسه قدیمی برای است حلقه با $ من = 0 0 و با استفاده از شمارش به شکل از طول اشعه. در مجموع خوب است بیش از حد، فقط wordier کم است. رسید بنابراین اگر میخواهید به شد [نامفهوم]، کار می کنید - من فراموش کرده ام آنچه حلقه [نامفهوم] است. آیا شما $ چهار براکت من؟ DAVID J. مالان: دقیقا. بله، دقیقا. ROB BOWDEN: دیگر چه؟ DAVID J. مالان: بسیار خوب. تجارت آف. پس بود مجموعه ای از پاسخ وجود دارد ممکن است برای هر یک از این. ما واقعا فقط به دنبال شدند چیزی قانع کننده برای حرکت صعودی و حرکت نزولی. و تعداد 16 پرسید، اعتبار سنجی کاربران ورودی های سمت سرویس گیرنده، به عنوان با جاوا اسکریپت، به جای سمت سرور، به عنوان با PHP. پس چه حرکت صعودی از این انجام سمت سرویس گیرنده؟ خوب، یکی از چیزهایی که ما پیشنهاد است که شما زمان تاخیر را کاهش دهد، به خاطر شما لازم نیست به زحمت از تماس با سرور، که ممکن است چند را میلی ثانیه و یا حتی چند ثانیه با اجتناب از که و فقط اعتبار سنجی کاربران ورودی های سمت سرویس گیرنده توسط راه اندازی کنترل در ارائه و فقط چک کردن، آیا آنها از نوع چیزی در نام؟ آیا آنها چیزی تایپ در آدرس ایمیل؟ آیا آنها خوابگاه از را انتخاب کنید منوی کشویی؟ شما می توانید آنها بازخورد آنی را با استفاده از کامپیوتر گیگاهرتز و یا هر آنچه که آنها که در واقع در روی میز کار خود را. پس این فقط یک کاربر بهتر تجربه به طور معمول. اما حرکت نزولی از انجام سمت سرویس گیرنده اعتبار سنجی، اگر شما آن را بدون انجام انجام اعتبار سنجی های سمت سرور است که بیشتر از هر کسی از CS50 آینده می داند که شما فقط می توانید ارسال هر گونه اطلاعات شما می خواهید به یک سرور هر تعداد از راه. صادقانه بگویم، در بسیاری از هر مرورگر، شما می توانید کلیک کنید به اطراف در تنظیمات و فقط غیر فعال کردن جاوااسکریپت، که هر، بنابراین، هر شکلی از غیر فعال کردن اعتبار سنجی. اما شما همچنین ممکن است به یاد آورید که حتی من برخی از چیزهایی محرمانه در کلاس با استفاده از انجام شبکه راه دور و در واقع به تظاهر یک مرورگر با ارسال دریافت درخواست ها به سرور. و این قطعا با استفاده از هر جاوا اسکریپت. که فقط به من تایپ کردن دستورات در صفحه کلید. پس در واقع، هر برنامه نویس در به اندازه کافی راحتی با وب و HTTP می تواند هر چه اطلاعات او می خواهد ارسال به یک سرور بدون اعتبار. و اگر سرور خود را نیز چک کردن نیست، به آنها یک نام به من بدهد، است این در واقع یک آدرس ایمیل معتبر، انجام آنها خوابگاه را انتخاب کنید، شما ممکن است در نهایت تا قرار دادن ساختگی یا فقط داده های خالی به پایگاه داده خود را، که احتمالا است که نمی تواند چیز خوبی است اگر شما فرض شد آنجا بود. بنابراین، این واقعیت آزار دهنده است. اما به طور کلی، سمت سرویس گیرنده اعتبار سنجی بزرگ است. اما به این معنی کار دو برابر. اگر چه انجام این کار وجود داشته باشد مختلف وجود دارد کتابخانه ها، کتابخانه های جاوا اسکریپت برای به عنوان مثال، که تا این حد، بسیار کمتر از سردرد. و شما می توانید برخی از کد استفاده مجدد سمت سرور، سمت سرویس گیرنده. اما متوجه آن است که به طور معمول کار اضافی. آره. رسید بنابراین اگر ما فقط گفت: کمتر امن - DAVID J. مالان: [می خندد] اوه. کسانی که همیشه سخت تر آنهایی که به داوری. ROB BOWDEN: که پذیرفته شده است. DAVID J. مالان: چه؟ ROB BOWDEN: من این مشکل را ایجاد کرده است. این امر پذیرفته شده است. DAVID J. مالان: آره. رسید داغ. ROB BOWDEN: اما ما را قبول نمی کند برای یکی از اولین - خوب، چیزی است که ما به دنبال است چیزی شبیه به شما را ندارد برقراری ارتباط با سرور. ما را قبول نمی کند فقط سریع تر است. یک مدعو: چه در مورد آیا صفحه را نیست؟ ROB BOWDEN: بله. این پاسخ پذیرفته شده بود. DAVID J. مالان: هر چیزی که در آن ما احساس به احتمال زیاد بیش از احتمال آن بود که شما می دانست چه چیزی شما گفت، که یک سخت خط را به منظور جلب گاهی اوقات. با استفاده از لیست پیوندی به جای از یک آرایه برای حفظ لیستی از اعداد صحیح طبقه بندی شده اند. بنابراین حرکت صعودی ما اغلب استناد با مرتبط لیست است که انگیزه کل خود معرفی بود شما پویایی دریافت کنید. آنها می توانند رشد می کنند. آنها می توانند به کوچک شدن. بنابراین شما لازم نیست که از طریق hoops پرش در واقع حافظه بیشتر ایجاد با یک آرایه. یا شما لازم نیست که فقط می گویند، با عرض پوزش، کاربر. آرایه پر شده است. رشد پس پویا از لیست. حرکت نزولی، هر چند از لیست های پیوندی؟ یک مدعو: این خطی است. جستجو در لیست پیوندی خطی است به جای آن از آنچه که شما وارد شوید. DAVID J. مالان: دقیقا. جستجو در یک لیست پیوندی خطی است، حتی اگر آن را طبقه بندی شده اند، چرا که شما می توانید تنها این عدد خرده نان دنبال، این اشاره گر، از همان آغاز از لیست به پایان. شما می توانید اهرم نمی دسترسی تصادفی و، در نتیجه، جستجوی دودویی، حتی اگر آن را طبقه بندی شده اند، که شما می توانید با یک آرایه. و همچنین هزینه های دیگری وجود دارد. آره. یک مدعو: حافظه ناکارآمد؟ DAVID J. مالان: آره. خوب، من لزوما می گویند ناکارآمد. اما به شما حافظه بیشتر هزینه، زیرا شما باید 32 بیت برای هر گره برای اشاره گر اضافی، در حداقل برای یک لیست به تنهایی در ارتباط است. در حال حاضر، اگر شما فقط ذخیره سازی اعداد صحیح و شما با اضافه کردن اشاره گر، که در واقع نوع غیر بدیهی. این دو برابر مقدار حافظه. اما در واقعیت، اگر شما در حال ذخیره سازی لیست پیوندی از ساختمانها که ممکن است 8 بایت، 16 بایت، حتی بیشتر از آن، شاید کمتر از هزینه های حاشیه ای. اما این هزینه را با این وجود. بنابراین هر کدام از این که ام خوب به عنوان جنبه های منفی بوده است. 18. با استفاده از PHP به جای C به ارسال یک برنامه خط فرمان. بنابراین در اینجا، آن را اغلب سریع تر به استفاده از زبان هایی مانند PHP یا روبی و پایتون. شما فقط سرعت باز کردن تا یک ویرایشگر متن. شما از بسیاری از توابع بیشتری را در دسترس شما. PHP دارای سینک آشپزخانه از توابع، در حالی که در C، شما بسیار، بسیار کم است. در واقع، بچه ها می دانم که راه سخت که شما جداول هش ندارد. شما لیست شده اند مرتبط است. اگر می خواهید آن، شما را به خود را پیاده سازی آنها. بنابراین یک حرکت صعودی از PHP و یا واقعا زبان تفسیر سرعت است که با آن شما می توانید کد ارسال. اما حرکت نزولی، ما با این دید وقتی که من سرعت شلاق تا misspeller پیاده سازی در سخنرانی با استفاده از PHP، است که با استفاده از یک زبان تفسیر شده معمولا کندتر است. و ما آشکارا با دیدم که افزایش در زمان از 0.3 ثانیه به 3 ثانیه، به دلیل تفسیر که در واقع اتفاق می افتد. صعودی دیگر این بود که شما لازم نیست به کامپایل. پس از آن نیز به سرعت توسعه اتفاقا، دلیل این که شما لازم نیست دو مرحله برای اجرای یک برنامه. شما تنها با یک داشته باشد. و به طوری که بسیار قانع کننده نیز هست. با استفاده از یک پایگاه داده SQL به جای یک فایل CSV به ذخیره داده ها. پایگاه داده بنابراین SQL برای pset7 استفاده می شود. فایل CSV شما چیز زیادی استفاده نمی کند. اما شما آن را به طور غیر مستقیم در pset7 به عنوان استفاده می شود به خوبی با صحبت کردن به یاهو امور مالی. اما CSV است درست مثل یک فایل اکسل اما فوق العاده ساده است، که در آن ستون ها فقط با کاما از هم در داخل demarked یک فایل متنی در غیر این صورت. و با استفاده از یک پایگاه داده SQL است کمی قانع کننده تر. این یک حرکت صعودی است، چرا که شما همه چیز مانند انتخاب و درج و حذف کنید. و شما، احتمالا، شاخص که خروجی زیر و پایگاه داده های دیگر، مانند اوراکل، ساخت را برای شما در حافظه، که به معنی انتخاب شما احتمالا نمی رفتن به بالا خطی به پایین. این در واقع برای رفتن به چیزی مانند جستجوی دودویی یا چیزی در روح مشابه. به طوری که آنها به طور کلی سریع تر است. اما حرکت نزولی این است که آن را فقط کار بیشتری است. این تلاش بیشتر است. شما باید درک پایگاه داده ها. شما باید آن را راه اندازی. شما نیاز به یک سرور برای اجرای که پایگاه داده در. شما نیاز به درک چگونه آن را پیکربندی کنید. بنابراین این ها فقط این انواع تجارت آف. در حالی که یک فایل CSV، شما می توانید ایجاد آن را با نرمافزاری gedit. و شما خوب به آن بروید. هیچ پیچیدگی فراتر از آن وجود دارد. با استفاده از درخت به جای یک جدول هش با زنجیری شدن این جداگانه برای ذخیره فرهنگ لغت از کلمات یادآور از pset5. بنابراین تلاش می کند حرکت صعودی، در تئوری حداقل، چه است؟ زمان ثابت، حداقل اگر شما هش کردن در هر فرد حروف در یک کلمه، مثل شما ممکن است برای pset5 داشته باشد. که ممکن است پنج رشته هش، شش کردند اگر پنج یا شش وجود دارد حروف کلمه را. و این خیلی خوب است. و اگر حد بالا وجود دارد چگونه طولانی کلمات خود ممکن است، که زمان در واقع باقی ثابت است. در حالی که یک جدول هش را با جداگانه زنجیری شدن، این مشکل وجود دارد که با نوع ساختمان داده است که عملکرد الگوریتم های خود را معمولا بستگی دارد تعدادی از چیزهایی در حال حاضر در ساختار داده ها. و این قطعا مورد با زنجیره ای، که به موجب آن چیزهای بیشتری شما را به یک جدول هش، دیگر آن زنجیر بروید، که به معنی در بدترین مورد، چیزی که شما ممکن است به دنبال است تمام راه را در پایان یک از آن زنجیره، که به طور موثر devolves به چیزی خطی. در حال حاضر، در عمل، آن می تواند کاملا است این مورد است که یک جدول هش با زنجیره های سریع تر از یک متناظر است پیاده سازی درخت. اما این به دلایل مختلف، در میان که تلاش می کند با استفاده از تعداد زیادی از کل حافظه است که می تواند، در واقع، همه چیز آرام پایین، دلیل این که شما می کنید خوب نیست مزایای چیزی به نام ذخیره، که در آن چیزهایی که به هم نزدیک هستند در حافظه قابل دسترس است اغلب به سرعت بیشتر. و گاهی اوقات شما می توانید آمد تا با یک تابع هش واقعا خوب است. حتی اگر شما به هدر یک بیت از حافظه، شما ممکن است، در واقع، قادر به پیدا کردن چیزهایی سریع و نه به عنوان بد خطی. بنابراین در کوتاه مدت بود، وجود دارد لزوما با هر یک از این یک یا حتی دو چیز خاصی که ما به دنبال. واقعا هر چیزی متقاعد کننده به عنوان یک حرکت صعودی و نزولی به طور کلی گرفتار چشم ما. ROB BOWDEN: بنابراین برای حرکت صعودی، ما به خودی خود نه شرایط "سریع تر است." شما حال می گویند چیزی در مورد آن. حتی اگر شما گفت: به لحاظ نظری سریع تر، ما می دانستیم که شما نوع درک که این 0، از مجموع 1. و جدول هش، در تئوری، است 0، از مجموع 1 نیست. با اشاره به هر چیزی در مورد زمان اجرا به طور کلی شما نقاط است. اما "سریع تر،" بسیاری از راه حل در هیئت مدیره بزرگ است که تلاش می کند بودند عینی آهسته تر از راه حل های که جداول هش بود. بنابراین سریع تر به خودی خود واقعا درست نیست. DAVID J. مالان: دم د DOM DOM. احتمالا من تنها کسی که متوجه این که چگونه است که به قرار توان تلفظ، درست است؟ ROB BOWDEN: من تا به حال در واقع هیچ ایده. DAVID J. مالان: این ساخته شده حس در سر من. ROB BOWDEN: من برای انجام این کار است. OK. پس این یکی که در آن شما را مجبور به قرعه کشی است نمودار شبیه به شما ممکن در امتحانات گذشته دیده می شود. بنابراین اجازه دهید فقط به این نگاه کنید. پس از گره HTML، ما دو کودکان، سر و بدن است. بنابراین شعبه ما - سر و بدن. سر تا به تگ عنوان. بنابراین ما باید یک عنوان. در حال حاضر، آن چیزی است که بسیاری از مردم فراموش این است که این گره های متن عناصر در این درخت. بنابراین در اینجا ما اتفاق می افتد به آنها را جلب به عنوان بیضی به آنها را متمایز از این انواع گره. اما آگهی همچنین در اینجا ما باید بالا، متوسط، و پایین پایان خواهد رسید تا بودن گره های متن. بنابراین فراموش کردن آن تا حدودی بود یک اشتباه رایج است. بدن دارای سه فرزند - این سه divs. بنابراین دیو، دیو، دیو و سپس متن کودکان گره از آن divs. که تقریبا آن را برای این سوالات. DAVID J. مالان: و این ارزش ندارد، حتی اگر ما در این ساکن نیست جزئیات در آن زمان ما در صرف جاوا اسکریپت، که منظور می کند، در واقع، موضوع از لحاظ فنی. بنابراین اگر سر می آید قبل از بدن در HTML، سپس آن را باید به نظر می رسد سمت چپ بدن در DOM واقعی. که او است، به طور کلی، فقط FYI، چیزی به نام نظم سند، که در آن مهم. و اگر اجرا شد تجزیه کننده، برنامه ای است که بار خوانده شده HTML در ساختمان تا درخت در حافظه، به صداقت، که به طور مستقیم احتمالا آنچه شما انجام هر حال - بالا به پایین، از چپ به راست. ROB BOWDEN: سوالات در آن؟ باید از یک بعد من انجام دهید؟ DAVID J. مالان: مطمئنا. ROB BOWDEN: OK. بنابراین این بافر تاخت و تاز است سوال حمله. نکته اصلی به رسمیت شناختن در اینجا این است، خوب، چگونه ممکن است یک ترفند دشمن این برنامه به اجرای کد های دلخواه؟ بنابراین argv1، خط فرمان اول بحث در این برنامه، که می تواند خودسرانه طولانی است. اما در اینجا ما با استفاده از memcpy برای کپی argv1، که در اینجا نوار است. ما آن را عبور به عنوان آرگومان. و پس از آن به مصرف در نوار نام. بنابراین ما memcpying نوار به این بافر ج. چگونه بسیاری از بایت کپی می کنیم؟ خب با این حال بسیاری بایت نوار به اتفاق می افتد با استفاده از طول که استدلال. اما C تنها 12 بایت گسترده است. بنابراین اگر ما نوع یک آرگومان خط فرمان که بیش از 12 کلمه در ادامه متن ما رفتن به سرریز این بافر خاص است. در حال حاضر، چگونه ممکن است دشمن فریب برنامه به اجرای کد های دلخواه؟ بنابراین به یاد داشته باشید که در اینجا اصلی تماس تولی. و به این ترتیب پس از آن تماس های اصلی غذایی اجازه دهید این قرعه کشی. بنابراین ما باید پشته ما. و اصلی دارای یک قاب پشته در پایین. در برخی موارد، تماس های اصلی غذایی خوب، بلافاصله، تماس های اصلی غذایی و به این ترتیب تولی می شود قاب پشته خود را دارد. در حال حاضر، در برخی از نقطه، تولی است که به بازگشت. و بازده غذ رفت، ما نیاز به دانستن در چه خط از کد در داخل از ما اصلی به منظور شناخت بود که در آن ما باید در اصلی از سر گرفت. ما می توانیم تولی از یک کل تماس بگیرید دسته از مکان های مختلف. چگونه ما می دانیم که در آن به بازگشت؟ خب، ما نیاز به ذخیره است که در جایی. بنابراین در جایی درست در اینجا، ما ذخیره که در آن ما باید به یک بار بازگشت بازده غذایی و این آدرس برگشت است. پس چگونه دشمن ممکن است امکان استفاده این واقعیت این است که این بافر C ذخیره شده است، اجازه دهید می گویند، در اینجا C است. بنابراین ما 12 بایت برای ج کردم. این ج است. و این حلقه پشته تولی است. بنابراین اگر کاربر مخرب وارد تر بایت از 12 و یا آنها را وارد کنید یک دستور خط استدلال که دیگر از 12 حرف، پس از آن ما قصد داریم به سرریز این بافر شده است. ما می توانیم ادامه دهم. و در برخی از نقطه، ما دور به اندازه کافی است که ما شروع به جای نوشتن این آدرس بازگشت. بنابراین زمانی که ما بازنویسی آدرس برگشت، این بدان معنی است که هنگامی که تولی می گرداند، ما در حال بازگشت به هر کجا که کاربر مخرب است گفتن از آن به هر آنچه که ارزش آن وارد شده، و با هر شخصیت های کاربر وارد شده است. و به این ترتیب اگر کاربر مخرب است که به خصوص باهوش، او می تواند این را بازگشت به جایی در printDef تابع و یا در جایی در malloc تابع، فقط در هر نقطه دلخواه. اما حتی بیشتر هوشمندانه است اگر او کاربر بازگشت به حق در اینجا. و پس از آن شما شروع به اجرای این به عنوان خط کد. پس در آن نقطه، کاربر می تواند وارد هر آنچه که او را به این منطقه می خواهد. و او تا به کنترل کامل بیش از برنامه شما. سوالات در آن؟ بنابراین سوال بعدی کامل است پیاده سازی مجدد مواد غذایی به گونه ای که این دیگر آسیب پذیر است. پس از دو راه وجود دارد شما می توانید از این انجام داده اند. ما هنوز ج تنها بودن طول 12. شما می توانید این تغییر به عنوان بخشی از راه حل خود را. ما همچنین اضافه شده یک چک به مطمئن شوید که نوار بود تهی نیست. اگر چه شما لازم نیست که برای اعتبار کامل. بنابراین ما در حال چک کردن اول طول رشته از نوار. اگر آن را بزرگتر از 12، پس از آن در واقع انجام این کار کپی نیست. به طوری که یکی از راه های اصلاح آن است. یکی دیگر از راه اصلاح آن است به جای داشتن C تنها در طول 12 است، آن را داشته باشد از strlen طول (نوار) ​​است. یکی دیگر از راه اصلاح آن است در واقع تنها بازگشت. بنابراین اگر شما به تازگی بدست از تمام شدن از شر این، اگر شما فقط همه حذف شده بود خط از کد، شما را بدست اعتبار کامل، از این تابع در واقع هر چیزی انجام نمی شود. این کپی کردن از خط فرمان استدلال به برخی از آرایه در قاب پشته محلی آن است. و پس از آن چیزی که از بازگشت است. و هر آنچه در آن انجام شده از بین رفته است. پس از بازگشت نیز کافی بود راه گرفتن اعتبار کامل. DAVID J. مالان: کاملا روح نشده از سوال اما در قابل قبول تنظیمات با این وجود. ROB BOWDEN: سوالات مطرح شده در هر یک از آن؟ آن چیزی است که شما حداقل نیاز به کامپایل کد. بنابراین حتی اگر از نظر فنی شما نمی آسیب پذیر در صورت فعال می کند کامپایل، ما قبول نمی. سوالات؟ OK. DAVID J. مالان: آیا شما می خواهید می گویند این عنوان؟ ROB BOWDEN: شماره DAVID J. مالان: بنابراین در این یکی، این هر دو خبر خوب و خبر بد بود. این است که به معنای واقعی کلمه مشکل مشابه به عنوان اولین مسابقه. و این تقریبا همان مشکل به عنوان pset1. اما آن را عمدا ساده شده باشد هرم ساده، که می تواند حل با کمی تکرار ساده. و واقعا، چیزی است که ما در گرفتن شد در اینجا بود خیلی منطق نیست، چرا که احتمالا، این نقطه، شما راحت تر از شما بودند در هفته با برای حلقه ها و یا چرا حلقه، اما واقعا به کسی را دست انداختن از هم جدا که شما کمی راحت با هستی مفهوم است که PHP فقط در مورد چه چیزی نیست برنامه نویسی. این در واقع می تواند به عنوان زبان مورد استفاده برای نوشتن برنامه های خط فرمان. و در واقع، این چیزی است که ما در تلاش بودند توجه شما را به. این یک برنامه PHP خط فرمان است. بنابراین کد C در اینجا، در حالی که درست در C، برای PHP درست نیست. اما کد واقعا همان است. اگر شما مقایسه راه حل برای امتحان 0 در برابر امتحان 1، پیدا خواهید کرد که آن تقریبا یکسان است، به جز برخی از علائم دلار و برای عدم وجود نوع داده. به طور خاص، اگر ما نگاهی به اینجا، شما خواهید دید که ما تکرار، در این مورد، از 1 تا 7 از طریق. ما می تواند آن را انجام می شود 0 صفحه. اما گاهی اوقات، من فکر می کنم آن را فقط روانی آسان تر به در مورد همه چیز فکر می کنم از 1 تا 7. اگر می خواهید یک بلوک، پس از آن دو بلوک، پس از آن سه، پس از آن نقطه، نقطه، نقطه هفت. ما j را به 1 مقدار دهی اولیه و سپس شمارش تا من. و همه چیز در اینجا است در غیر این صورت یکسان. اما در خور توجه داشته باشید چند چیز. ما به شما این دو خط، اولین بار از این را یک، goofily به عنوان یک امر مورد علاقه نام برای انفجار شدید. و این فقط مسیر را تعیین کند، پوشه، که در آن یک برنامه می تواند متوجه شد که شما می خواهید به استفاده از به تفسیر این فایل. و سپس در خط بعد از آن، از البته، به معنی وارد کنید حالت PHP. و خط در پایین به معنی حالت خروج PHP. و این کار، به طور کلی، با زبان های تفسیر شده. این نوع از آزار دهنده اگر شما ارسال برنامه در یک فایل با نام foo.php. و پس از آن به کاربران شما باید فقط به یاد داشته باشید، OK، برای اجرای این برنامه، I را به نوع "foo.php فضای پی اچ پی." نوع از آزار دهنده اگر هیچ چیز دیگری. و آن را نیز نشان می دهد که برنامه های خود را در PHP است که تمام نمی شود نوشته شده است که روشن برای کاربر. بنابراین شما می توانید. پی اچ پی به کلی حذف به یاد بیاورید از سخنرانی. و شما در واقع می توانید انجام دهید. / تولی اگر شما آن را با ساختن آن chmodded ام اجرایی. بنابراین سطح دسترسی + X تولی را انجام داده اند که. و اگر شما نیز ابتکار در اینجا اضافه کنید. اما در واقع، مشکل در گرفتن چاپ کردن چیزی شبیه به این. بدون HTML، هیچ C-کد قطعا، فقط برخی از PHP. بنابراین میلو پس از آن در مشکل 25 بازگشت. و در 25، شما به شرح زیر داده شد کد اسکلت، که یک صفحه وب خیلی ساده است. و بخش آبدار HTML عاقلانه پایین بود در اینجا، جایی که ما در داخل از بدن یک فرم است که دارای ID منحصر به فرد از ورودی ها که در داخل آن دو ورودی، یکی بود با این ایده از نام، یک با یک ایده را فشار دهید. اولین نوع متن بود، دوم از نوع ارسال کنید. و بنابراین ما به شما داد، در واقع، بیش مواد تشکیل دهنده از شما مورد نیاز، فقط تا شما بچه ها گزینه های که با آن حال برای حل این مشکل. شما به شدت نیاز ندارد همه این شناسه. اما آن را به شما اجازه می دهد برای حل آن را در راه های مختلف. و در بالا، توجه کنید که هدف این بود به ماشه یک پنجره شبیه به این - خوش آمدید، میلو - به ظاهر در مرورگر با استفاده از فوق العاده ساده است، اگر زشت نیست، عملکرد هشدار. و به این ترتیب، در نهایت، این جوش پایین مفهومی به نوعی برای گوش دادن ارسالی از شکل های سمت سرویس گیرنده ، نه سمت سرور، به نحوی در پاسخ به که تسلیم شده گرفتن ارزش است که کاربر تایپ در قسمت نام، و سپس نمایش آن را در بدن از یک هشدار. بنابراین یکی از راه های که شما می توانید انجام این کار با جی کوئری، که به نظر می رسد کمی نحوی در ابتدا گیج کننده. شما می توانید این کار را با کد DOM خالص انجام - document.getelement شده توسط ID. اما اجازه دهید نگاهی به این نسخه. من یک زن و شوهر از مهم خط اول. بنابراین، ما باید این خط است، که مشابه به آنچه که شما ممکن است را دیده اند، در، به اعتقاد من، form2.html از کلاس در هفته 9. و این فقط و گفت: اجرا کد زیر را زمانی که سند آماده است. این مهم است که تنها به خاطر صفحات HTML هستند بالا به عنوان خوانده شده پایین، چپ به راست. و در نتیجه، اگر شما سعی می کنید برای انجام این کار چیزی در کد بالا در اینجا به برخی از DOM عنصر، برخی از تگ HTML، که پایین در اینجا، شما در حال انجام آن خیلی زود، دلیل این است که حتی شده در حافظه به عنوان خوانده شده. پس با گفتن این document.ready در خط، ما در حال گفت، در اینجا برخی از کد، مرورگر است. اما این کار را تا زمانی که تمام اجرا نمی سند آماده است، که DOM است درخت در حافظه وجود دارد. این یکی کمی بیشتر ساده، اگر نحوی کمی متفاوت است، که در آن من گفت، با شتاب این عنصر HTML است که منحصر به فرد شناسه ورودی است. این چیزی است که از تگ هش است نشان دهنده، ID منحصر به فرد. و سپس من تماس. ارسال کنید. بنابراین. ارسال در اینجا یک تابع است، در غیر این صورت شناخته شده به عنوان یک روش، که در داخل این شی در دست چپ سمت وجود دارد که من هم برجسته نیست. بنابراین اگر شما از ورودی فکر می کنم به عنوان یک شی در حافظه - و در واقع در آن است. این یک گره در درخت است - . ارائه ابزار در زمانی که این فرم با این ID است را مشاهده کنید، اجرا کد زیر. من اهمیتی نمی دهند چه نام تابع است که من اجرا. بنابراین در اینجا من با استفاده از، مانند قبل، چه به نام تابع لامبدا و یا تابع بی نام. این در همه فکری ندارد جالب دیگر از آن هیچ نام، که خوب اگر شما تنها هستید همیشه رفتن به آن را یک بار. و در داخل وجود دارد من در واقع رسیدگی ارائه فرم. من برای اولین بار یک متغیر اعلان به نام ارزش. و پس از آن چه اثر از این است برجسته بخش در حال حاضر اینجا؟ چه که کار را در سطح بالا برای من؟ رسید این می شود ارزش که کاربر در HTML زیر را نداشت. این می شود که ID و پس از آن پیدا کرد که ارزش آن. DAVID J. مالان: دقیقا. این کاغذ برداشته گره، که منحصر به فرد شناسه نام است. این می شود ارزش آن، که است، احتمالا، آنچه را که کاربر و یا او خودش تایپ. و سپس آن را ذخیره می کند که در متغیر به نام ارزش. همانطور که به کنار، شما نیز می توانند داشته باشند انجام این کمی متفاوت است. در مجموع با انجام کاری قابل قبول ارزش دروغ ور می شود document.getElementById. و این دلیل آن را کمی خسته کننده از jQuery استفاده نیست. "نام". ارزش. بنابراین کاملا قابل قبول است. روش های مختلف برای انجام این کار. جی کوئری فقط گرایش به کمی موجز تر و قطعا محبوب تر در میان برنامه نویسان. در حال حاضر، من انجام کمی از سلامت عقل بررسی کنید، چرا که در مشکل بیانیه ما به صراحت گفت: اگر کاربر هنوز تایپ نشده خود را نام، به هشدار را نشان نمی دهد. اما شما می توانید برای که تنها با بررسی، برای چک کردن رشته خالی برای نقل قول، نقل قول را تمام کردن اگر وجود دارد هیچ چیزی در واقع وجود دارد. اما اگر آن را به نقل قول، نقل قول را تمام کردن برابر نیست، من می خواهم به هشدار تماس بگیرید. و قسمت جالب اینجا است که ما با استفاده از اپراتور به علاوه، که آنچه در جاوا اسکریپت؟ الحاق. بنابراین آن را مانند PHPs نقطه اپراتور است. همان ایده، نحو کمی متفاوت است. و من فقط ایجاد رشته ای که شما در ضربه روی صفحه نمایش را دیدم - خوش آمدید، چنین و چنان. و سپس آخرین و جزئیات این است. چرا در داخل نادرست بازگشت I از این تابع ناشناس؟ رسید هیچ ارزش وجود دارد. شما آن را در فرم. این فقط می گوید، اگر ارزش است به خالی برابر، سپس آن را انجام دهد. بود خالی در آن ارسال وجود دارد. DAVID J. مالان: OK. مراقب باشید. هیچ کس دیگر در اینجا وجود دارد. و این نادرست بازگشت است در خارج از اگر شرایط. پس این برجسته خط، بازگشت کاذب، اجرا بدون توجه به آنچه در هنگام که فرم ارسال می شود. چه از بازگشت در داخل نادرست از این کنترل رویدادها، به عنوان آن را به نام، این رویداد در سوال در حال ارسال؟ رسید آنجا که آن را تنها یک بار اتفاق می افتد. DAVID J. مالان: فقط یک بار اتفاق می افتد. نه کاملا. آره؟ یک مدعو: این مانع از فرم را از ارسال به رفتار به طور پیش فرض، که بارگذاری صفحه را. DAVID J. مالان: دقیقا. پس من سربار واژه ارسال کنید در اینجا، به خاطر من گفت، فرم است در حال کنید. اما به شما نشان می دهد، آن را در واقع نمی در راه HTTP درست کنید. هنگامی که شما با کلیک کردن، دلیل ما کنترل onSubmit، ما در حال رهگیری که ارسال فرم تا به صحبت می کنند. ما پس از آن در حال انجام چیزی که ما با کد جاوا اسکریپت. اما من به عمد از بازگشت کاذب، چون چیزی که من نمی خواهم به اتفاق می افتد قسمتی از ثانیه بعد برای تمام فرم خود را به وب را مشاهده کنید سرور با جفت کلید با تغییر URL می شود چیزی شبیه Q = گربه و یا هر آنچه ما انجام دادیم، به عنوان مثال، در کلاس. من نمی خواهم که اتفاق می افتد، زیرا بدون گوش دادن به سرور برای این وجود دارد فرم ارسال مقاله. این صرفا در کد جاوا اسکریپت انجام می شود. و به همین دلیل من حتی یک اقدام نسبت در فرم من، چون من برای این که به قصد تا به حال به سرور بروید. پس از آن در حال کنید. اما ما در حال رهگیری است که به صورت ارسال و جلوگیری از پیش فرض رفتار، که در واقع به تمام راه را به سرور. رسید پس از آن حفظ سمت سرویس گیرنده. DAVID J. مالان: نگه داشتن آن را به سمت سرویس گیرنده. دقیقا درست است. تا بعد من آه خروجی زیر بود. ROB BOWDEN: OK. بنابراین این سوال برای اولین بار به طور کلی بود خشن برای مردم است. اگر چه آنهایی که بعد بهتر شد. بنابراین شما مجبور به انتخاب کنید اطلاعات صحیح نوع برای هر دو از این ستون ها. و هر دو از این برخی از همه چیز در مورد آنها که را انتخاب دشوار است. بنابراین اعضای هیات بود که معتبر نیست نوع برای تعداد. دلیل بودن یک حساب 12 رقمی تعداد، یک int است به اندازه کافی بزرگ نشده تعداد کل ارقام ذخیره کنید. بنابراین یک گزینه معتبر را بزرگ بوده است اعضای هیات اگر شما اتفاق می افتد می دانیم که. یکی دیگر از انتخاب می شده است یک رشته کاراکتر به طول 12. بنابراین هر کدام از این که کار کرده اند. بین المللی را ندارد. در حال حاضر، تعادل، فکر می کنم به pset7. بنابراین ما به طور خاص اعشاری استفاده می شود ذخیره ارزش سهام و یا - DAVID J. مالان: نقدی. ROB BOWDEN: نقدی. با استفاده از اعشار برای ذخیره مقدار نقدی که کاربر در حال حاضر است. بنابراین به این دلیل که ما انجام این کار است چرا که، به یاد داشته باشید، شناور. نقطه شناور در دقیق. این دقیقا نمی تواند ذخیره پول نقد ارزش مانند ما در اینجا می خواهم. بنابراین اعشاری قادر به دقیقا فروشگاه چیزی به، می گویند، دو رقم اعشار. به همین دلیل تعادل، ما آن را می خواهم به اعشاری و شناور نیست. DAVID J. مالان: و همچنین، بیش از حد، هر چند آن ممکن است هوشمندانه در دیگر بوده است زمینه فکر می کنم، شاید این شانس یک int است. من فقط پیگیری همه چیز در سکه. از آنجا که ما به صراحت به طور پیش فرض نشان داد ارزش بودن 100.00، که بدان معنی است که فقط می تواند از نوع int. و ظرافت دیگر بیش از حد با تعداد این بود که قرار نبود به یک سوال ترفند. اما به یاد می آورند که یک int در پایگاه، مانند C، حداقل در لوازم خانگی، 32 بیتی است. و حتی اگر ما شما را به انتظار نیست دقیقا می دانند که چگونه بسیاری از عددی که ابزار، به یاد می آورند که بیشترین تعداد شما به طور بالقوه می تواند نشان دهنده با یک عدد 32 بیتی تقریبا آن چیزی است؟ چه تعداد ما همیشه می گویند؟ 2 به 32 است، که چه حدود؟ شما لازم نیست که دقیقا می دانیم. اما تقریبا در زندگی مفید است. این تقریبا 4 میلیارد. بنابراین ما می گفت که چند بار. من می دانم من گفته اند که چند بار. و این است که تقریبا 4 میلیارد. و این یک قانون خوب است از انگشت شست به می دانم. اگر شما 8 بیت، 256 تعداد سحر و جادو است. اگر شما 32 بیت، 4 میلیارد دادن یا گرفتن. بنابراین اگر شما فقط پایین 4 میلیارد ارسال، شما خواهید دید که این رقم کمتر از 12، که بدان معنی است که به وضوح نمی بیان به اندازه کافی برای گرفتن یک شماره حساب 12 رقمی. ROB BOWDEN: OK. بنابراین آنهایی که بهتر رفت. بنابراین فرض کنید که بانک تحمیل 20 دلار ماهانه هزینه تعمیر و نگهداری را در همه حساب. با چه پرس و جو SQL می تواند بانک ، کسر $ 20 از هر تعداد حتی اگر آن را در برخی از توازن منفی نتایج: از شماره؟ بنابراین اساسا، چهار وجود دارد نوع اصلی از نمایش داده شد - قرار دادن، انتخاب، بروز رسانی و حذف کنید. بنابراین چه چیزی فکر می کنم ما ما رفتن به استفاده از در اینجا؟ به روز رسانی. بنابراین اجازه دهید نگاهی به. بنابراین در اینجا ما در حال به روز رسانی. چه جدول به روز رسانی ما حساب؟ بنابراین به روز رسانی حساب. و پس از آن نحو می گوید، چه در حساب های به روز رسانی می کنیم؟ خب، ما در حال تنظیم تعادل به برابر ارزش فعلی تعادل منفی 20. پس این همه ردیف ها به روز رسانی حساب های، کم کردن $ 20 از تعادل می باشد. DAVID J. مالان: یک اشتباه معمول در اینجا، حتی اگر ما گاهی اوقات آن را بخشید، این بود که در واقع کد PHP را در اینجا فراخوانی تابع پرس و جو و یا قرار دادن نقل قول در اطراف هر چیزی که نیازی به وجود داشته باشد. ROB BOWDEN: به یاد داشته باشید که خروجی زیر است یک زبان مجزا از PHP. ما اتفاق می افتد به نوشتن خروجی زیر در PHP. و PHP است و سپس ارسال آن را به سرور MySQL. اما شما PHP به منظور نیاز ندارد برقراری ارتباط با سرور خروجی زیر. DAVID J. مالان: دقیقا. بنابراین به هیچ متغیر با علائم دلار باید در این زمینه باشد. این فقط می توانید تمام محاسبات ریاضی را انجام دهد در پایگاه داده خود دارد. ROB BOWDEN: OK. بنابراین یک بعدی. آیا این یک بعدی؟ آره. پس با چه پرس و جو SQL می تواند بانک بازیابی شماره حساب از آن ثروتمندترین مشتریان، کسانی که با توازن بیشتر از 1000؟ پس کدام یک از چهار نوع اصلی می خواهیم می خواهید در اینجا؟ را انتخاب کنید. بنابراین ما می خواهیم را انتخاب کنید. ما چه می خواهیم را انتخاب کنید؟ چه ستون را می خواهیم را انتخاب کنید؟ ما به طور خاص می خواهد تعداد را انتخاب کنید. اما اگر شما می گفت: ستاره، ما نیز پذیرفته شده است که. بنابراین تعدادی از چه جدول را انتخاب کنید؟ حساب های. و پس از آن شرایط ما می خواهیم؟ که در آن تعادل بیشتر از 1000. ما نیز پذیرفته شده بیشتر از یا برابر. یکی از آخرین. با چه پرس و جو SQL می تواند بانک نزدیک، یعنی حذف هر حساب که تا به یک تعادل $ 0؟ پس که از چهار ما رفتن به می خواهید استفاده کنید؟ حذف. بنابراین نحو برای که؟ از چه جدول حذف کنید؟ حساب های. و پس از آن شرایط که در آن ما می خواهیم را حذف کنید - که در آن تعادل برابر صفر است. بنابراین از حساب حذف تمام ردیف که در آن تعادل صفر است. سوالات مطرح شده در هر یک از این؟ آیا می خواهید به صف؟ DAVID J. مالان: راهنمای صف. بنابراین در این یکی، ما به شما داد تا حدودی ساختار آشنا است که ما به بررسی کمی در کلاس در کنار ساختمانها، که داده بود ساختار مربوط به آن در روح. تفاوت هر چند با یک صف است که ما تا به حال به نوعی به یاد داشته باشید که در جلوی صف بود، در بزرگ بخشی به طوری که ما می تواند تر استفاده بهینه از حافظه، حداقل اگر ما یک آرایه با استفاده از. از آنجا که به یاد بیاورید، اگر ما یک آرایه، اگر، به عنوان مثال، این جلو است صف، اگر من به صف اینجا، و پس از آن کسی می شود در خط پشت سر من، پشت سر من، پشت سر من، و یک نفر قدم از خط، شما می تواند، به عنوان ما به برخی از انسان ما را داوطلبان در کلاس، همه دارند تغییر در این راه. اما به طور کلی، با هر کس انجام چیزی است که بهترین استفاده را از زمان نیست در یک برنامه، این یعنی شما الگوریتم در حال اجرا است در چه زمان در حال اجرا مجانبی؟ این خطی. و احساس می کنم مثل این نوع احمقانه. اگر شخصی که در کنار در خط بعدی است کسی که قرار است برای رفتن به فروشگاه، نه همه آنها داشته باشد به حرکت با هم. اجازه بدهید که این شخص می شود کنده خاموش هنگامی که زمان می آید، به عنوان مثال. بنابراین ما می توانیم کمی از زمان وجود دارد را نجات دهد. و به این ترتیب به انجام این کار هر چند، که به معنی که سر صف یا جلوی صف در حال رفتن به به تدریج عمیق تر و عمیق تر حرکت به آرایه و در نهایت ممکن است در واقع در اطراف بسته بندی کردن اگر ما با استفاده از آرایه برای ذخیره مردم در این صف. بنابراین شما تقریبا می توانید از فکر می کنم آرایه به عنوان داده های دایره ای ساختار به این معنا. بنابراین شما به نوعی مجبور به پیگیری از اندازه آن و یا واقعا پایان آن و پس از آن که در آغاز آن است. بنابراین ما پیشنهاد می کنیم که به شما اعلام یک صف از جمله، مکالمه آن پرسش، فقط یک نامه. سپس ما پیشنهاد می کنیم که جلوی شود مقدار دهی اولیه به صفر است و اندازه به صفر مقداردهی اولیه. بنابراین در حال حاضر، هیچ چیز وجود دارد داخل که صف. و ما از شما بخواهد در اجرای نوبت قراردادن زیر در به گونه ای که تابع می افزاید نفر به در پایان پرسش ها و بازگشت درست است. اما اگر پرسش کامل و یا منفی است، تابع به جای باید نادرست بازگشت. و ما شما را به یک زن و شوهر از مفروضات. اما آنها واقعا عملکرد نه مربوطه، درست است که بولی وجود دارد، به این دلیل، از نظر فنی، بولی نمی کند در C وجود داشته باشد مگر اینکه شما شامل فایل هدر خاص. به طوری که فقط مطمئن شوید که وجود دارد را گرفت بدون این ترفند این است شدند نوع سوال از چیزی. بنابراین در نوبت قراردادن، ما در نمونه ارائه شده راه حل برای پیاده سازی به شرح زیر است. یکی از ما در مرحله اول بررسی سهولت، میوه کم حلق آویز. اگر صف کامل و یا تعداد است که شما در حال تلاش برای وارد کردن کمتر است از صفر، که ما در گفت مشخصات مشکل باید نه اجازه داده می شود، چرا که ما فقط می خواهید مقادیر غیر منفی است، پس شما باید به فقط بازگشت کاذب بلافاصله. بنابراین برخی نسبتا آسان چک کردن خطا. اگر هر چند شما می خواهید برای اضافه کردن که واقعی شماره، شما را مجبور به انجام یک بیت از فکر کردن در اینجا. و این جایی است که آن را کمی آزار دهنده ذهنی، چرا که شما به شکل از چگونه که مسئولیت رسیدگی به کمر بند یا چیزی که دور بدن شخصی بسته باشند. اما از جوانه ایده در اینجا این است که از علاقه به ما که شال است اغلب بیان حساب های مدولار و اپراتور وزارت دفاع، سمت درصد، که در آن شما می توانید از یک مقدار بزرگتر به به صفر و سپس یک و دو و سه و پس از آن در اطراف به صفر، یک و دو و سه و غیره دوباره و دوباره. پس راه ما پیشنهاد می کنیم برای انجام این کار است که ما نمی خواهیم به صفحه اول به آرایه به نام شماره ای که اعداد صحیح ما نهفته است. اما برای رسیدن به آنجا، ما برای اولین بار می خواهید انجام دهید هر اندازه صف است، اما پس از آن به که اضافه کردن به هر جلوی این فهرست است. و اثر آن این است که ما را در سمت راست در صف و فرض کنیم که فرد برای اولین بار در خط است در آغاز، که او و یا او کاملا می تواند اگر ما همچنین تغییر همه شد. اما ما فقط ایجاد کار برای خودمان اگر ما در زمان این مسیر خاص است. بنابراین ما می توانیم آن را نگه دارید نسبتا ساده است. ما باید به یاد داشته باشید که ما فقط یک int که به صف اضافه شده است. و پس از آن ما فقط به راست. در همین حال، در dequeue، از ما خواسته شما را به انجام موارد زیر است. پیاده سازی آن به گونه ای است که آن را dequeues، که حذف و بازده است، هوشمند در مقابل صف. برای حذف بین المللی، کافی به آن را فراموش کرده ام. شما لازم نیست به نادیده گرفتن کمی آن است. پس از آن هنوز هم در واقع وجود دارد. درست مانند داده ها بر روی دیسک سخت، ما فقط نادیده گرفتن این واقعیت که آن را در حال حاضر وجود دارد. و اگر پرسش خالی است، ما باید به جای منفی 1 بازگشت. پس این احساس دلخواه. چرا بازگشت منفی 1 به جای غلط؟ آره. یک مدعو: Q ذخیره سازی ارزش مثبت است. از آنجا که شما فقط مقادیر مثبت ذخیره در پرسش، منفی یک خطا است. DAVID J. مالان: OK، درست است. پس چون ما فقط ذخیره سازی مثبت ارزش ها و یا صفر است، سپس آن را خوب به ارزش منفی به عنوان یک نگهبان بازگشت ارزش، یک نماد خاص است. اما شما در حال بازنویسی تاریخ وجود دارد، چرا که به این دلیل ما تنها هستیم بازگشت به ارزش های غیر منفی دلیل است که ما به خواهید ارزش نگهبان. بنابراین به طور خاص، چرا که نه فقط بازگشت کاذب در موارد خطا؟ آره. یک مدعو: شما شکست خورده ام برای بازگشت به یک عدد صحیح. DAVID J. مالان: دقیقا. و این است که در آن C می شود محدود بسیار. اگر شما می گویید که شما قصد برای بازگشت به یک int، تو برای بازگشت به یک int. شما می توانید فانتزی می کنید و شروع به بازگشت بولی و یا شناور و یا یک رشته یا چیزی شبیه به آن. در حال حاضر، در عین حال، جاوا اسکریپت و PHP و برخی از زبان های دیگر می تواند، در واقع، به شما بازگشت مختلف نوع ارزش. و این در واقع می تواند مفید باشد، که در آن شما می توانید نوع داده int مثبت، صفر بازگشت، نوع داده int منفی و یا کاذب یا تهی حتی به معنی خطا. اما ما لازم نیست که تطبیق پذیری در C. بنابراین با dequeue، آنچه که ما پیشنهاد برای انجام این کار است - ROB Bowden: شما می توانید نادرست بازگشت. این درست است که نادرست مخلوط است تعریف نادرست به صفر است. بنابراین اگر شما بازگشت کاذب، شما صفر بازگشت. و صفر یک چیز معتبر در صف ما، در حالی که منفی 1 است اگر نادرست رخ داده است به منفی 1. اما شما باید حتی باید بدانید که. DAVID J. مالان: که به همین دلیل من آن را می گویند نیست. ROB BOWDEN: اما این درست نیست که شما نمی توانید بازگشت کاذب. DAVID J. مالان: مطمئنا. بنابراین dequeue، توجه ما را قبول از درجه اعتبار ساقط عنوان آرگومان می گیرد. و این به خاطر ما نیست عبور از هر چیزی شوید ما فقط می خواهیم به حذف عنصر در جلوی صف. پس چگونه ممکن است که ما در مورد انجام این کار؟ خب، اول، اجازه دهید این کار را انجام ورود به سلامت عقل سریع است. اگر به اندازه صف 0 است، وجود دارد هیچ کار باید انجام شود. بازگشت منفی 1. انجام می شود. به طوری که چند خط از برنامه من است. بنابراین تنها چهار خط باقی می ماند. بنابراین در اینجا من تصمیم به واحد کم میکنیم به اندازه. طرح ساده اندازه به طور موثر بدان معنی است که من فراموش چیزی است که در آن وجود دارد. اما من هم برای به روز رسانی که در آن جلوی اعداد. بنابراین برای انجام این کار، من نیاز به انجام دو چیز. من برای اولین بار باید به خاطر داشته باشید که چه تعداد در جلوی صف، چون من نیاز به بازگشت آن چیز. بنابراین من نمی خواهم به طور تصادفی را فراموش کرده ام در مورد آن و سپس آن را بازنویسی. من فقط به خاطر داشته باشید در یک int. و در حال حاضر، من می خواهم برای به روز رسانی q.front به q.front شود 1. بنابراین اگر این اولین کسی بود خط، در حال حاضر، من می خواهم به انجام این کار به علاوه 1 به اشاره به فرد در خط بعدی. اما من که مسئولیت رسیدگی به که کمر بند یا چیزی که دور بدن شخصی بسته باشند. و اگر ظرفیت ثابت جهانی است، که رفتن به من اجازه می دهد تا مطمئن شوید که من به شخص بسیار گذشته در نقطه خط، بهره برداری باقی مانده به ارمغان خواهد آورد من به صفر در جلوی صف. و این دسته کمر بند یا چیزی که دور بدن شخصی بسته باشند در اینجا. و بعد من ادامه به بازگشت N. در حال حاضر، صرفا صحبت کردن، من نمی مجبور به اعلام نفر. من نیست که آن را گرفتن و ذخیره آن به طور موقت، به دلیل ارزش است هنوز هم وجود دارد. بنابراین من فقط می تواند انجام حسابی سمت راست برای بازگشت به رئیس سابق از صف. اما من فقط احساس کردند که این روشن تر بود در واقع گرفتن بین المللی، آن را در N، و سپس بازگشت که به خاطر وضوح، اما به شدت ضروری نیست. PSST. همه آنها قابل تلفظ در سر من هستی. ROB BOWDEN: بنابراین سوال اول مشکل درخت دودویی است. سوال پس اول است، ما با توجه به این اعداد. و ما می خواهیم به نوعی آنها را در قرار دادن این گره مانند آن است که معتبر درخت جستجوی دودویی. بنابراین آن چیزی که در مورد به یاد داشته باشید درخت جستجوی دودویی است که آن را نمی درست است که چیزی که به سمت چپ کمتر و چیزی که به است سمت راست بیشتر است. این نیاز به این باشد که کل درخت به سمت چپ کل درخت کمتر است، و به سمت راست بیشتر است. بنابراین اگر من در اینجا در بالا قرار داده است 34، و پس از آن من قرار 20 در اینجا، به طوری که معتبر تا تا کنون، به دلیل 34 تا اینجا. 20 در حال رفتن به سمت چپ. به طوری که کمتر است. اما من پس از آن نمی تواند قرار داده 59 در اینجا، به دلیل حتی اگر 59 در سمت راست است از 20، هنوز هم در سمت چپ 34. بنابراین با توجه به محدودیت در ذهن، ساده ترین راه احتمالا حل این مشکل این است که فقط مرتب کردن بر اساس از این اعداد - تا 20، 34، 36، 52، 59، 106. و پس از آن وارد از چپ به راست. بنابراین 20 در اینجا می رود. 34 در اینجا می رود. 36 در اینجا می رود. 52، 59، 106. و شما همچنین می توانست با نمیفهمد برخی از متصل کردن و تحقق، اوه، صبر کنید، من اصلا اعداد را به اندازه کافی ندارد برای پر کردن این در اینجا. بنابراین من نیاز به reshift چه من مسیر توجه داشته باشید برای رفتن به. اما توجه کنید که در فینال سه، اگر شما خواندن از چپ به راست، آن را در است جهت افزایش است. بنابراین در حال حاضر، ما می خواهیم به اعلام چه ساختار است برای است گره ها در این درخت. پس چه که ما در یک درخت دودویی نیاز دارید؟ بنابراین ما باید یک مقدار از نوع هوشمند، به طوری که برخی از ارزش بین المللی. من نمی دانم آنچه که ما به نام آن را در راه حل - اعضای هیات N. ما نیاز به یک اشاره گر به کودک سمت چپ و یک اشاره گر به کودک سمت راست. بنابراین آن را به شبیه به این. و آن را در واقع شما قبل از نگاه هنگامی که با پیوند مضاعف بود فهرست مسائل، تا اطلاع - من قصد دارم که به حرکت همه راه به پایین به مشکل 11. بنابراین توجه به نظر می رسد مشابه به این، به جز ما فقط اتفاق می افتد به تماس این نام های مختلف. ما هنوز هم یک عدد صحیح داشته باشند ارزش و دو اشاره گر. این درست است که به جای درمان اشاره گر به اشاره به چیزی که بعد از و چیزی که گذشته، ما در حال درمان اشاره گر به نقطه را به یک کودک سمت چپ و کودک سمت راست. OK. به طوری که گره ساختار ماست. و در حال حاضر، تنها تابع ما نیاز به اجرای این تراورس است، که ما می خواهیم به بیش از درخت، چاپ بروید از ارزش های درخت به منظور. بنابراین به دنبال در اینجا، ما می خواهیم برای چاپ از 20، 34، 36، 52، 59، و 106. چگونه می توانیم انجام است که؟ پس از آن بسیار مشابه است. اگر در امتحان گذشته دیدم مشکل که شما می خواستم برای چاپ کردن کل درخت را با کاما از هم در بین همه چیز، آن را در واقع حتی بود ساده تر از آن. بنابراین در اینجا راه حل است. این به طور قابل توجهی آسان تر بود اگر شما آن را به صورت بازگشتی انجام داد. من نمی دانم اگر کسی تلاش این کار را انجام تکرار. اما در ابتدا، ما باید مورد پایگاه ما. اگر ریشه تهی است؟ سپس ما فقط رفتن به بازگشت. ما نمی خواهیم برای چاپ هر چیزی. دیگری که ما در حال رفتن به گذشتن به صورت بازگشتی است. چاپ کردن کل زیر درخت سمت چپ. بنابراین همه چیز کمتر چاپ از ارزش فعلی من. و سپس من قصد دارم خودم را چاپ کنید. و سپس من قصد دارم به RECURSE کردن من کل زیر درخت راست، بنابراین همه چیز بیشتر از ارزش من. و این است که برای چاپ از همه چیز در جهت. سوالات در مورد چگونگی این در واقع انجام که؟ یک مدعو: من یک سوال در [نامفهوم]. ROB BOWDEN: بنابراین یکی از راه های نزدیک شدن به هر گونه مشکل بازگشتی این است که فقط فکر می کنم در مورد آن را می خواهم شما را به فکر می کنم در مورد تمام موارد گوشه. بنابراین در نظر بگیرید که ما به خواهید چاپ کل این درخت. پس همه ما می رویم به تمرکز بر روی این گره خاص است - 36. تماس بازگشتی، ما وانمود کسانی که فقط کار می کنند. بنابراین در اینجا، این تماس بازگشتی به تراورس، ما حتی بدون فکر کردن در مورد آن، فقط تراورس به سمت چپ سه، تصور کنید که در حال حاضر چاپ 20 و 34 برای ما. و پس از آن زمانی که ما در نهایت به صورت بازگشتی گذشتن تماس بگیرید راست، که به درستی چاپ 52، 59، و 106 برای ما. بنابراین با توجه به اینکه این می تواند 20، 34، چاپ و از سوی دیگر می تواند چاپ 52، 59، 108، همه ما باید قادر به انجام چاپ خودمان را در وسط آن. پس از چاپ همه چیز را قبل از ما. چاپ خودت هستی، پس از چاپ گره فعلی 36، چون printf به طور منظم، و پس از آن همه چیز بعد از ما را چاپ کنید. DAVID J. مالان: این که در آن بازگشت است واقعا زیبا. این جهش شگفت انگیز از ایمان است که در آن شما انجام اندک کمی کار می کنند. و پس از آن به شما اجازه کسی دیگری انجام دهید بقیه. و که شخص دیگری است، از قضا، شما. بنابراین برای نقاط یکجور دوربین عکاسی جدی است، اگر شما رفته تا در سوالات - ROB BOWDEN: در سوال؟ DAVID J. مالان: و پایین کمی به اعداد، آیا کسی می دانم که در آن این اعداد از کجا آمده؟ ROB BOWDEN: من به معنای واقعی کلمه هیچ نظری ندارم. DAVID J. مالان: به نظر می رسد در طول مسابقه. یک مدعو: آیا آنها همان تعداد؟ DAVID J. مالان: این اعداد. تخم مرغ کمی عید پاک. بنابراین برای کسانی از شما تماشای آنلاین در خانه، اگر شما می توانید با ما از طریق ایمیل برای گفتن heads@CS50.net اهمیت از این شش شماره در محدوده زمانی معین می باشد در طول امتحان 1، ما شما را دوش با توجه شگفت انگیز در فینال سخنرانی و یک توپ استرس. زیبا و لطیف است. ROB BOWDEN: هر گونه سؤال آخرین در مورد هر چیزی در مسابقه؟