[موسیقی] [پخش ویدئو] -He دروغ. -درباره چه؟ -من نمی دانم. -SO چه می دانیم؟ یعنی در 9:15، ری Santoya در دستگاه خودپرداز بود. آره. بنابراین سوال این است، چه شد که وی در 09:16 انجام می دهند؟ -Shooting 9 میلی متر در چیزی. شاید او را دیدم تیرانداز از خفا. -Or با او کار می کرد. -صبر كن. رفتن به یک. -چی می بینی؟ -Bring صورت خود را تا صفحه نمایش کامل. عینک -His. یک بازتاب وجود دارد. آن را تیم بیس بال Nuevitas است. این آرم خود است. البته او صحبت کردن به هر کس که با پوشیدن که ژاکت. [END پخش] دیوید مالان: بسیار خوب. این CS50 است و این است که کمی بیشتر [نامفهوم] که با آن شما هستید پنجه نرم کردن با مشکل مجموعه چهار. امروز ما شروع به نگاه کمی بیشتر عمیقا در این چیزها به نام اشاره گر، که حتی اگر آن را یک موضوع بسیار محرمانه، معلوم است که آن را به وسیله ای است که ما می توانید شروع به ساخت و مونتاژ برنامه های بسیار پیچیده تر است. اما ما آن را در روز چهارشنبه گذشته از طریق برخی از تولید انیمیشن خمیری است. بنابراین این، به یاد بیاورید، است Binky و ما او را مورد استفاده قرار به نگاهی به برنامه ای است که واقعا نمی انجام هر کاری جالب، اما آن را نشان می دهد چند مشکل. بنابراین برای شروع امروز، چرا ما راه رفتن به سرعت از طریق چند از این مراحل، سعی کنید به تقطیر به نظر انسان دقیقا همان چیزی که در اینجا و چرا این بد است، و سپس حرکت و در واقع شروع به ساخت چیزی با این روش؟ بنابراین این اولین بار بود دو خط در این برنامه و در عبارت، چه آیا این دو خط انجام می دهند؟ کسی که منطقی راحت با آنچه بر روی صفحه نمایش را اعلام کرد؟ این دو خط چه می کنند؟ این همه که مختلف از هفته اول، اما برخی از نماد خاصی جدید وجود دارد. آره؟ برگشت وجود دارد. مخاطبان: اعلام اشاره گر؟ دیوید مالان: بگو دوباره؟ مخاطبان: اعلام اشاره گر؟ دیوید مالان: اشاره گر اعلام و اجازه دهید آن را اصلاح کمی بیشتر. مخاطبان: [نامفهوم] آدرس X و سپس y است. دیوید مالان: و پس از آن آدرس. بنابراین به طور خاص آنچه ما انجام می این است که ما اعلام دو متغیر. این متغیرها، هر چند، در حال رفتن از نوع ستاره بین المللی، لازم است که بیشتر به طور خاص به معنای آنها می خواهند برای ذخیره آدرس از نوع int، به ترتیب، x و y. در حال حاضر هر مقدار وجود دارد؟ آیا آدرس واقعی در این وجود دارد دو متغیر در این نقطه در زمان؟ شماره آن را فقط به اصطلاح ارزش زباله. اگر شما در واقع نه اختصاص دادن یک متغیر، هر آنچه که در رم بود قبلا است که برای پر کردن با صفر و آنهایی که هر دو از آن متغیرها. اما ما هنوز نمی دانند آنها چه هستند و که رفتن به کلید به همین دلیل Binky شود هفته گذشته سر خود را از دست داده. بنابراین این تولید انیمیشن خمیری بود تجسم از این به موجب آن شما فقط دو متغیر، تکه های کوچک دایره ای از خاک رس، است که می تواند متغیر ذخیره، اما به عنوان فلش پیچیده نشان می دهد، آنها در واقع اشاره نمی به هر نقطه شناخته شده در هر سه. پس ما به حال این خط، و این بود جدید در هفته گذشته، از malloc برای حافظه تخصیص است که فقط یک راه فانتزی از گفتن سیستم عامل، لینوکس و یا سیستم عامل مک یا ویندوز، با سلام، من برخی از حافظه را، و همه شما باید به سیستم عامل چیزی است که زمانی که درخواست آن را برای حافظه است. آن را به مراقبت از آنچه شما در حال رفتن برای انجام با آن، اما شما لازم به عامل به سیستم چه از طریق از malloc. آره؟ مخاطبان: چقدر؟ دیوید مالان: چقدر؟ چقدر در بایت، و بنابراین، این، دوباره، یک مثال ساختگی است، فقط گفت، من به اندازه یک int است. در حال حاضر، به اندازه یک int چهار بایت یا 32 بیت است. بنابراین این فقط یک راه است گفت: هی، سیستم عامل، من چهار بایت از حافظه را که من می توانم در اختیار من استفاده کنید، و به طور خاص، چه بازگشت از malloc با توجه به آن تکه از چهار بایت؟ مخاطبان: نشانی؟ دیوید مالان: آدرس. آدرس این تکه از چهار بایت. دقیقا. و به این ترتیب این چیزی است که در نهایت ذخیره شده در x و به همین دلیل ما واقعا نمی مراقبت از آنچه که شماره آن آدرس، که آیا آن OX1 یا OX2 و یا برخی از آدرس هگزادسیمال مرموز. ما فقط مراقبت pictorially که متغیر X در حال حاضر اشاره به آن تکه از حافظه است. بنابراین فلش نشان دهنده یک اشاره گر، یا به طور خاص، یک آدرس حافظه. اما باز هم، ما معمولا مهم نیست چه کسانی که آدرس واقعی می باشد. در حال حاضر، این خط می گوید چه در عبارت؟ ستاره X می شود 42 نقطه و ویرگول. این یعنی چی؟ تو میخواهی بروی؟ آیا گردن خود را خراش نیست. مخاطبان: آدرس X است در 42. دیوید مالان: آدرس X است که در 42. نه کاملا. خیلی نزدیک، اما نه کاملا، چرا که وجود دارد ستاره که پیشوند این x است. بنابراین ما نیاز به نیشگون گرفتن و کشیدن کمی. آره؟ مخاطبان: ارزش که اشاره گر X است با اشاره به 42 است. دیوید مالان: OK. ارزش که اشاره گر X است اشاره به، اجازه دهید بگویم، باید 42، یا به عبارت دیگر، ستاره X می گوید، به هر آدرس در X، که آیا آن را 1 آکسفورد آکسفورد خیابان خیابان یا 33 و یا OX1 یا OX33، هر آنچه که که آدرس عددی، ستاره X را بصورت غیر مرجع از x است. بنابراین به آن آدرس بروید و سپس قرار دادن تعداد 42 وجود دارد. به طوری که می تواند یک راه معادل و گفت که. به طوری که همه خوب هستند و پس از آن ما تصویر نشان دهنده به شرح زیر که در آن ما اضافه شده است 42 به آن تکه از چهار بایت در سمت راست، اما این خط بود که در آن چیز مسیر خود منحرف شد و سر Binky در ظهور خاموش در این نقطه، چرا که همه چیز بد اتفاق می افتد که شما ارجاع ارزش زباله و یا شما ارجاع نامعتبر اشاره گرها، و من می گویم نامعتبر چون در این نقطه در داستان، آنچه که در داخل از y؟ مقدار y بر اساس چه خبر در چند مرحله گذشته است؟ آره؟ آن چیست؟ مخاطبان: آدرس. دیوید مالان: آدرس. این باید یک آدرس باشد اما من آن را مقداردهی اولیه؟ بنابراین من هنوز. پس چه مشخص شده است که در آن وجود دارد؟ این فقط برخی از مقدار زباله است. این می تواند هر آدرس از صفر تا 2 میلیارد اگر شما دو گیگابایت رم، یا صفر به 4 میلیارد اگر شما چهار گیگابایت رم است. برخی از آن مقدار زباله است، اما مشکل این است که سیستم عامل، اگر به شما داده نشده است آن تکه از حافظه به طور خاص که شما در حال تلاش برای رفتن به، آن را به طور کلی به علت آنچه ما به عنوان یک گسل تقسیم بندی دیده می شود. پس در واقع، هر یک از شما که تلاش در مشکلات در ساعات اداری یا مشکلاتی که بیشتر به طور کلی با تلاش برای کشف کردن گسل تقسیم بندی، که به طور کلی به معنی شما در حال دست زدن به یک بخش از حافظه است که شما باید باشد. شما در حال لمس حافظه است که سیستم عامل نیست به شما اجازه لمس، که آیا آن را با رفتن بیش از حد در آرایه خود را در حال حاضر یا شروع، چه به این دلیل است که شما در حال دست زدن به حافظه است که فقط برخی از مقدار زباله است. انجام این کار ستاره X در اینجا نوع رفتار تعریف نشده است. شما هرگز نباید آن را انجام دهد چرا که شانس می شوند، این برنامه را فقط به سقوط، چون شما می گویید، رفتن به این آدرس و شما هیچ ایده که در آن که آدرس واقع است. بنابراین سیستم عامل است به احتمال زیاد رفتن به سقوط برنامه های خود را به عنوان یک نتیجه و در واقع، این چه به Binky وجود دارد اتفاق افتاده است. پس در نهایت، Binky ثابت این مشکل با این. به طوری که برنامه خود را ناقص بود. اما اگر شما از جعل جلوتر و به جای اجرای این خط، Y برابر است با X فقط بدان معناست که هر آدرس یک X است، همچنین آن را در y قرار داده است. و به این ترتیب pictorially، ما این با دو فلش نمایندگی از x و y را از اشاره به همان محل. بنابراین از لحاظ معنایی، X برابر است با به y چون هر دو از آن در حال ذخیره سازی همان آدرس، بنابر این با اشاره به 42، و در حال حاضر، زمانی که به شما می گویند ستاره Y، به آدرس بروید در Y، این یک اثر جانبی جالب. بنابراین آدرس در Y است همان آدرس در x. بنابراین اگر شما می گویند به آدرس در y و مقدار را تغییر دهید تا 13، چه کس دیگری تحت تاثیر قرار است؟ X است، نقطه D، پس به صحبت می کنند، باید تاثیر گذاشته است. و در واقع، چگونه نیک این تصویر کشید در تولید انیمیشن خمیری دقیقا همان است که بود. حتی اگر ما به دنبال اشاره گر Y، ما در همان محل به پایان رسید، و بنابراین اگر ما به چاپ خارج x یا y را pointee است، سپس ما را به ارزش 13 را ببینید. در حال حاضر، من می گویم pointee به سازگار با فیلم. برنامه نویسان، به من دانش، در واقع هرگز می گویند که pointee کلمه، این است که نوک تیز در، اما برای سازگاری با ویدئو، متوجه که همه که بود به معنای در آن وضعیت. بنابراین هر گونه سوال در تولید انیمیشن خمیری و یا اشاره گر و یا از malloc فقط رتبهدهی نشده است؟ هیچ؟ خیلی خوب. بنابراین بدون بیشتر ADO، اجازه دهید یک نگاهی از در جایی که این در واقع شده است برای برخی از زمان استفاده می شود. بنابراین ما این کتابخانه CS50 داشته ام که کردم تمام این توابع. ما GetInt استفاده می شود به مقدار زیادی، از GetString، احتمالا زودتر از GetLongLong در pset من یک یا چنین است، اما آنچه در واقع اتفاق میوفته؟ خوب، اجازه دهید نگاهی سریع در زیر هود در یک برنامه است که الهام بخش دلیل ما به شما CS50 را کتابخانه، و در واقع به عنوان هفته گذشته، ما شروع به آن آموزش چرخ است. پس این است که حاضر مرتب شده اند یک مرگ از آنچه در جریان بوده است در داخل کتابخانه CS50، حتی اگر ما در حال حاضر شروع به حرکت دور از آن برای اکثر برنامه. این یک برنامه به نام scanf 0 است. این فوق العاده کوتاه است. این فقط این خطوط، اما معرفی یک تابع به نام scanf که ما در واقع رفتن به در یک لحظه داخل کتابخانه CS50، البته در یک فرم کمی متفاوت است. بنابراین این برنامه را در خط 16 است اعلام یک متغیر x است. بنابراین من چهار بایت برای یک int است. این شده است گفتن کاربر، تعداد مدیر فروش، و سپس این یک خط جالب این است که در واقع با هم روابط هفته گذشته و این. Scanf، و پس از آن متوجه آن طول می کشد قالب رشته، درست مثل تابع () printf، ٪ من معنی یک int، و سپس آن را طول می کشد یک آرگومان دوم که به نظر می رسد کمی بد بو. این علامت X است، و به یاد آورند، ما تنها در این هفته یک بار گذشته دیدم. علامت X چه نشان می دهد؟ علامت در C چیست؟ آره؟ مخاطبان: آدرس. دیوید مالان: آدرس. بنابراین آن مخالف است اپراتور ستاره، در حالی که اپراتور ستاره می گوید، به این آدرس، عملگر & می گوید، کشف کردن آدرس این متغیر، و بنابراین این کلیدی است، زیرا هدف scanf در زندگی است که به اسکن کاربر ورودی از صفحه کلید، بسته به هر او انواع، و سپس به عنوان خوانده شده ورودی است که کاربر را به یک متغیر، اما ما در دو هفته گذشته شاهد که تابع swap که ما سعی زحمت برای پیاده سازی فقط شکسته شد. به یاد بیاورید که با تابع swap، اگر ما فقط A و B به عنوان نوع داده int اعلام کرد، ما موفقیت مبادله دو متغیر داخل مبادله فقط با شیر و OJ را دوست دارم، اما به محض مبادله بازگشت، نتیجه چه بود با توجه به x و y، ارزش های اصلی؟ هیچ چی. آره. هیچ چیز اتفاق افتاده است که زمان، به دلیل معاوضه فقط کپی های محلی خود را تغییر دهید، است که می گویند، همه این زمان، هر زمان که ما را در استدلال عبور به توابع، ما فقط عبور نسخه هایی از آن استدلال است. شما می توانید با آن انجام دهید هر آنچه که شما می خواهید با آنها، اما آنها در حال رفتن به هیچ اثر بر روی ارزش های اصلی. بنابراین این مشکل اگر شما است می خواهم به یک تابع مانند scanf در زندگی، که هدف این است که اسکن ورودی کاربر را از صفحه کلید و سپس در جاهای خالی را پر، پس به صحبت می کنند، این است که، به یک متغیر مانند X یک ارزش، چرا که اگر من بودند فقط عبور x به scanf، اگر شما در نظر منطق آخرین هفته، scanf می توانید هر آنچه می خواهد انجام آن با یک کپی از X، اما نمی توانست به طور دائم تغییر X مگر اینکه ما به scanf یک نقشه گنج، پس به صحبت می کنند، که در آن ایکس علائم نقطه، به موجب آن ما در آدرس X به طوری که عبور scanf وجود دارد و در واقع تغییر می تواند به مقدار x. و به این ترتیب در واقع، تمام که این برنامه اگر من را scanf 0 در منبع من دایرکتوری 5M، را scanf 0، نقطه اسلش scanf، شماره مدیر فروش 50، با تشکر برای 50. پس از آن همه که جالب نیست، اما آنچه اتفاق می افتد در واقع این است که به زودی به عنوان پاسخ scanf در اینجا، مقدار x است که به طور دائم تغییر کرده است. در حال حاضر، این به نظر می رسد خوب و خوب است، و در واقع، آن به نظر می رسد مانند ما واقعا نیاز نیست کتابخانه CS50 در همه نیست. به عنوان مثال، اجازه دهید اجرا این یک بار بیشتر در اینجا. اجازه بدهید من آن را دوباره باز برای یک ثانیه. اجازه دهید به یک مدیر فروش و تعداد امتحان کنید به جای گفتن 50 مانند قبل، اجازه دهید فقط می گویند. خوب، که کمی عجیب و غریب. باشه. و فقط برخی از مزخرف است. پس از آن به نظر نمی رسد مسئولیت رسیدگی به شرایط نادرست. بنابراین ما نیاز به حداقل شروع اضافه کردن برخی از چک کردن خطا مطمئن شوید که کاربر تا در یک عدد واقعی تایپ مانند 50، چرا که کلمات ظاهرا تایپ به عنوان مشکل شناسایی نیست، اما احتمالا باید باشد. بیایید در این نسخه در حال حاضر که نگاه تلاش من برای طورمستقل از GetString. اگر scanf است این همه قابلیت های ساخته شده در، چرا ما شده است با این است dabbling آموزش چرخ مانند GetString؟ خوب، در اینجا است که شاید خود من نسخه ساده از getstring به موجب آن یک هفته پیش، من ممکن است گفت: من یک رشته و پاسخ آن را بافر شده است. امروز، من قصد دارم برای شروع فقط گفت ستاره کاراکتر، که، به یاد بیاورید، آن را فقط مترادف. به نظر می رسد ترسناک اما آن را همان چیزی که دقیق. بنابراین من یک متغیر به نام بافر را که رفتن به ذخیره یک رشته، رشته کاربران به مدیر فروش، و پس از آن، درست مانند قبل، اجازه دهید سعی کنید به قرض گرفتن این درس scanf ٪ s را این بار و پس از آن در بافر منتقل می کند. در حال حاضر، بررسی سلامت عقل سریع است. چرا من نمی گویم علامت بافر این زمان؟ استنباط از مثال قبلی است. رسید کاراکتر ستاره یک اشاره گر است. دیوید مالان: دقیقا، چرا که این زمان، کاراکتر ستاره در حال حاضر یک اشاره گر، آدرس، با تعریف از آن ستاره بودن وجود دارد. و اگر scanf انتظار آدرس و کافی است فقط به تصویب در بافر شده است. من لازم نیست به بافر علامت. برای کنجکاو، شما می توانید چیزی شبیه به این. آن معنی مختلف داشته باشد. این امر به شما یک اشاره گر را به یک اشاره گر است که در واقع یک چیز معتبر در C، اما برای در حال حاضر، اجازه دهید آن را ساده نگه دارید و سازگار نگه داشتن داستان. من فقط رفتن به تصویب در بافر و این درست است. مشکل هر چند این است. اجازه بدهید به جلو و اجرای این برنامه بعد از کامپایل کردن آن. را scanf 1. لعنت بر آن، کامپایلر من ابتلا به خطا من. من یک دوم می دهد. صدای جرنگ جرنگ. بیایید می گویند scanf-1.c. باشه. ما میرویم آنجا. من آن نیاز دارید. CS50 ID های مختلف است تنظیمات که شما در برابر خود محافظت می کند. من نیاز به غیر فعال کردن آن توسط در حال اجرا صدای جرنگ جرنگ دستی این زمان. بنابراین رشته مدیر فروش. من قصد دارم به جلو بروید و تایپ در سلام جهان مورد علاقه من. OK، تهی. این چیزی است که من تایپ نیست. پس از آن نشان دهنده چیزی که اشتباه است. اجازه دهید من جلو بروید و تایپ در یک رشته واقعا طولانی است. با تشکر برای پوچ و من نمی دانم اگر من قصد دارم به قادر به آن را سقوط. بیایید یک کپی کوچک سعی رب و ببینید که اگر این کمک می کند. تنها بسیاری از این خمیر. این قطعا یک بزرگتر رشته از حد معمول. اجازه دهید فقط آن را ارسال. شماره لعنتی. این دستور پیدا نشد. به طوری که نامربوط است. دلیلش این است که من جا به جا برخی از شخصیت های بد، اما این معلوم است که نمی کنند. بیایید سعی کنید این یک بار دیگر، به دلیل آن را سرگرم کننده تر اگر ما در واقع آن را سقوط. بیایید این را تایپ کنید و حال حاضر، من رفتن به کپی کردن یک رشته واقعا طولانی و در حال حاضر اجازه دهید اگر ببینید که ما می توانید این چیزی که سقوط. توجه کنید من حذف فضاها و خطوط و سمی کالن جدید و همه شخصیت های بد بو. داخل شدن. و در حال حاضر شبکه فقط آهسته است. من برگزار پایین فرماندهی-V بیش از حد طولانی، به وضوح. لعنتی! این دستور پیدا نشد. باشه. خب، نکته این است با این حال به شرح زیر است پس چه شده است در واقع رفتن در این بیانیه کاراکتر بافر ستاره در خط 16. پس چه هستم من گرفتن وقتی که من یک اشاره گر اعلام؟ همه من یک ارزش چهار بایت است به نام بافر، اما آنچه که در داخل آن در حال حاضر؟ این فقط برخی از مقدار زباله است. از آنجا که هر زمان شما یک متغیر در C، آن را فقط برخی از ارزش زباله، و ما شروع به سفر بیش از این واقعیت است. حالا وقتی من به scanf، رفتن به این آدرس قرار داده و هر نوع کاربر در. اگر نوع کاربر در سلام جهان، خوب، که در آن آن را قرار دهم؟ بافر یک مقدار زباله است. به طوری که این نوع مانند یک پیکان که اشاره چه کسی می داند که در آن. شاید آن را با اشاره در اینجا در حافظه من. و به این ترتیب زمانی که کاربر انواع در سلام جهان، برنامه تلاش می کند تا با قرار دادن رشته سلام جهان بک اسلش 0 در آن تکه از حافظه. اما با احتمال بالا، اما به وضوح 100٪ احتمال، کامپیوتر است که به پس از آن سقوط برنامه به دلیل این است که حافظه من باید اجازه داده شود به لمس است. بنابراین در کوتاه مدت، این برنامه ناقص دقیقا به همین دلیل است. من اساسا انجام چه چیزی نیست؟ چه گام من حذف شده، درست مثل ما با مثال اول Binky را حذف؟ آره؟ مخاطبان: تخصیص حافظه. دیوید مالان: تخصیص حافظه. من در واقع اختصاص داده نشده است هر حافظه برای آن رشته است. بنابراین ما می توانیم در چند راه حل کنند. یکی، ما می توانیم آن را ساده نگه دارید و در واقع، در حال حاضر شما رفتن به شروع به دیدن یک تار از خطوط بین یک آرایه، چه یک رشته است، چه است ستاره کاراکتر است، چه آرایه ای از کاراکتر مي باشد. در اینجا یک مثال دوم شامل رشته ها و اطلاع تمام من در خط انجام داده ام 16، به جای گفتن که بافر است برای رفتن به یک کاراکتر ستاره، یک اشاره گر به یک تکه از حافظه، من قصد دارم به بسیار فعالانه به خودم را یک بافر برای 16 کاراکتر، و در واقع، اگر شما آشنا هستید با بافر مدت، احتمالا از جهان از فیلم ها، که در آن یک ویدیو بافر، بافر است، بافر. خب، چه ارتباط در اینجا؟ خب، در داخل از یوتیوب و در داخل از دستگاه های پخش فیلم به طور کلی یک آرایه است که بزرگتر از 16. این ممکن است یک آرایه از اندازه یک مگابایت، شاید 10 مگابایت، و به آن آرایه آیا مرورگر شما دانلود یک دسته کامل از بایت، یک دسته کامل از مگابایت ویدئو و پخش ویدئو، یوتیوب و یا هر کس، شروع می شود خواندن بایت از آرایه، و هر زمان که شما می بینید بافر کلمه، بافر، این بدان معناست که بازیکن بدست به پایان که آرایه. شبکه خیلی آهسته است که آن را تا نیست پر آرایه را با کلمه در ادامه متن و بنابراین شما از بیت هستید برای نمایش به کاربر. بنابراین بافر مدت مناسب در اینجا این است که در آن را فقط به یک آرایه، یک تکه از حافظه است. و این آن را برطرف خواهد چرا که معلوم است که شما می توانید آرایه درمان به عنوان اینکه آنها آدرس هستند، حتی اگر بافر فقط یک نماد، آن را یک دنباله ای از کاراکتر، بافر، که مفید برای من، برنامه نویس، شما می توانید نام خود را در اطراف عبور به عنوان اینکه آن شد اشاره گر، به عنوان اینکه آن آدرس از یک تکه شد حافظه برای 16 کاراکتر می باشد. به طوری که می گویند، من می تواند عبور scanf که دقیقا کلمه و بنابراین در حال حاضر، اگر من را در این برنامه، را scanf 2، نقطه اسلش scanf 2، و نوع در سلام جهان، را وارد کنید، که time-- هوم، چه اتفاقی افتاد؟ رشته مدیر فروش. من چه اشتباهی کردم؟ سلام جهان، بافر شده است. سلام دنیا. آه، من می دانم آنچه در آن انجام. باشه. پس از آن به خواندن تا زمانی که فضا برای اولین بار. بنابراین اجازه دهید برای فقط یک لحظه تقلب و می گویند من فقط می خواستم به نوع چیزی واقعا طولانی مثل این یک جمله طولانی است که یک، دو، سه، چهار، پنج، شش، هفت، هشت، نه، 10، 11، 12، 13، 14، 15، 16. باشه. این در واقع یک جمله طولانی. بنابراین این جمله است بیش از 16 کاراکتر و تا زمانی که من ضربه را وارد کنید، چه اتفاقی خواهد افتاد؟ خب، در این مورد بافر داستان، من اعلام کرده بود در واقع به عنوان یک آرایه با 16 کاراکتر آماده برای رفتن. بنابراین یک، دو، سه، چهار، پنج، شش، هفت، هشت، نه، 10، 11، 12، 13، 14، 15، 16. بنابراین 16 کاراکتر، و در حال حاضر، زمانی که من خواندن در چیزی شبیه به این است طولانی جمله، چه اتفاقی خواهد افتاد است که من قصد دارم به خواندن در این است که یک مدت طولانی S-E-N-T-E-N-C-E، جمله. پس این است که به عمد یک چیز بد که من نوشتن فراتر از مرزهای آرایه من، فراتر از مرزهای بافر است. من می توانم خوش شانس و برنامه را دریافت کنید در حال اجرا را حفظ خواهد کرد و اهمیتی نمی دهند، اما به طور کلی، این در واقع سقوط برنامه من، و آن را یک اشکال در این است که من کد لحظه قدم من فراتر از مرزهای که آرایه، چون من نمی دانم اگر آن را لزوما به سقوط و یا اگر من فقط رفتن به خوش شانس. بنابراین این مسئله ساز است زیرا در این مورد، به نظر می رسد به کار و اجازه دهید سرنوشت دچار وسوسه اینجا، حتی اگر محیط برنامه نویسی به نظر می رسد بسیار کمی را تحمل از-- ما میرویم آنجا. در نهایت. بنابراین من تنها کسی است که می توانید این را ببینید. بنابراین من فقط به حال بسیاری از تایپ کردن سرگرم کننده کردن یک عبارت طولانی واقعی واقعا که آن را قطعا بیش از 16 بایت، چون من تایپ در این دیوانه طولانی چند خط عبارت و پس از آن متوجه چه اتفاقی افتاده است. این برنامه سعی چاپ آن و پس از آن یک گسل تقسیم بندی و گسل تقسیم بندی است که چیزی شبیه به این اتفاق می افتد و سیستم عامل می گوید هیچ، می تواند که حافظه را لمس کنید. ما قصد داریم برای کشتن برنامه در دسترس نباشد. بنابراین این مشکل به نظر می رسد. من این برنامه به موجب آن بهبود یافته ام حداقل برخی از حافظه، اما این به نظر می رسد به محدود از GetString تابع برای گرفتن رشته برخی از طول محدود 16. بنابراین اگر شما می خواهید برای حمایت از دیگر جملات بیشتر از 16 کاراکتر، چه کار میکنی؟ خب، شما می توانید افزایش اندازه این بافر به 32 یا این که به نظر می رسد نوع کوتاه است. چرا ما فقط آن 1،000 اما فشار است. پاسخ به طور مستقیم از آنچه که فقط اجتناب از این مشکل با ساخت بافر من بزرگتر، مانند 1،000 کاراکتر؟ با اجرای از GetString در این راه. چه خوب یا بد را در اینجا؟ آره؟ مخاطبان: اگر شما متصل تا مقدار زیادی از فضا و شما آن را استفاده نمی کند، سپس شما می توانید آن فضا دوباره اختصاص ندارد. دیوید مالان: کاملا. آن را بی فایده تا آنجا که اگر شما نمی در واقع نیاز به 900 از این بایت و در عین حال شما برای درخواست 1،000 در کل به هر حال، شما فقط مصرف حافظه بیشتر در کامپیوتر کاربر از شما نیاز به، و بعد از همه، برخی از شما در حال حاضر مواجه می شوند در زندگی که وقتی شما در حال اجرا تعداد زیادی از برنامه و آنها در حال خوردن تا مقدار زیادی از حافظه، این در واقع می تواند عملکرد و تجربه کاربر بر روی کامپیوتر. به طوری که نوعی راه حل تنبل، برای اطمینان، و برعکس، آن را نه تنها بی فایده است، چه مشکل هنوز باقی مانده است، حتی اگر من را بافر من 1،000؟ آره؟ مخاطبان: رشته طول 1،001 است. دیوید مالان: دقیقا. اگر رشته شما طول 1،001 است، شما مشکل دقیق همان، و با استدلال من، من فقط پس از آن 2000 را، اما شما نمی دانید که در پیشبرد چقدر بزرگ که باید باشد، و در عین حال، من باید کامپایل برنامه من قبل از اجازه دادن مردم استفاده و دانلود IT. بنابراین این دقیقا همان نوع از است چیزهای که تلاش می کند کتابخانه CS50 به ما کمک کند و ما فقط نگاه در برخی از زمینه پیاده سازی در اینجا، اما این CS50 نقطه C. این فایل است که بر روی CS50 IDE شده است تمام این هفته است که شما با استفاده از شده است. آن از قبل وارد شده و شما شده است با استفاده از آن به صورت خودکار طبیعت از داشتن فاصله L پرچم CS50 با صدای جرنگ جرنگ، اما اگر من در پایین حرکت را از طریق تمام این توابع، در اینجا از GetString، و فقط به شما یک را طعم و مزه چه خبر است، اجازه دهید یک نگاه سریع در پیچیدگی نسبی. این یک فوق العاده طولانی نیست تابع، اما ما نمی به فکر می کنم سخت در مورد همه چگونه در مورد گرفتن رشته است. بنابراین در اینجا بافر من و من است ظاهرا آن را مقداردهی اولیه به تهی. این، البته، است که همان ستاره کاراکتر، اما من تصمیم گرفتم در اجرای کتابخانه CS50 که اگر ما قصد داریم به به طور کامل پویا، من در پیش چه بزرگ از مطمئن شوید که کاربران رشته در حال رفتن به خواهید برای دریافت. بنابراین من قصد دارم برای شروع تنها با یک رشته خالی و من قصد دارم به ساخت تا به اندازه حافظه که من نیاز به تناسب رشته کاربر و اگر من لازم نیست به اندازه کافی، من قصد دارم به درخواست سیستم عامل برای حافظه بیشتر است. من قصد دارم به حرکت رشته خود به یک تکه بزرگتر از حافظه و من قصد دارم به انتشار و یا آزاد تکه به اندازه کافی زیادی از حافظه و ما فقط رفتن برای انجام این کار تکرار. بنابراین یک نگاه سریع، در اینجا فقط یک متغیر است با که من قصد دارم برای پیگیری از ظرفیت بافر است. چگونه بسیاری از بایت می توانم جا؟ در اینجا یک متغیر n با این که من قصد دارم برای حفظ آهنگ چند بایت در واقع در بافر و یا که کاربر تایپ کرده است. اگر شما این دیده ام و نه قبل از آن، شما توانید مشخص کنید که از یک متغیر مانند یک int بدون علامت است، که به عنوان نام نشان می دهد، معنی آن را غیر منفی، و چرا من همیشه می خواهید به زحمت مشخص که از نوع int است فقط یک int نیست، اما یک int بدون علامت است؟ این نوع int غیر منفی است. چه [نامفهوم] چیست؟ رسید این توصیف مقدار از حافظه است که می تواند [نامفهوم]. دیوید مالان: آره. بنابراین اگر من می گویند بدون علامت، این است که در واقع شما با دادن یک بیت از حافظه اضافی و به نظر می رسد نوع احمقانه، اما اگر شما یک بیت از حافظه اضافی، که معنی است که شما به عنوان بسیاری از دو برابر ارزش شما می تواند نشان دهنده، دلیل آن می تواند 0 یا 1. بنابراین به طور پیش فرض، یک int را می توان تقریبا منفی 2 میلیارد تمام راه تا مثبت 2 میلیارد. آن محدوده بزرگ هستند، اما آن را هنوز هم نوع بی فایده اگر شما فقط در مورد مراقبت اندازه، که فقط به طور مستقیم باید غیر منفی باشد یا مثبت یا 0، و سپس، چرا شما به هدر رفتن هستند 2 میلیارد مقادیر ممکن برای اعداد منفی اگر شما هرگز به استفاده از آنها. پس با گفتن بدون علامت، در حال حاضر از نوع int من می توانید بین 0 و 4 میلیارد باشد. بنابراین در اینجا فقط یک int C به دلایل است ما نمی خواهد به گرفتن فقط حال حاضر به عنوان به همین دلیل آن را به جای یک int یک کاراکتر، اما در اینجا جان کلام چه خبر در، و برخی از شما ممکن است با استفاده از، برای مثال، تابع fgetc حتی در pset چهار یا پس از آن، ما آن را ببینید دوباره در مجموعه ای مشکل پنج، fgetc خواندن خوب است چرا که به عنوان نام نوع، نوع arcanely نشان می دهد، این یک تابع است که می شود یک شخصیت و غیره، چه اساسا متفاوت مورد آنچه که ما در حال انجام در از GetString این است که ما با استفاده از scanf در به همان شیوه. ما فقط خزنده همراه گام به گام بیش از هر کاربر در تایپ، چرا که ما همیشه می توانید یکی اختصاص کاراکتر، و بنابراین ما می توانید با خیال راحت همیشه در یک نگاه کاراکتر در یک زمان، و سحر و جادو شروع به اینجا اتفاق می افتد. من قصد دارم به پایین حرکت به وسط این تابع فقط به معرفی خلاصه این تابع. بسیار شبیه به یک وجود دارد تابع malloc، وجود دارد یک تابع بازتخصیص که در آن بازتخصیص اجازه می دهد که یک تکه از حافظه شما دوباره اختصاص و آن را بزرگتر و یا کوچکتر. بنابراین داستان کوتاه مدت و با یک موج از دست من برای امروز، می دانند که آنچه از GetString در حال انجام است این نوع از جادویی و یا در حال رشد کاهش بافر به عنوان کاربر انواع در رشته خود است. بنابراین اگر نوع کاربر رشته کوتاه، این کد تنها به اندازه کافی اختصاص حافظه را به تناسب رشته است. اگر کاربر را نگه می دارد تایپ که من آن را دوباره و دوباره انجام و دوباره، خوب، اگر در ابتدا این بافر بزرگ و برنامه متوجه، به یک دقیقه صبر کنید، من از فضا هستم، آن را به دو برابر اندازه بافر و پس از آن اندازه بافر را دو برابر و کد می کند که دو برابر شدن، اگر ما در آن را در اینجا نگاه کنید، آن فقط این باهوش یک بوش. شما ممکن است دیده نمی این نحو قبل از، اما اگر شما می گویند ستاره برابر، این همان چیزی است گفت برابر ظرفیت 2. پس از آن فقط نگه می دارد دو برابر شدن ظرفیت بافر و پس از آن گفتن بازتخصیص به خود که حافظه خیلی بیشتر. در حال حاضر، به عنوان یک کنار، وجود دارد توابع دیگر در اینجا که ما نمی خواهد به هر جزئیات نگاه کنید به غیر از نشان در GetInt، ما استفاده از GetString در GetInt. ما بررسی کنید که آن را نه تهی، که، به یاد بیاورید، ارزش ویژه ای است که به معنی چیزی را اشتباه رفت. ما از حافظه است. بهتر که تیک بزنید. و ما بازگشت به یک مقدار نگهبان. اما من به نظر که به تسلیم چرا و سپس ما استفاده از این پسر عموی scanf نام sscanf و آن را تبدیل کردن که scanf از sscanf و یا رشته، شما اجازه می دهد نگاهی به خط که کاربر در تایپ و به شما اجازه تجزیه و تحلیل آن در اصل و آنچه من در اینجا میخواهیم من از sscanf گفتن، تجزیه و تحلیل هر کاربر است تایپ و مطمئن شوید که در٪ من، یک عدد صحیح در آن وجود دارد، و ما نمی خواهد وارد شدن به امروز دقیقا به همین دلیل نیز وجود دارد یک درصد C در اینجا، اما به طور خلاصه اجازه می دهد تا ما برای شناسایی کاربر تایپ شده است در چیزی پس از شماره ساختگی. بنابراین به این دلیل که GetInt و از GetString به شما بگویم دوباره امتحان کنید، سعی مجدد، دوباره سعی کنید است، زیرا از همه که کد ما نوشته شده، این نوع از نگاه ورودی کاربر در مطمئن و آن را به طور کامل عددی و یا آن را به یک شناور واقعی است ارزش نقطه یا مانند آن، با توجه به آنچه ارزش عملکرد شما با استفاده از. بگیرد. باشه. که یک لقمه بود اما نکته در اینجا این است که به همین دلیل ما به حال آن چرخ در آموزش است، زیرا در پایین ترین سطح، فقط چیزهای بسیاری وجود دارد که می تواند به اشتباه که ما می خواستیم به رسیدگی پیشگیرانه کسانی که همه چیز قطعا در اولین هفته از کلاس، اما در حال حاضر با pset چهار و پنج و PSet فراتر خواهد شما می بینید که آن را بیشتر نزد شما بلکه شما قادر هستید بیشتر حل آن مشکلات خودتان. هر گونه سوال در از GetString یا GetInt؟ آره؟ مخاطبان: چرا شما دو برابر ظرفیت بافر و نه تنها افزایش آن را در مقدار دقیق؟ دیوید مالان: پرسش خوبی است. چرا ظرفیت ما دو برابر از بافر به عنوان مخالف فقط آن را افزایش به توسط برخی از مقدار ثابت؟ این یک تصمیم انجام شد. ما فقط تصمیم گرفت که دلیل آن را به سمت کمی گران هم عاقلانه به درخواست سیستم عامل برای حافظه، ما نمی می خواهید برای پایان دادن به وارد شدن به یک وضعیت برای رشته بزرگ که ما درخواست شد سیستم عامل دوباره و دوباره و دوباره و دوباره در سریع برای حافظه است. بنابراین ما فقط تا حدودی خودسرانه اما ما امیدواریم که منطقی، که شما می دانید چه، اجازه دهید سعی کنید به جلو از خودمان و فقط دو برابر آن را به طوری که ما مقدار بار به حداقل رساندن ما باید به malloc تماس بگیرید و یا بازتخصیص، اما قضاوت مجموع پاسخ در غیاب دانستن آنچه که کاربران ممکن است بخواهید به نوع در. هر دو راه می تواند قابل بحث. مسلما خوب است. بنابراین اجازه دهید نگاهی به یک زن و شوهر از دیگر از عوارض جانبی حافظه، چیزهایی که اشتباه می تواند به و ابزار است که شما می توانید استفاده از برای گرفتن این نوع از اشتباهات. به نظر می رسد همه شما، حتی اگر check50 به شما گفته است نه به اندازه، نوشتن شده است حشره دار کد از هفته یکی، حتی اگر تمام آزمون check50 هستند گذشت، و حتی اگر شما و TF خود را فوق العاده اعتماد به نفس که کد شما کار می کند به عنوان در نظر گرفته شده. و یا کد خود را تا حشره دار است ناقص در آن همه از شما، در استفاده از کتابخانه CS50، اند نشت حافظه شده است. شما شده است درخواست سیستم عامل برای حافظه در بسیاری از برنامه های شما نوشته شده است، اما شما در واقع هرگز به آن داده است. شما از GetString به نام ام و GetInt و GetFloat، اما با از GetString، شما هرگز به نام unGetString و یا به رشته برگشت و یا مانند آن، اما ما دیده ایم که GetString کند تخصیص حافظه از طریق این تابع malloc و یا تابع بازتخصیص، است که فقط بسیار مشابه در روح، و در عین حال، ما شده ایم درخواست سیستم عامل برای حافظه و حافظه دوباره و دوباره اما هرگز آن را به تماس. در حال حاضر، به عنوان یک کنار، معلوم است که هنگامی که یک برنامه واریز شده، همه از حافظه به طور خودکار آزاد می شود. پس از آن یک معامله بزرگ شده است. آن را به شکستن IDE و یا کند شدن کارها، اما زمانی که برنامه ها به طور کلی نشت حافظه و آنها در حال اجرا برای یک مدت طولانی. اگر شما تا کنون دیده ام کمی احمقانه توپ های ساحل در سیستم عامل مک و یا ساعت شنی بر روی ویندوز که در آن این نوع از کم کردن سرعت یا فکر و یا تفکر و یا فقط واقعا شروع می شود به کم به خزیدن، آن را بسیار احتمالا می تواند باشد در نتیجه نشت حافظه. برنامه نویسان که نوشت نرم افزار شما با استفاده از درخواست سیستم عامل برای حافظه هر چند دقیقه، هر ساعت. اما اگر شما در حال اجرا نرم افزار، حتی اگر آن را به حداقل برسد در کامپیوتر شما برای ساعت یا چند روز در پایان، شما ممکن است برای بیشتر و بیشتر درخواست حافظه و در واقع هرگز با استفاده از آن و به همین ترتیب کد شما ممکن است، یا برنامه ممکن است نشت حافظه، و اگر شما شروع به نشت حافظه، این حافظه کمتر برای برنامه های دیگر وجود دارد، و اثر است که به همه چیز کم کردن سرعت. در حال حاضر، این است که تا بحال یکی از برنامه های بی رحمانه ترین شما فرصت دارند به اجرا در CS50 تا آنجا به عنوان خروجی آن است که حتی باطنی بیش از در صدای جرنگ جرنگ و یا یا هر یک از دستور برنامه خط ما قبل از اجرا، اما خوشبختانه، جاسازی شده در خروجی آن برخی از راهنمایی فوق العاده مفید است که یا برای PSet چهار مفید باشد یا قطعا PSet پنج. بنابراین valgrind را یک ابزار است است که می تواند مورد استفاده قرار گیرد به نگاه برای نشت حافظه در برنامه شما. این نسبتا ساده را اجرا کنند. شما اجرا valgrind را و پس از آن، حتی اگر آن را طولانی کمی، فاصله چک نشت خط تیره برابر کامل، و پس از آن نقطه بریده بریده و نام برنامه خود را. بنابراین valgrind را پس از آن برنامه خود را اجرا خواهد شد و در پایان از برنامه خود را در حال اجرا قبل از آن واریز شده و به شما می دهد یکی دیگر از سریع، آن را به تجزیه و تحلیل خود را برنامه در حالی که آن در حال اجرا است و به شما بگویم شما نشت بود هر حافظه و بهتر است، آیا حافظه شما را لمس که به شما تعلق ندارند؟ می تواند همه چیز را متوجه نشدم، اما آن را خیلی خوب در ابتلا به بسیاری از چیزها. بنابراین در اینجا یک مثال از داشتن اجرا من این برنامه، داشتن اجرا valgrind را، در برنامه ای به نام حافظه، و من قصد دارم به برجسته خطوط که در نهایت از علاقه به ما. بنابراین حواس او را پرت حتی بیشتر وجود دارد که من از اسلاید را حذف کرده اید. اما اجازه دهید فقط این را ببینید برنامه قادر به ما می گوید است. آن را قادر به گفتن ما همه چیز دوست ارسال نامعتبر اندازه 4. به عبارت دیگر، اگر شما حافظه را لمس کنید، به طور خاص 4 بایت از حافظه که شما باید نداشته باشند، valgrind را می توانید به شما بگویم که. ارسال نامعتبر اندازه 4. شما چهار بایت لمس که شما باید ندارد. که در آن شما را انجام داد؟ این زیبایی است. نقطه حافظه خط C 21 است که در آن شما پیچ و به همین دلیل آن را مفید. بسیار شبیه به GDB، می تواند کمک اشاره شما در خطا واقعی. در حال حاضر، این یک کمی بیشتر است طولانی، اگر گیج کننده است. 40 بایت در 1 بلوک قطعا از دست رفته در سابقه از دست دادن 1 از 1 معنی آن چیست؟ خوب، آن را فقط به این معنی شما خواسته 40 بایت و شما هرگز آن را به تماس. شما به نام از malloc و یا شما به نام GetString و سیستم عامل شما 40 بایت، اما شما به هرگز آزاد یا آزاد که حافظه، و به عادلانه باشد، ما هرگز نشان را شما چگونه به تماس حافظه است. معلوم فوق العاده وجود دارد تابع ساده به نام رایگان است. یک آرگومان، چیزی شما می خواهید برای آزاد و یا به تماس، اما 40 بایت، ظاهرا، در این برنامه در خط از دست رفته است 20 نقطه از حافظه ج بنابراین اجازه دهید این برنامه را مشاهده کنید. این فوق العاده بی فایده است. این تنها نشان می دهد این خطا است. بنابراین اجازه دهید نگاهی به. در اینجا اصلی و اصلی، اطلاع، تماس است یک تابع به نام بازده f و سپس. بنابراین نه همه که جالب است. چه F را انجام دهد؟ توجه داشته باشید من با یک نمونه اولیه را خسته نکنید. من می خواستم برای حفظ کد تا حد امکان. بنابراین من F بالا اصلی قرار داده و که خوب است، قطعا، برای برنامه های کوتاه مدت مثل این. بنابراین F هیچ چیزی نمی کند و بازگشت هر چیزی، اما آن را انجام این کار. این اعلام، بسیار شبیه به در مثال Binky، یک اشاره گر به نام x که رفتن برای ذخیره آدرس از نوع int. به طوری که سمت چپ است. در انگلیسی، چیزی است که سمت راست انجام می دهند؟ هر کسی؟ آنچه که این کار را برای ما؟ آره؟ مخاطبان: [نامفهوم] برابر اندازه یک int که 10 بار که [نامفهوم] دیوید مالان: خوب و اجازه دهید من به طور خلاصه. بنابراین اختصاص فضای کافی برای 10 عدد صحیح یا 10، چه اندازه از نوع int است، آن چهار بایت، بنابراین 10 برابر 4 است 40، به طوری که سمت راست است که من برجسته شده است من 40 بایت می دهد و ذخیره آدرس اولین بایت به x. و در حال حاضر در نهایت، و در اینجا است که این برنامه این است حشره دار، چه با خط 21 این منطق است؟ چه اشتباه با خط 21 است؟ آره؟ مخاطبان: شما نمی توانید شاخص را به X [نامفهوم]. دیوید مالان: آره. من باید شاخص را به X چیزی نیست که. بنابراین از لحاظ دستوری، که خوب. چه خوب است، بسیار شبیه به شما می توانید نام یک آرایه درمان به عنوان اینکه یک اشاره گر، به طور مشابه می توانید یک اشاره گر شما به عنوان هر چند آن را یک آرایه، و بنابراین من می توانید به نحوی می گویند عدد براکت چیزی، X براکت من، اما 10 مشکل ساز است. واسه چی؟ رسید آنجا که آن را در داخل است. دیوید مالان: این نه در داخل آن تکه از حافظه. بزرگترین مقدار چه خبر من باید در آن براکت قرار دادن؟ 9، 0 تا 9. از آنجا که از صفر نمایه سازی. بنابراین 0 تا 9 خواهد بود خوب. براکت 10 خوب نیست و اما، به یاد هر چند، هر زمان من به نظر می رسد را امتحان کنید تا CS50 IDE تصادف با تایپ کردن در ارزش ساختگی، آن را همیشه همکاری نمی کنند، و در واقع، شما اغلب خوش شانس فقط به خاطر سیستم عامل نیست توجه کنید که شما همیشه تا کمی تصویب برخی از تکه از حافظه، دلیل این که شما در آنجا ماند فنی بخش خود را، اما بیشتر در در یک کلاس سیستم عامل، و به همین ترتیب چیزی شبیه به این می تواند به راحتی به کشف نشده. برنامه های خود را هرگز به سقوط به طور مداوم اما شاید یک بار در چندی. و بنابراین اجازه دهید سعی کنید valgrind را در این، و در اینجا که در آن ما غرق دریافت کنید توسط خروجی لحظه ای. بنابراین بررسی حافظه نشت valgrind را را برابر حافظه پر نقطه اسلش. و در اینجا به همین دلیل من قول می دهم این پایمال کردن. در اینجا چیزی است valgrind را، در اینجا چیزی یک برنامه نویس، چند سال ago- تصمیم گرفت که می تواند ایده خوبی برای خروجی به شبیه. بنابراین اجازه دهید حس این. به طوری که تمام راه را در چپ دست سمت بدون هیچ دلیل خوب شناسه فرآیند از این برنامه است ما فقط اجرا، شناسه منحصر به فرد برای برنامه ما فقط زد. ما از حذف که اسلاید، اما وجود دارد برخی از اطلاعات مفید در اینجا است. بیایید تا حرکت به بالا بسیار. اینجا جایی است که ما آغاز شد. پس از آن همه خروجی که بسیار نیست. در اینجا است که نوشتن نامعتبر اندازه 4 در خط 21. خب، چه خط 21 بود. خط 21 دقیقا این و آن را حس که من در معتبر هستم نوشتن 4 بایت چون من تلاش برای قرار دادن این عدد صحیح، که می تواند هر چیزی باشد، آن را فقط اتفاق می افتد صفر است، اما من سعی می کنم آن را قرار داده در یک محل که به من تعلق ندارد. علاوه بر این، در اینجا، 40 بایت در یک بلوک قطعا در رکورد 1 از دست داد. دلیلش این است که وقتی که من malloc تماس بگیرید در اینجا، من در واقع هرگز حافظه آزاد. پس چگونه می تواند ثابت؟ اجازه دهید من پیش بروید و کمی امن تر و 9 وجود دارد و به من اجازه دهید در اینجا رایگان X. این تابع جدید برای امروز است. اگر در حال حاضر دوباره حافظه نقطه اسلش، اجازه دهید اجرا valgrind را بر روی آن دوباره، حداکثر رساندن پنجره و Enter را بزنید. در حال حاضر، این خوب است. آنها خبر خوب دفن در تمام این خروجی. تمام بلوک پشته آزاد بودند. ما به آنچه پشته آمده است، اما هیچ نشت امکان پذیر است. بنابراین این فقط یکی دیگر ابزار برای جعبه ابزار خود را که با آن شما می توانید شروع به پیدا کن خطاهای شبیه به آن. اما بیایید ببینید که چه می توانید بیشتر اشتباه اینجا بروید. بیایید انتقال در حال حاضر به در واقع حل مشکل. از سوی دیگر، اگر این خواهد از بین بردن کمی از سردرگمی و یا تنش، این در حال حاضر خنده دار. آره. این خیلی خوب است. از آنجا که اشاره گر آدرس و آدرس به طور کلی توسط کنوانسیون نوشته شده با مبنای شانزده است. هکتار، هکتار، این خنده دار است. به هر حال، پس بیایید با شرکت در واقع یک مشکل را حل کند. این فوق العاده است، فوق العاده سطح پایین تا کنون، و ما در واقع می توانید انجام دهید مفید همه چیز را با این جزئیات سطح پایین. بنابراین ما معرفی چند هفته پیش مفهوم یک آرایه. یک آرایه خوب بود چون آن را سخت به تمیز کردن کد ما چرا که اگر ما می خواستیم به ارسال برنامه با دانش آموزان چند یا نام های متعدد و خانه ها و خوابگاه ها و کالج ها و همه از آن، ما می تواند همه چیز بیشتری ذخیره پاک داخل یک آرایه. اما پیشنهاد یک حرکت نزولی از یک آرایه تا کنون. حتی اگر شما خودتان آن را رنج می برد که در یک برنامه، فقط به طور غریزی، چه چیز بدی است در مورد یک آرایه، شاید؟ من مقداری سوفل بشنود. رسید این مشکل برای تغییر اندازه. دیوید مالان: این مشکل برای تغییر اندازه. شما می توانید اندازه را تغییر دهید از یک آرایه، در واقع، در هر سه در C. شما می توانید یک آرایه تخصیص، حرکت همه چیز از یکی از قدیمی به جدید، و در حال حاضر برخی از فضای اضافی، اما آن را دوست ندارد زبان جاوا یا پایتون مانند و یا هر تعداد دیگر زبان با که برخی از شما ممکن است آشنا که در آن شما می توانید فقط اضافه کردن چیز تهوع آور به پایان یک آرایه. هنگامی که شما یک مجموعه ای از اندازه 6، این است که اندازه آن، و خیلی دوست دارم این ایده زودتر داشتن یک بافر یک اندازه خاص، شما باید به خارج از دروازه حدس می زنم چه اندازه ای که می خواهید آن را به؟ اگر شما حدس بزنید بیش از حد بزرگ، شما به هدر رفتن فضا. اگر شما حدس بزنید بیش از حد کوچک، شما می می توانید که داده ها را ذخیره نیست، حداقل بدون خیلی بیشتر کار می کنند. بنابراین، امروز، به لطف اشاره گر، ما می توانیم شروع دوخت با هم سفارشی خود ما ساختمان داده، و در واقع، در اینجا چیزی است که به نظر می رسد کمی بیشتر مرموز در نگاه اول، اما این چیزی است که ما یک مرتبط لیست، و نوع نام خود را از خلاصه IT. این یک لیست از اعداد، و یا در این مورد، یک لیست از اعداد، اما می تواند یک لیست از هر چیزی، اما آن هم از طریق فلش مرتبط است، و فقط یک حدس را با چه روش می خواهیم به قادر به کوک با هم، نوع مانند ذرت بو داده با یک موضوع، مرتبط لیست مستطیل که اینجا هستید؟ شماره خود را؟ از ویژگی های زبان زیر چیست؟ رسید یک اشاره گر. دیوید مالان: یک اشاره گر. بنابراین هر یک از این فلش در اینجا نشان دهنده یک اشاره گر و یا فقط یک آدرس. بنابراین به عبارت دیگر، اگر من می خواهم برای ذخیره یک لیست از اعداد، من فقط می توانید آن را ذخیره اگر من می خواهم توانایی رشد و کوچک ساختار داده ها در یک آرایه. بنابراین من نیاز به یک کمی پیچیدگی بیشتر، اما توجه کنید که این تصویر نوع نشان می دهد که اگر شما فقط کردم موضوعات کمی اتصال همه چیز با هم، احتمالا این است که سخت نیست برای ایجاد فضا در بین دو تا از آن مستطیل و یا دو نفر از این گره ها، به عنوان ما شروع تماس آنها، در یک گره جدید قرار داده است، و پس از آن با برخی از موضوع های جدید، فقط سه گره خندق با هم، یکی از اولین، یکی از آخرین، و یکی از که شما فقط به وسط قرار داده است. و در واقع یک لیست پیوندی، بر خلاف یک آرایه، پویا است. آن می تواند رشد و آن را می توانید کوچک و شما نمی باید بدانید که یا مراقبت در چگونه داده ها بسیار شما در حال رفتن به ذخیره سازی می شود، اما معلوم است ما باید کمی مراقب باشید در مورد چگونگی پیاده سازی این. بنابراین برای اولین بار اجازه دهید در نظر چگونه پیاده سازی ما یکی از این مستطیل کوچک. آن را آسان به پیاده سازی یک int است. شما فقط می گویند از نوع int n و پس از آن شما می توانید 4 بایت برای یک int، اما چگونه می توانم یک int را دریافت کنم، آن را N، و پس از آن یک اشاره گر، اجازه دهید آن را بعدی. ما می تواند این پاسخ همه چیز هر چیزی که ما می خواهیم اما من نیاز به یک ساختار داده های سفارشی. آره؟ مخاطبان: امپرسند [نامفهوم]. DAVID مالان: پس علامت می کنیم برای استفاده خواهد دریافت آدرس از یک گره به طور بالقوه. اما ما دیگر نیاز از ویژگی های C در به من توانایی ایجاد را این مستطیل سفارشی، سفارشی این متغیر اگر شما خواهد شد، در حافظه است. مخاطبان: یک ساختار. دیوید مالان: یک ساختار. به یاد بیاورید از هفته گذشته، ما معرفی ساختار، این کلمه کلیدی نسبتا ساده که اجازه می دهد ما را چیزهایی مثل این. C با یک داده می آیند ساختار به نام دانش آموز. آن را با int و float و char و می آید از جمله، اما آن را با دانش آموز نیست، اما ما می توانیم یک نوع داده به دانشجویان را، ساختار دانش آموز، با این نحو اینجا. و شما این را دوباره و دوباره ببینید. بنابراین در مورد نگران نباشید به خاطر سپردن کلمات کلیدی، اما کلیدی که مهم است این است فقط این واقعیت است که ما گفت: ساختار و سپس ما آن دانش آموز به نام و در داخل از دانش آموز یک نام و یک خانه بود و یا یک خوابگاه و یا مانند. و بنابراین در حال حاضر، اجازه دهید این پیشنهاد. من اضافه شده یک چند کلمه، اما اگر من می خواهم برای پیاده سازی این مستطیل که کردم هر دو از نوع int و یک اشاره گر، شما می دانید چه، من رفتن به اعلام یک ساختار به نام گره است. من هم، در داخل آن، رفتن به می گویند که یک گره، این مستطیل، یک int است و ما آن را n و پاسخ آن را به یک اشاره گر است. و این است که کمی طولانی، اما اگر شما در مورد آن فکر می کنم، فلش که در تصویر بود یک لحظه پیش از چه نوع داده است؟ که در آن هر یک از این فلش است با اشاره به چه نوع ساختار داده؟ آن را فقط به int در هر سه گیری نمی کنند. آن را با اشاره به همه چیز مستطیل شکل و آن چیزی که مستطیل شکل، ما گفت: به عنوان یک node نامیده می شود. و بنابراین ما از به به صورت بازگشتی تعریف این چنین که یک گره، ما باید گفت، یک نوع int به نام N شامل و یک اشاره گر به نام بعدی و نوع ساختار داده که که اشاره گر است که ظاهرا رفتن به ساختار گره. پس این است که آزاردهنده طولانی و فقط به موشکاف، به همین دلیل ما نمی توانیم فقط می گویند این است که رک و پوست کنده نظر می رسد بسیاری بیشتر قابل خواندن، است، زیرا به یاد بیاورید که C به عنوان خوانده شده همه چیز بالا به پایین، چپ به راست. آن را تا زمانی که ما نقطه و ویرگول نیست که گره کلمه کلیدی واقع وجود دارد. بنابراین اگر ما می خواهیم به این نوع از مرجع دوره ای در داخل از داده ساختار، ما را به انجام این کار، که در آن ما می گویند ساختار گره در بالا، که ما می دهد یک راه دیگر برای توصیف این چیزی، سپس در داخل ما می گویند ساختار گره، و سپس در خط بسیار آخرین ما می گویند، همه حق، C، توسط راه، فقط تماس بگیرید طیف این لعنتی چیزی که یک گره و توقف با استفاده از ساختار کلمه کلیدی در دسترس نباشد. پس این است که فقط از یک نحوی مرتب سازی بر ترفند که در نهایت اجازه می دهد تا به ما در ایجاد چیزی است که به نظر می رسد دقیقا مانند این. بنابراین اگر ما حال فرض کنید ما می توانیم پیاده سازی این چیزی که در C، چگونه ما در واقع شروع تراورس این؟ خوب، در واقع، همه ما باید انجام دهیم این است تکرار از چپ به راست و فقط نوع قرار دادن گره ها یا حذف گره و یا جستجو برای همه چیز هر کجا که ما می خواهیم، اما برای انجام این کار، اجازه دهید به جلو و همه چیز کمی بیشتر واقعی به دلیل این شده است فوق العاده سطح پایین تا کنون. آیا کسی به معنای واقعی کلمه دوست اول می شود؟ باشه. بیا بالا. نام شما چیست؟ DAVID: دیوید. دیوید مالان: دیوید. از آشنایی با شما خرسندم. من هم همینطور. خیلی خوب. و ما نیاز به یک شماره 9. نه به عنوان خوب به عنوان اولین، شاید. OK، شماره 9. تعداد 17، لطفا. اجازه بدهید به عقب به کمی دورتر. شماره 22، لطفا، و چگونه در مورد دورتر پشت اگر من می توانم هر دست ببینید با همه نور و یا هیچ. کسی که داوطلب سمت راست وجود دارد. آیا شما می خواهید به آمده تا؟ ساعد خود را به زور بالا رفتن است. OK، 17. 22. 26 در حال پایین آمدن. دوست هر کس دیگری به forcefully-- بیا. یک داوطلب واقعی. بنابراین اگر بسیار به سرعت، شما بچه ها می تواند ترتیب خودتان را درست مثل گره بر روی صفحه نمایش. متشکرم. و به شما امکان 26. همه معرفی درست و سریع است. بنابراین من دیوید هستم و شما همچنین می باشد؟ DAVID: دیوید. دیوید مالان: و شما؟ JAKE: جیک. سو: سو. ALEX: الکس. رافائل: رافائل. تیلور: تیلور. دیوید مالان: تیلور. بسیار عالی است. بنابراین این داوطلبان ما برای امروز و پیش بروید و تغییر کمی که راه، و فقط به جلو و حفظ برگزاری اعداد خود را به عنوان شما هستند و یا خود را اولین نشانه و با استفاده از دست چپ خود را، جلو بروید و فقط پیاده سازی این فلش، فقط به طوری که دست چپ خود را به معنای واقعی کلمه اشاره در هر آنچه که شما باید به این نکته در، و خود را به برخی از اتاق به طوری که به ما بصری می تواند سلاح های خود را در واقع دیدن اشاره، و شما فقط می توانید نقطه مرتب کردن بر اساس در زمین خوب است. بنابراین در اینجا ما یک لیست پیوندی یک، دو، سه، چهار، پنج گره در ابتدا، و متوجه ما این ویژه اشاره گر در آغاز که کلید چرا که ما برای پیگیری از کل لیست طول نحوی. این افراد، حتی اگر آنها را ترک به راست، پشت به پشت در حافظه، آنها در واقع می تواند در هر نقطه در حافظه کامپیوتر است. خوب این افراد می تواند ایستاده در هر نقطه بر روی صحنه و این خوب است، تا زمانی که آنها در واقع در یکی دیگر اشاره، اما برای نگه داشتن چیزهای پاک و ساده، ما فقط آنها را جلب چپ به راست مانند این، اما می تواند شکاف عظیم وجود دارد در بین کسانی که گره. در حال حاضر، اگر من می خواهم به واقع قرار دادن برخی از ارزش های جدید، اجازه دهید به جلو و انجام این کار. ما در حال حاضر یک فرصت داشته باشند برای انتخاب گره دیگر است. می گویند اجازه دهید شروع کردن با mallocing 55. آیا کسی ذهن از malloc؟ خوب، در آمده است. نام شما چیست؟ رنگین کمان: رنگین کمان. دیوید مالان: رنگین کمان؟ خیلی خوب. از malloc رنگین کمان. بیا بالا. بنابراین در حال حاضر ما باید از خود بپرسیم الگوریتمی که در آن ما می توانیم 55 قرار داده است. بنابراین همه ما می دانیم، بدیهی است، جایی که او احتمالا متعلق اگر ما در حال تلاش برای حفظ این طبقه بندی شده اند و اگر شما بچه ها می تواند یکی را قدم به عقب بنابراین ما نمی افتد صحنه، که بزرگ خواهد بود. پس در واقع، رنگین کمان، بیش از شروع در اینجا با من، چرا که ما به عنوان کامپیوتر هم اکنون می توانید تنها یک متغیر در یک زمان را مشاهده کنید. بنابراین اگر این اولین گره است. توجه داشته باشید او یک گره است، او فقط یک اشاره گر، و به همین دلیل او کشیده می شود تنها به اندازه یک اشاره گر، نه یکی از کسانی که مستطیل کامل است. بنابراین ما قصد داریم به بررسی در هر تکرار 55 کمتر از 9؟ شماره 55 کمتر از 17؟ شماره کمتر از 22؟ کمتر از 26؟ کمتر از 34؟ و بنابراین در حال حاضر، بدیهی است رنگین کمان متعلق در پایان. بنابراین به روشن، و آنچه نام شما، تیلور بود؟ تیلور: تیلور. دیوید مالان: بنابراین در میان تیلور دست چپ و دست رنگین کمان در اینجا، که دست نیاز به نقطه و آن چه در به منظور قرار دادن 55 به این لیست؟ چه چیزی ما باید انجام دهید؟ آره؟ رسید از دست تیلور نیاز به نقطه سمت چپ. دیوید مالان: دقیقا. بنابراین قرار دادن یک گره به انتهای لیست بسیار ساده است چرا که تیلور فقط به نقطه، به جای در زمین و یا ما آن را تهی، null را بر فقدان است از یک اشاره گر یا ویژه صفر اشاره گر، شما رفتن به نقطه با چپ خود را دست در رنگین کمان و سپس رنگین کمان، از کجا باید چپ خود را دست احتمالا نقطه؟ پایین. این خوب است اگر دست خود را مرتب سازی بر اساس از اشاره کردن در اینجا و یا از هر کدوم راه. که در نظر گرفته شود یک مقدار زباله، اما اگر او به نقاط برخی از ارزش شناخته شده، ما آن صفر یا null، که خوب چرا که ما یک مدت در این و ما می دانیم که لیست در حال حاضر کامل است. پس چه دیگر مورد نسبتا ساده است؟ آیا ما می توانیم از malloc 5؟ بیا بالا. نام شما چیست؟ تیفانی: تیفانی. دیوید مالان: ببخشید؟ تیفانی: تیفانی. دیوید مالان: تیفانی. خیلی خوب. تیفانی است malloced شده است با مقدار 5. بیا بالا. این یکی نسبتا آسان است، اما اجازه دهید منظور از عملیات در نظر است. آن را بسیار آسان بود با تیلور در پایان. شماره 5 است که البته کمتر از 9، و بنابراین ما باید دیوید، ما باید تیفانی، و چه نام شما بود؟ JAKE: جیک. دیوید مالان: جیک. تیفانی، جیک، و دیوید. که دست باید اول به روز شده؟ چه چیزی می خواهید برای انجام در اینجا؟ راه های ممکن است یک زن و شوهر وجود دارد، اما همچنین یک یا راه های اشتباه بیشتر وجود دارد. مخاطبان: شروع با سمت چپ. دیوید مالان: شروع با سمت چپ. که سمت چپ را در اینجا پس از آن؟ مخاطبان: اول. دیوید مالان: OK. بنابراین با اولین بار شروع و جایی که شما انجام می خواهید برای به روز رسانی دست دیوید می شود؟ رسید به سوی 5. دیوید مالان: OK. پس داود، نقطه در پنج و یا تیفانی در اینجا، و در حال حاضر؟ مخاطبان: تیفانی اشاره به 9؟ دیوید مالان: کامل، به جز در Binky سر فقط نوع سقوط کردن، درست است؟ از آنجا که چه چیزی اشتباه است با این تصویر به معنای واقعی کلمه. مخاطبان: هیچ چیز اشاره. دیوید مالان: هیچ چیز با اشاره به جیک در حال حاضر. ما به معنای واقعی کلمه یتیم که 9 و 17، و ما به معنای واقعی کلمه را به بیرون درز همه از این حافظه، چرا که با به روز رسانی دستان داوود اول، که خوب تا آنجا که آن را به درستی اشاره در تیفانی در حال حاضر، اما اگر هیچ کس تا به حال پیش بینی به نقطه در جیک، پس از آن ما از دست داده ام کل این لیست. بنابراین اجازه دهید لغو کنید. به طوری که یک چیز خوب بود سفر بیش از اما اجازه دهید در حال حاضر درست. چه باید کرد برای اولین بار به جای؟ آره؟ مخاطبان: تیفانی باید در 9 نقطه؟ دیوید مالان: من نمی توانم که نزدیک به شما. چه کسی باید در 9 نقطه؟ مخاطبان: تیفانی. دیوید مالان: بسیار خوب. بنابراین باید به این نکته تیفانی برای اولین بار در 9. بنابراین باید تیفانی در یک مقدار یکسان به دیوید، به نظر می رسد که کار برکنار شده برای یک لحظه، اما این خوب چون در حال حاضر، دوم گام به گام، ما می توانیم دست دیوید را به روز رسانی به نقطه در تیفانی، و سپس اگر ما فقط نوع تمیز کردن کارها به عنوان اینکه این نوع از مانند بهار است، در حال حاضر که ورود صحیح است. بنابراین بسیار عالی است. بنابراین در حال حاضر ما تقریبا وجود دارد. اجازه دهید وارد کردن یکی از نهایی ارزش مانند ارزش 20. اگر ما می تواند یک داوطلب نهایی از malloc؟ بیا بالا. پس این یکی کمی مشکل تر است. اما در واقع، کد ما نوشتن، البته کلامی، درست مثل داشتن یک دسته از اگر شرایط در حال حاضر، درست است؟ ما یک بیماری بود چک کردن اگر آن متعلق در پایان، شاید در ابتدا. ما نیاز به برخی از انواع حلقه به پیدا کردن نقطه در وسط. بنابراین اجازه دهید که با نام شما چیست؟ ERIC: اریک. دیوید مالان: اریک؟ اریک. از آشنایی با شما خرسندم. بنابراین ما باید 20. کمتر از پنج؟ شماره کمتر از نه؟ شماره کمتر از 17؟ شماره باشه. او در اینجا تعلق دارد و نام خود را دوباره است؟ سو: سو. دیوید مالان: سو. ALEX: الکس. دیوید مالان: سو، الکس، و؟ ERIC: اریک. دیوید مالان: اریک. دست که نیاز به به روز رسانی برای اولین بار؟ مخاطبان: اریک. باشه. بنابراین اریک باید در جایی که نقطه؟ در 22. خوب است. و در حال حاضر چه بعدی؟ سو پس از آن می توانید در اریک اشاره و در حال حاضر، اگر شما بچه فقط برخی از اتاق، که خوب است بصری، در حال حاضر ما در درج انجام داده ام. بنابراین اجازه دهید حال حاضر یک سوال در نظر اما از شما متشکرم برای داوطلبان ما. خیلی خوب انجام شده. شما می توانید آن را نگه دارید، اگر دوست دارید. و ما یک هدیه فراق دوست داشتنی اگر شما می خواهم هر خواهم یک توپ استرس. اجازه بدهید من این تصویب پایین. پس چه غذای آماده از این است؟ این به نظر می رسد شگفت انگیز تا آنجا که ما در حال حاضر معرفی یک جایگزین به آرایه است که تا محدود نمی به آرایه ای از برخی از اندازه ثابت. آنها به صورت پویا می تواند رشد کند. اما بسیار شبیه به ما در هفته دیده می شود گذشته، ما هرگز چیزی را به صورت رایگان، مانند مطمئنا یک تجارت کردن در اینجا وجود دارد. بنابراین با یک حرکت صعودی مرتبط لیست، این پویایی است؟ این توانایی رشد و رک و پوست کنده، ما می تواند حذف انجام داده اند و ما می تواند کوچک به عنوان مورد نیاز است. چه قیمت پرداخت می کنیم؟ دو بار به عنوان فضای زیادی، اول از همه. اگر شما به تصویر نگاه کنید، دیگر من ذخیره سازی یک لیست از اعداد صحیح. من ذخیره سازی یک لیست از اعداد صحیح به همراه اشاره گر. بنابراین من دو برابر شدن مقدار از فضا. در حال حاضر، شاید که چنین نیست یک معامله بزرگ 4 بایت، 8 بایت اما قطعا می تواند اضافه برای مجموعه داده های بزرگ. زیان دیگر چه خبر؟ آره؟ مخاطبان: ما به گذشتن آنها را یکی یکی. دیوید مالان: آره. ما باید به آنها گذشتن یک توسط یک. شما می دانید چه، ما داد تا این فوق العاده ویژگی های مناسب از براکت نماد درست تر شناخته شده به عنوان با دسترسی تصادفی، که در آن ما فقط می توانید پرش به یک عنصر منحصر به فرد اما در حال حاضر اگر من هنوز هم به حال داوطلبان من در اینجا، اگر من می خواستم برای پیدا کردن شماره 22، من فقط می توانید پرش به براکت چیزی چیزی. من به بیش از لیست نگاه کنید، خیلی مانند نمونه جستجو ما خطی، برای پیدا کردن شماره 22. بنابراین ما به نظر می رسد پرداخت یک قیمت وجود دارد. اما ما این وجود می تواند حل مشکلات دیگر. در واقع، اجازه دهید من معرفی فقط چند تصاویری. بنابراین اگر شما به اس ام اس سالن ناهار خوری ماتر به تازگی، شما یاد می آورند که خود را پشته از سینی های شبیه به این، ما این را از اقتباس آننبرگ قبل از کلاس. بنابراین این پشته سینی، هر چند، نماینده واقع است از یک ساختار داده های علوم کامپیوتر است. یک ساختار داده ها وجود دارد در علوم کامپیوتر شناخته شده به عنوان یک پشته که بسیار خوبی خود را به دقیقا این تصویری بوجود می آورد. بنابراین اگر هر یک از این سینی نیست سینی اما مانند تعداد و من می خواستم برای ذخیره شماره، من می تواند یکی را در اینجا قرار دهید، و من می تواند یکی دیگر را در اینجا قرار دهید، و ادامه انباشته شماره در بالای یکدیگر، و چه چیزی به طور بالقوه در مورد این اطلاعات مفید این است که چه مفهوم است این ساختار داده؟ که تعداد می توانم بیرون بکشد برای اولین بار به راحتی؟ اخیرا یکی قرار داده وجود دارد. پس این است که آنچه که ما در پاسخ علوم کامپیوتر یک ساختار داده LIFO. تاریخ و زمان آخرین در، اولین بار. و ما به همین دلیل قبل از اینکه طولانی را ببینید که ممکن است مفید اما در حال حاضر، فقط اموال در نظر بگیرید. و آن را از نوع احمقانه است اگر شما فکر می کنم در مورد چگونگی سالن غذاخوری آن را ندارد. هر بار که آنها سینی تمیز و قرار دادن تازه ترین آنهایی که در بالا، شما می توانید یک قبلا تمیز اما در نهایت بسیار کثیف و گرد و خاکی سینی در پایین اگر شما در واقع هرگز به پایین که پشته، زیرا شما فقط حفظ قرار دادن جدید و آنهایی که تمیز در بالای آن است. همان چیزی که ممکن است رخ دهد در یک سوپر مارکت است. اگر شما یک مورد صفحه نمایش شیر و هر بار CVS و یا هر کس می شود شیر بیشتر، شما فقط پرتاب شیر شما در حال حاضر به تماس و شما با قرار دادن امکانات جدید جلو، شما در حال رفتن به برخی از خیلی تند و زننده شیر در پایان ساختار داده ها، چون آن را همیشه در پایین یا معادل آن را همیشه در پشت. ولی راه دیگری هم وجود دارد به فکر پوشش داده ها و برای مثال، این. اگر شما یکی از این افراد هستید که دوست به خط کردن در خارج از فروشگاه های اپل زمانی که یک محصول جدید می آید خارج، شما احتمالا با استفاده از داده پشته ساختار دلیل این که شما می بیگانه هر کس دیگری که پوشش برای خرید برخی از اسباب بازی های جدید. در عوض، شما احتمالا با استفاده از هستید چه نوع از ساختار داده و یا چه نوع سیستم در دنیای واقعی؟ امیدوارم آن یک خط، و یا بیشتر و یا به درستی بیشتر از بریتانیا مانند، یک صف. و معلوم است یک صف همچنین یک ساختار داده ها در علوم کامپیوتر، اما یک صف است بسیار اموال متفاوت است. آن LIFO است. تاریخ و زمان آخرین در، اولین بار. خدا نکند. آن را به جای FIFO. اولین ورودی اولین خروجی. و این چیز خوبی است برای عدالت، به خاطر قطعا زمانی که شما پوشش تا فوق العاده در صبح زود. اگر شما برای اولین بار وجود دارد دریافت کنید، شما می خواهید برای دریافت از اول است. و به این ترتیب همه این داده ها سازه، صف و پشته و مجموعه ای از دیگران، معلوم است شما می توانید از این به عنوان فقط یک آرایه فکر می کنم. این یک آرایه است، شاید یک اندازه ثابت 4، اما می خواهم می تواند از نوع خوب اگر ما فقط می تواند شمع سینی های تقریبا بی نهایت بلند اگر ما که سینی و یا شماره های بسیاری است. بنابراین شاید ما می خواهیم استفاده از یک لیست پیوندی در اینجا، اما تجارت کردن است برای رفتن به به طور بالقوه است که ما نیاز به حافظه بیشتر، طول می کشد زمان کمی بیشتر، اما ما از ارتفاع پشته محدود نمی کند، بسیار شبیه به مورد صفحه نمایش ماتر است ممکن است اندازه پشته محدود، و بنابراین این تصمیم گیری های طراحی یا گزینه های در دسترس به ما در نهایت. بنابراین با این داده ها سازه، ما شروع به دیدن مرزهای جدید به طور بالقوه بالا در آنچه قبلا فوق العاده سریع بود و که در آن ما را ترک خاموش امروز و که در آن ما امیدواریم که برای رسیدن به است در روز چهارشنبه، ما شروع به در داده ها نگاه ساختار است که اجازه می دهد تا ما جستجو از طریق داده های در ورود به سیستم زمان پایان دوباره. و ما دیدیم که، فراخوان، در هفته صفر و یکی با جستجوی دودویی یا تقسیم و تسخیر. آن را به آینده و بهتر است، جام مقدس برای این چهارشنبه خواهد بود به آمده تا با ساختار داده ها اجرا می شود که واقعا و یا از لحاظ نظری در زمان ثابت، به موجب آن مهم نیست که چگونه بسیاری از میلیون ها و یا میلیاردها چیز ما در ساختار داده اند، آن را ما را زمان ثابت، شاید یک گام یا دو مرحله و یا 10 مرحله، اما اعداد ثابت از مراحل از طریق این ساختار داده را جستجو کنید. که در واقع می شود جام مقدس اما بیشتر که در روز چهارشنبه. پس از آن از ya را ببینید. [موسیقی]