[Powered by Google Translate] [6 هفته] [دیوید J. مالان] [دانشگاه هاروارد] [این CS50.] [CS50.TV] این CS50 است، و این است که شروع هفته 6 بنابراین زن و شوهر از ابزارهای جدید در حال حاضر در دسترس برای شما را به استفاده از، اولین بار است که CS50 سبک نامیده می شود. شانس هستند اگر شما هم مانند من و یا هر یک از همراهان تدریس هستید، شما احتمالا دیده ایم یک برنامه است که سبک به نظر می رسد چیزی کمی مانند این. شاید شما شروع به کاهش برخی از گوشه ها در اواخر شب، و یا شما مقابله با آن بعد، و پس از آن TF یا CA می آید در طول ساعات اداری. سپس آن را برای ما سخت به خواندن. خب، این کد را به نحوی صحیح، و آن را کامپایل، و آن را در واقع اجرا خواهد شد. اما قطعا 5 برای سبک نیست. اما در حال حاضر، اگر ما را به این پوشه بروید اینجا و توجه کنید که من conditions2.c- و من برای اجرای این دستور جدید، style50، در conditions2.c فایل را وارد کنید. توجه کنید که آن را به من اطلاع داد که از آن شده است تلطیف شده است. Gedit متوجه شده که این فایل بر روی دیسک تغییر شده است، و اگر من روی Reload کلیک کنید، همه مشکلات شما در حال حاضر به خودکار می باشد. [تشویق حضار] این یکی از چیزهایی است که ما این آخر هفته. متوجه آن است که ناقص است، زیرا برخی از کد وجود دارد که آن را به سادگی نمی خواهد قادر به سبک خاصی دراوردن کاملا، اما تحقق این است که در حال حاضر یک ابزار شما می توانید با استفاده از را اگر فقط به مرتب کردن برخی از پرانتز errantly فرفری قرار داده و از این قبیل. اما بیشتر قانع کننده در حال حاضر CS50 چک. به با CS50 ورود، شما در واقع می تواند همان آزمون صحت انجام کد خود را که همراهان آموزش قادر به. این ابزار خط فرمان می آید که در حال حاضر در دستگاه می باشد به محض این که شما انجام update50 به عنوان در pset 4 مشخصات، و شما از آن استفاده اساسا شبیه به این. شما اجرا check50 فرمان. سپس شما را در یک آرگومان خط فرمان منتقل می کند، و یا به طور کلی به عنوان یک سوئیچ یا یک پرچم شناخته شده است. به طور کلی، همه چیز که دارای خط فاصله نامیده می شود سوئیچ به یک برنامه خط فرمان، به طوری-C مشخص چک هایی که شما می خواهید را اجرا کنند. آزمایشاتی که شما می خواهید را به اجرا منحصر به فرد این رشته شناخته شده است، 2012/pset4/resize. به عبارت دیگر، این فقط یک رشته دلخواه اما منحصر به فرد که ما با استفاده از منحصر به فرد شناسایی 4 pset آزمون صحت. و پس از آن یک فضای فهرست جدا شده از فایل های شما مشخص است که شما می خواهید برای آپلود به CS50 چک برای تجزیه و تحلیل است. برای مثال، اگر من به راه حل من در اینجا برای resize.c به من اجازه باز کردن یک ترمینال بزرگتر پنجره و من به جلو و اجرا کنیم را می گویند 2012/pset4/resize check50-C، و پس از آن من به جلو و مشخص کردن نام فایل ها، resize.c، و سپس Enter را فشار دهید، آن را فشرده، آن را ارسال، آن را چک می کند و من فقط به یک دسته از آزمون شکست خورده است. یکی با رنگ قرمز در بالا سمت چپ می گوید که resize.c و BMP وجود دارد. این آزمون بود. این سوال ما خواسته بود. و این ناراضی چرا جواب نادرست است. متن سفید در زیر آن می گوید: انتظار می رود bmp.h به وجود داشته باشد، و این تنها تقصیر من است. من را فراموش کرده به آن را آپلود کنید، بنابراین من نیاز به آپلود هر دو فایل، resize.c و bmp.h. اما در حال حاضر همه از تستهای دیگری را به رنگ زرد هستند چرا که آنها را اجرا کنید متوجه، و به همین ترتیب چهره لبخند عمودی است زیرا او نه شاد و نه غمگین، اما ما باید برای جبران این موضوع با رنگ قرمز قبل از آن چک را اجرا خواهد کرد. اجازه دهید این مشکل را رفع کنم. اجازه بدهید من زوم کردن و نمایش مجدد فیلم این، این بار با bmp.h در خط فرمان وارد کنید، و در حال حاضر اگر همه به خوبی می رود، آن را برای بررسی و سپس بازگشت یک نتیجه از داشتن خود را به نفس همه سبز، که به معنی من انجام می دهند واقعا به خوبی در pset 4 تا کنون است. شما می توانید ببینید و استنباط از متن توصیفی در اینجا دقیقا همان چیزی است که ما مورد آزمایش قرار گرفته است. ما آزمایش اول آیا فایل وجود دارد؟ ما سپس مورد آزمایش می کند کامپایل resize.c؟ سپس ما آزمایش BMP 1x1 و پیکسل، اندازه آن را تغییر نمی N، عامل تغییر اندازه، 1 است. در حال حاضر، اگر شما هیچ ایده چه چیزی N است، شما یک بار شما را به pset 4 فرو رفتن، اما که به سادگی سلامت عقل را بررسی کنید تا مطمئن شوید که شما تغییر اندازه یک تصویر در همه اگر عامل تغییر اندازه شده است 1. اگر در مقابل، اندازه یک پیکسل 1x1 و 1x1 و پیکسل BMP تغییر و 2x2 به درستی وقتی N 2، پس از آن به طور مشابه، معدن به شکل درآمده است. به طور خلاصه، این است که، یکی به معنای عبور از انگشتان دست از معادله درست قبل از شما ارائه pset شما. شما دقیقا می دانند چه TF خود را به زودی می دانید هنگامی که شما در مورد ارائه برخی از مجموعه این مشکل، و همچنین انگیزه آموزشی واقعا برای قرار دادن این فرصت را در مقابل شما به طوری که زمانی که شما می دانید پیشینی که اشکالات را در کد خود و آزمون وجود دارد که در حال گذشت، شما می توانید در زمان موثر تر جلو قرار داده است برای حل این مشکلات به جای از دست دادن امتیاز، دریافت انتقادات و پیشنهادات از TF شما، و پس از آن، به "آه،" مثل من نمیفهمد که از. در حال حاضر حداقل یک ابزار وجود دارد برای کمک به آن را پیدا کنید. رفتن به اشاره است که در آن اشکال است، اما آن را به شما بگویم آنچه از آن علامت است. در حال حاضر آزمون الزاما جامع نیست تحقق بخشند. فقط به خاطر شما یک صفحه نمایش پر از چهره های سبز لبخند به این معنا نیست کد شما کامل است، اما این به آن معنا که آن را تصویب کرده است برخی آزمایشات تجویز شده توسط تنظیمات. گاهی اوقات ما را چک آزاد نیست. به عنوان مثال، داستان پلیسی، یکی از جنبه های از pset 4، نوع ناامید کننده است اگر ما به شما پاسخ به آنچه در آن است، و تعدادی از راه هایی به فاش کردن وجود دارد که شخص در آن سر و صدا به رنگ قرمز است. این تنظیمات همیشه در آینده برای pset 5 به بعد را مشخص چه را چک می کند برای شما وجود داشته باشد. شما توجه داشته باشید که این URL سفید در پایین وجود دارد. در حال حاضر، این فقط خروجی تشخیصی است. در صورتی که URL بازدید می کنید، به شما یک دسته از پیام های مرموز و دیوانه، که شما در حال نگاه را از طریق، اما آن را عمدتا برای کارکنان به طوری که ما می توانیم تشخیص و اشکال زدایی اشکالات در check50 خود. بدون ADO، اجازه دهید به جایی که ما را ترک کردن. CS50 کتابخانه ما در زمان برای چند هفته واگذار شده، اما پس از آن در هفته گذشته، شروع به پوست کندن بازگشت یکی از لایه های آن است. ما شروع به کنار گذاشتن رشته در حمایت از آنچه به جای؟ [] دانشجویان کاراکتر باشد. * کاراکتر، که بوده است * کاراکتر تمام این مدت، اما در حال حاضر ما لازم نیست که وانمود کنیم که آن را به رشته نوع داده های واقعی. در عوض، آن را مترادف انواع * کاراکتر بوده است، و یک رشته دنباله ای از کاراکتر ها است، پس چرا حس آن را به نمایندگی از رشته ها به عنوان کاراکتر * S؟ چه * char در زمینه این مفهوم از یک رشته را نشان می دهد؟ آره. >> [دانشجو] اولین شخصیت. خوب، حرف اول است، اما نه کاملا حرف اول است. این [دانشجویان] آدرس. خوب، آدرس اولین کاراکتر است. تمام آنچه که لازم است برای نشان دادن یک رشته در حافظه کامپیوتر فقط آدرس های منحصر به فرد از اولین بایت آن است. شما حتی نمی باید بدانید که چه مدت آن است زیرا چگونه می تواند که شما کشف کردن به صورت پویا؟ [دانشجو] طول رشته است. شما می توانید طول رشته، بسیار عالی است، اما چگونه رشته کار طول تماس بگیرید؟ چه کاری انجام میدهد؟ آره. [دانشجو] رفتن ادامه دهید تا زمانی که شما می توانید از شخصیت تهی. آره، دقیقا، آن را فقط با یک حلقه for تکرار، در حالی که حلقه، هر آنچه از * تا پایان، و پایان نشان داده شده است توسط \ 0، شخصیت به اصطلاح پوچ، پوچ، نمی شود با NULL است، که یک اشاره گر است اشتباه گرفته شده است، که خواهد آمد تا در گفتگو امروز دوباره. ما یک لایه از GetInt، پوست کنده و پس از آن ما یک نگاهی به GetString انجام گرفته است، و به یاد بیاورید که هر دو آن دسته از توابع، و یا در واقع، GetString، با استفاده از یک تابع خاص در واقع تجزیه، که شده است، خواندن و یا تجزیه و تحلیل، ورودی کاربر. و چه شد که تابع جدید است؟ Scanf یا sscanf. در واقع در چند طعم مختلف می آید. scanf وجود دارد، sscanf وجود دارد، fscanf وجود دارد. در حال حاضر، هر چند، اجازه تمرکز بر روی اغلب به آسانی نشان داده شده است، و به من اجازه رفتن به جلو و باز کردن در دستگاه یک فایل مثل این، scanf1.c. این یک برنامه فوق العاده ساده است، اما این به آن چیزی است که ما انجام داده ایم، هرگز بدون کمک از کتابخانه CS50. این می شود بین المللی از کاربر است. چگونه کار می کند؟ خب، در خط 16 وجود دارد، توجه کنید که از نوع int به نام X ما اعلام می کنیم، و در این نقطه در داستان، مقدار x را چه شده است؟ [پاسخ دانش آموز نامفهوم] [دیوید M. راست، که می داند، برخی از ارزش زباله به طور بالقوه، به طوری که در 17، ما فقط به کاربر بگویید من یک عدد به من بدهید، لطفا، و مرحله 18 است که در آن می شود جالب است. Scanf به نظر می رسد به قرض گرفتن ایده از printf است که در آن با استفاده از این کدهای قالب در نقل قول. D٪ است البته یک عدد دهدهی است. اما چرا من در x و به جای X عبور؟ سابق درست است. آره. [پاسخ دانش آموز نامفهوم] دقیقا، اگر هدف از این برنامه، مثل تابع GetInt خود، بین المللی از کاربر می تواند توابع عبور تمام متغیرهای من می خواهم، اما اگر من آنها را مرجع تصویب و یا از طریق آدرس و یا با اشاره گر، تمام مترادف برای اهداف امروز، پس از آن که تابع هیچ توانایی برای تغییر محتویات آن متغیر است. این را در یک نسخه درست مثل نسخه حشره دار از مبادله عبور که ما در مورد چند بار صحبت کردیم که در حال حاضر است. اما در عوض، با انجام و X، من به معنای واقعی کلمه در آنچه عبور؟ [دانشجو] آدرس. >> آدرس x را. این مانند کشیدن یک نقشه برای تابع scanf نامیده می شود و گفت: در اینجا، این جهت به یک تکه از حافظه در کامپیوتر که شما می توانید به ذخیره سازی برخی از عدد صحیح وارد برای sscanf که در حال حاضر انجام چه اپراتور چه قطعه ای از نحو است که آن را مجبور به استفاده از حتی اگر ما می توانیم آن را نمی بیند، زیرا شخص دیگری نوشت: این تابع؟ به عبارت دیگر - این چیه؟ [دانشجو] X خوانده است. قصد دارد به برخی از خواندن، بلکه تنها با توجه به x در اینجا. اگر scanf است که گذشت آدرس x را، نحوی، اپراتور ملزم به جایی وجود داشته باشد به طوری که در داخل از اجرای scanf scanf در واقع می تواند شماره 2 را به آن آدرس ارسال می شود؟ آره، پس *. به یاد بیاورید که * اپراتور dereference ما، که اساسا به معنی رفتن وجود دارد. هنگامی که شما در دست یک آدرس، به عنوان مورد در اینجا، scanf است که احتمالا اگر ما در واقع در اطراف منبع آن نگاه کد انجام * X یا معادل آن به واقع به آن آدرس قرار داده و برخی از ارزش وجود دارد. در حال حاضر، به عنوان scanf می شود ورودی از صفحه کلید، خواهیم دست خود را از موج امروز. فقط فرض کنیم که سیستم عامل اجازه می دهد تا sscanf به صحبت به صفحه کلید کاربر است، اما در این نقطه در حال حاضر در خط 19، زمانی که ما به سادگی چاپ از x، آن را به نظر می رسد به صورت که scanf بین المللی در X قرار داده شده است. این دقیقا چگونه scanf کار می کند، و هفته گذشته را به یاد می آورم این دقیقا چگونه GetString و GetInt و خانواده خود را از توابع در نهایت کار می کند، البته با واریانس جزئی مانند sscanf، که به معنی اسکن یک رشته به جای استفاده از صفحه کلید است. اما اجازه دهید نگاهی به واریانس کمی از این. در scanf2، من در واقع پیچ. چه اشتباه است و من نظر که توضیح می دهد که به همان اندازه پنهان چه چیزی اشتباه است با این برنامه، نسخه 2؟ به عنوان فنی که ممکن است این زمان. به نظر می رسد بسیار خوب است. این به سادگی فاصله دار است، اما خوب، چگونه در مورد آن را هرس به سوالات کوتاه تر کنیم؟ خط 16. خط 16 انجام در انگلیسی دقیق فنی چه خبر؟ گرفتن کمی بی دست و پا است. بله، مایکل. [دانشجو] با اشاره به حرف اول یک رشته است. خوب، نزدیک است. اجازه دهید که کمی نیشگون گرفتن و کشیدن. وی با اشاره به حرف اول یک رشته، شما در حال اعلام یک متغیر به نام بافر که به آدرس برای اولین بار از یک رشته اشاره، یا نه، که نقطه به طور خاص برای کاراکتر. توجه داشته باشید که این در واقع اشاره در هر نقطه به خاطر هیچ عملگر انتساب وجود دارد. هیچ نشانه ای برابر وجود دارد، به طوری که همه ما انجام می دهیم این است تخصیص بافر به اصطلاح متغیر است. این اتفاق می افتد به 32 بیت به دلیل آن را در یک اشاره گر، و احتمالا در نهایت محتویات بافر آدرس یک کاراکتر، حاوی، اما در حال حاضر، چه بافر حاوی؟ فقط برخی از ساختگی، که می داند، برخی از ارزش زباله، از آنجا که ما به صراحت آن را مقداردهی اولیه است، بنابراین ما باید هر چیزی نمی پذیرد. خوب، بنابراین در حال حاضر در خط 17 است، چه در خط 17 کاری انجام دهید؟ شاید که این گرم کردن. چاپ یک رشته، درست است؟ چاپ این رشته لطفا. خط 18 نوع از آشنا در حال حاضر که ما فقط دیدم واریانس اما با کد فرمت های مختلف، به طوری که در خط 18، ما در حال گفتن scanf در اینجا نشانی از یک تکه از حافظه است. من می خواهم شما را به یک رشته، حلقه، توسط٪ s را دارد، اما مشکل این است که ما یک زن و شوهر از چیزهایی که در اینجا انجام نداده است. یکی از مشکلات است؟ [دانشجو] این تلاش به dereference یک اشاره گر تهی. خوب، اشاره گر تهی و یا فقط در غیر این صورت ناشناخته. شما توزیع scanf آدرس، اما شما فقط یک لحظه پیش گفت: که ممکن است که آدرس برخی از ارزش زباله است، چرا که ما در واقع نه آن اختصاص به هر چیزی، و تو گفتن scanf به طور موثر برای قرار دادن یک رشته اینجا را کلیک کنید. اما ما نمی دانیم که در آن در اینجا هنوز، بنابراین ما در واقع حافظه برای بافر اختصاص داده شده است. علاوه بر این، چه چیزی شما را هم حتی نمی گفتن scanf؟ فرض کنید این یک تکه از حافظه بود، و آن را به یک مقدار زباله، اما شما هنوز هم مشخص نشده scanf چیزی مهم است. [دانشجو] که در آن واقع شده است، علامت است. امپرسند، بنابراین در این مورد، آن را درست است. از آنجا که بافر در حال حاضر به عنوان یک اشاره گر اعلام با قطعه * نحو، ما نیازی به استفاده از علامت زیرا در حال حاضر آدرس، اما من فکر می کنم آن را شنیده است. [دانشجو] چقدر بزرگ است؟ خوب، ما در حال scanf گفتن نیست که چقدر بزرگ این بافر، به این معنی است که حتی اگر بافر یک اشاره گر، ما در حال گفت: scanf، قرار دادن یک رشته در اینجا، اما در اینجا می تواند 2 بایت از آن می تواند 10 بایت، این می تواند یک مگابایت است. Scanf هیچ ایده، و دلیل این است که یک تکه از حافظه احتمالا آن را یک رشته با این حال نیست. این تنها یک رشته در هنگامی که شما در نوشتن حروف و 0 \ به این تکه از حافظه است. در حال حاضر آن را فقط به برخی از تکه از حافظه است. Scanf نمی خواهد می دانم که زمانی که برای جلوگیری از نوشتن نامه به آن آدرس است. اگر شما به خاطر برخی از نمونه ها در گذشته که من به طور تصادفی بر روی صفحه کلید تایپ تلاش برای سرریز بافر، و ما را در روز جمعه که دقیقا صحبت کردیم. اگر دشمن به نحوی به برنامه شما تزریق یک کلمه بسیار بزرگتر یا جمله یا عبارت شما انتظار داشتند شما می توانید تاخت و تاز یک تکه از حافظه، که می تواند عواقب بد داشته باشند، مانند مصرف بیش از کل برنامه خود را. ما باید برای رفع این مشکل به نحوی. اجازه بدهید من زوم کردن و رفتن به نسخه 3 از این برنامه. که کمی بهتر است. در این نسخه، متوجه تفاوت. در خط 16، من دوباره اعلام بافر یک متغیر به نام، اما آنچه در آن است در حال حاضر؟ این یک مجموعه ای از 16 کاراکتر است. این خوب است به خاطر این به این معنی، من در حال حاضر می توانم بگویم scanf در اینجا این است تکه واقعی از حافظه است. شما تقریبا می توانید از آرایه ها به عنوان اشاره گر در حال حاضر فکر می کنم، حتی اگر آنها در واقع معادل نیست. آنها متفاوت رفتار خواهید در زمینه های مختلف است. اما مطمئنا این مورد که بافر مرجع 16 کاراکتر به هم پیوسته به خاطر این چیزی است که یک آرایه است است و برای چند هفته بوده است که در حال حاضر است. در اینجا، من گفتن scanf اینجا یک تکه از حافظه است. این زمان، آن را در واقع یک تکه از حافظه، اما چرا این برنامه هنوز بهره برداری؟ چه اشکالی دارد؟ من گفت که 16 بایت ولی به من می دهد [دانشجو] اگر آنها در بیش از 16 تایپ؟ دقیقا، در صورتی که کاربر در 17 کاراکتر یا شخصیت های 1700؟ در واقع، بیایید ببینید که آیا ما می توانیم از سفر بیش از این اشتباه در حال حاضر. بهتر است اما کامل نیست. اجازه بدهید من به جلو و اجرا را scanf3 به کامپایل کردن این برنامه. اجازه دهید scanf3 اجرا من، رشته کنید: میهمان گرامی، و ما به نظر می رسد درست است. اجازه بدهید یک کمی طولانی تر را امتحان کنید من، میهمان گرامی. خوب، اجازه دهید انجام میهمان گرامی حال شما چطور است امروز، وارد کنید. گرفتن نوع خوش شانس در اینجا، اجازه دهید بگویم سلام حال شما چطور است. لعنت به آن است. خوب، بنابراین ما خوش شانس. بیایید ببینیم که اگر ما می توانیم این را درست نمی کند. نه، آن را نمی خواهید به من اجازه دهید کپی کنید. بیایید سعی کنید این دوباره. همه حق است، ایستاده اند. خواهیم دید که چه مدت می تواند تظاهر به تمرکز در حالی که هنوز برای انجام این کار است. لعنت به آن است. این نه مناسب است، در واقع. وجود دارد بروید. نقطه ساخته شده است. این، شرم آور هر چند آن را نیز، آن است که همچنین یکی از منابع سردرگمی بزرگ در هنگام نوشتن برنامه هایی که اشکالات این دلیل که آنها خود را آشکار تنها یک بار در در حالی که گاهی اوقات. واقعیت این است که حتی اگر کد خود را به طور کامل شکسته شده، ممکن است آن را تنها به طور کامل یک بار در در حالی که شکسته زیرا گاهی اوقات، در اصل چه اتفاقی می افتد اختصاص سیستم عامل کمی حافظه بیشتر از شما در واقع به هر دلیلی نیاز به، و بنابراین هیچ کس دیگری هم با استفاده از حافظه پس از تکه های خود را از 16 کاراکتر، بنابراین اگر شما به 17، 18، 19، هر آنچه که آن را مانند یک معامله بزرگ نیست. در حال حاضر، کامپیوتر، حتی اگر آن را در آن نقطه سقوط نمی کند، در نهایت ممکن است استفاده از بایت شماره 17 یا 18 یا 19 را برای چیز دیگری، که در آن نقطه داده های خود را که به شما می شود وجود دارد، البته بیش از حد طولانی، رفتن به رونویسی به طور بالقوه برخی از عملکرد های دیگر. این لزوما رفتن به دست نخورده باقی می ماند، اما این لزوما باعث گسل SEG. اما در این مورد، من در نهایت کاراکتر به اندازه کافی که من اساسا بیش از حد بخش از حافظه، و به بم، سیستم عامل، گفت: "با عرض پوزش، این خوب نیست، تقسیم بندی گسل است." و بیایید ببینید که در حال حاضر اگر چه باقی مانده است اینجا من در دایرکتوری توجه کنید که من این فایل در اینجا، هسته. توجه داشته باشید که این دوباره روگرفت هسته ای نامیده می شود. اساسا یک فایل که حاوی محتوای حافظه برنامه خود را در نقطه ای که در آن سقوط کرد، و فقط سعی کنید به عنوان مثال در اینجا اجازه دهید من در اینجا و اجرای GDB در scanf3 و سپس تعیین یک پارامتر سوم به نام هسته، را متوجه شده و در اینجا است که اگر کد من لیست، ما قادر خواهیم بود به طور معمول با GDB شروع به راه رفتن را از طریق این برنامه، و من می توانم آن را و اجرا به زودی به عنوان من ضربه به گام با دستور در GDB به محض این که من خط به طور بالقوه حشره دار پس از تایپ کردن در یک رشته بزرگ رسید، من قادر خواهید بود تا آن شناسایی در اینجا. بیشتر در مورد این، هر چند، در بخش در نظر افسردگی هسته و دوست دارم به طوری که شما در واقع می تواند فشار با نوک انگشت اطراف در داخل هسته روگرفت و ببینید که در چه خط برنامه شما شکست خورده است. هر گونه سؤال و سپس بر روی اشاره گرها و آدرس؟ از آنجا که امروزه در، ما در حال رفتن به شروع به گرفتن برای مسلم است که این چیز ها وجود داشته باشد و ما می دانیم که دقیقا چه هستند. بله. [دانشجو] چطور می شود شما را به یک علامت برای قرار دادن به بخش خوب سوال. چطور می شود من برای قرار دادن یک علامت در کنار به آرایه کاراکتری را به عنوان من قبلا با بسیاری از نمونه های ما؟ پاسخ کوتاه این است که آرایه ها کمی خاص است. شما تقریبا می توانید یک بافر به عنوان در واقع یک آدرس فکر می کنم، و آن را فقط اتفاق می افتد به صورت علامت کروشه مربع راحتی است به طوری که ما می توانیم به براکت براکت 0، 1، براکت 2، بدون نیاز به استفاده از نماد *. این یک بیت از یک دروغ سفید به دلیل آرایه ها و اشاره گرها هستند، در واقع، کمی متفاوت است، اما آنها اغلب اما نه همیشه می تواند مورد استفاده قرار گیرد قابل معاوضه است. به طور خلاصه، زمانی که یک تابع در انتظار یک اشاره گر به یک تکه از حافظه، شما هم می توانید آن را تصویب یک آدرس است که با استفاده از malloc بازگردانده شد، و ما malloc دوباره قبل از اینکه طولانی، و یا شما می توانید آن را به نام یک آرایه منتقل می کند. شما لازم نیست که برای انجام این کار علامت با آرایه چرا که آنها در حال حاضر اساسا آدرس می خواهم. این یک استثنا است. براکت آنها را خاص. می تواند یک علامت شما قرار داده و در کنار بافر؟ در این مورد نیست. که نمی خواهد کار به این دلیل، دوباره، از این مورد گوشه که در آن آرایه ها کاملا واقع نه آدرس. اما شاید بازگشت به که قبل از بلند با نمونه های دیگر آمده است. بیایید سعی کنید مشکل را حل کند. ما یک ساختار داده ایم که با استفاده از برخی از زمان شناخته شده به عنوان یک آرایه. مورد، این چیزی است که ما فقط تا به حال. اما آرایه برخی از جنبه های منفی و upsides. آرایه ها چرا خوب است؟ یک چیز است که شما می خواهم به اندازه شما آرایه های در مورد آرایه ها دوست دارم چه؟ چه در مورد آنها راحت است؟ چه قانع کننده است؟ چرا آنها را معرفی می کنیم در وهله اول؟ آره. [دانشجو] آنها می توانید مقدار زیادی از داده ها، ذخیره و شما لازم نیست که کل چیزی که برای استفاده از. شما می توانید از یک بخش استفاده کنید. خوب، با یک آرایه شما می توانید تعداد زیادی از داده ها را ذخیره، و شما لزوما مجبور به استفاده از تمام آن، بنابراین شما می توانید overallocate، که ممکن است مناسب اگر شما در پیشبرد دانم که چگونه بسیاری از چیزی است که انتظار می رود. GetString یک مثال کامل است. GetString، نوشته شده توسط ما، هیچ ایده چگونه بسیاری از کاراکتر ها به انتظار، بنابراین این واقعیت است که ما می توانیم تکه های حافظه پیوسته اختصاص خوب است. آرایه ها نیز مشکل ما شاهد چند هفته پیش در حال حاضر را حل کند که در آن کد خود را شروع به چیزی بسیار ضعیف طراحی شده واگذاردن. به یاد بیاورید که من ایجاد یک ساختار دانش آموز به نام دیوید، و پس از آن بود که در واقع جایگزین، هر چند، به داشتن یک متغیر به نام نام و متغیر دیگر به نام، من فکر می کنم، خانه، و یکی دیگر از ID متغیر نامیده می شود چرا که در آن داستان من می خواستم چیز دیگری را به شما معرفی دوست راب به این برنامه، به طوری که پس از آن من تصمیم گرفتم یک دقیقه صبر کنید، من نیاز به تغییر نام این متغیر. بیایید تماس بگیرید معدن NAME1، ID1، house1. اجازه دهید راب NAME2، house2، ID2. اما پس از آن یک دقیقه صبر کن، چه در مورد تامی؟ بعد از آن ما تا به حال سه متغیر است. معرفی شخص دیگری، چهار مجموعه از متغیرها است. جهان آغاز شده است، برای به دست آوردن کثیف بسیار سریع، بنابراین ما معرفی ساختمانها، و قانع کننده در مورد یک ساختار است؟ چه ساختار C به شما اجازه می دهد تا شما را انجام دهد؟ این واقعا بی دست و پا. چه؟ >> [پاسخ دانش آموز نامفهوم] بله، به طور خاص، typedef اجازه می دهد تا به شما برای ایجاد یک نوع داده جدید، و ساختار، کلمه کلیدی ساختار، به شما اجازه می دهد تا در محفظهای قرار دادن تکه های مفهومی مربوط به داده ها با هم و پس از آن آنها را با چیزی شبیه به یک دانش آموز است. خوب بود، چون در حال حاضر ما می توانیم مدل مرتب سازی بر اساس بسیار بیشتر از مفهومی سازگار مفهوم از یک دانش آموز در یک متغیر به جای خودسرانه داشتن یک برای یک رشته، یکی برای یک ID، و غیره. آرایه ها خوب هستند چون آنها به ما اجازه می دهد تا شروع به پاک کردن کد ما. اما حرکت نزولی است که در حال حاضر از یک آرایه؟ چه کاری می توانید انجام دهید نه؟ آره. [دانشجو] شما باید بدانید که چقدر بزرگ است. شما باید بدانید که چقدر بزرگ است، به طوری که این نوع از درد است. کسانی که از شما با تجربه برنامه نویسی قبل می دانیم که در بسیاری از زبانها، مانند جاوا، شما می توانید یک تکه از حافظه، به طور خاص یک آرایه را بپرسید، چقدر بزرگ هستید، با طول، اموال، پس به صحبت می کنند، و است که واقعا مناسب است. در C، شما حتی نمی تواند تماس strlen در یک آرایه عمومی زیرا strlen، به عنوان کلمه پیداست، تنها برای رشته های و شما می توانید شکل از طول یک رشته به دلیل این کنوانسیون انسان از داشتن یک 0 \، اما یک آرایه، عام تر از آن، فقط یک تکه از حافظه است. اگر یک آرایه از نوع داده int است، قصد دارد به برخی از شخصیت های خاص در پایان در انتظار شما است. شما باید به یاد داشته باشید در طول یک آرایه. یکی دیگر از حرکت نزولی یک آرایه، سر خود را در GetString خود پرورش داده است. یکی دیگر از حرکت نزولی یک آرایه چه خبر؟ آقا، فقط من و شما امروز. [پاسخ دانش آموز نامفهوم] >> آن چه؟ آن در پشته اعلام شده است. خوب، اعلام کرد در پشته. چرا شما که می خواهم؟ [دانشجو] از آنجا که آن را مورد استفاده مجدد قرار می شود. آن می شود مورد استفاده مجدد قرار. بسیار خوب، اگر شما با استفاده از یک آرایه به حافظه اختصاص دهد، شما می توانید به عنوان مثال، آن را بازگشت به دلیل آن را در پشته. خوب، که یک نقطه ضعف است. و چگونه در مورد یک دیگر با یک آرایه؟ هنگامی که شما آن را تخصیص، شما نوع پیچ است اگر شما به فضای بیشتری نیاز از آن است که آرایه دارد. سپس به ما معرفی، فراخوان، malloc، که به ما توانایی تخصیص حافظه به صورت پویا. اما چه می شود اگر ما سعی کردیم یک جهان کاملا متفاوت است؟ چه می شد اگر ما می خواستیم برای حل یک زن و شوهر از این مشکلات بنابراین ما به جای من قلم افتاده خواب در اینجا چه می شود اگر ما به جای می خواستم اساسا ایجاد دنیایی که دیگر مثل این؟ این آرایه است، و، البته، این نوع از بدتر زمانی که ما در پایان از آرایه، و من در حال حاضر دیگر فضا برای یک عدد صحیح دیگر و یا یکی دیگر از شخصیت است. چه می شود اگر ما مرتب کردن بر اساس preemptively می گویند به خوبی، چرا ما نمی استراحت این نیاز است که تمام این تکه از حافظه پیوسته پشت به پشت، و به همین دلیل انجام دهید، نه وقتی که من نیاز به یک int و یا یک کاراکتر، فقط به من دادن فضا برای یکی از آنها؟ و هنگامی که من نیاز به دیگری، به من فضای دیگری را، و هنگامی که من نیاز به دیگری، به من فضای دیگری را. استفاده از آن در حال حاضر این است که اگر شخص دیگری طول می کشد حافظه در اینجا، هیچ معامله ای بزرگ است. من این تکه های اضافی از حافظه در اینجا و سپس این یکی را. در حال حاضر، تنها نکته در اینجا این است که این تقریبا احساس می کنم یک دسته از متغیرهای مختلف است. این احساس مانند پنج متغیر متفاوت به طور بالقوه است. اما چه می شود اگر ما به سرقت ایده از رشته ها به موجب آن ما به نحوی این چیزها را با هم لینک کنید مفهومی، و چه می شود اگر من این؟ این بسیار ضعیف کشیده من فلش می باشد. اما فرض کنید که هر یک از این تکه های حافظه با اشاره به دیگر است، و این پسر، خواهر و برادر است که هیچ به حق خود، هیچ فلش مانند است. این است که در واقع چیزی است که به آن مرتبط با فهرست شده است. این یک ساختمان داده جدید است که اجازه می دهد تا ما را به اختصاص یک تکه از حافظه است، پس از آن دیگر، پس از آن دیگر، پس از آن دیگر، هر زمان ما می خواهیم در طول یک برنامه، و ما به یاد داشته باشید که همه آنها به نحوی مرتبط با به معنای واقعی کلمه زنجیری شدن، آنها را با هم، و ما این کار را انجام دادیم pictorially در اینجا با فلش. اما در کد، چه خواهد بود مکانیزم طریق است که شما به نوعی می تواند اتصال، تقریبا شبیه خراش، یک تکه به تکه دیگر؟ ما می تواند یک اشاره گر، درست است؟ چون واقعا فلش است که از مربع بالا سمت چپ، این پسر در اینجا به یکی از این، در داخل این میدان می تواند شامل نه تنها بعضی از نوع داده int، نه تنها برخی از کاراکتر، اما چه می شود اگر من در واقع اختصاص داده فضای کمی بیشتر به طوری که در حال حاضر، هر یک از تکه های من از حافظه، حتی اگر این هزینه رفتن به من، در حال حاضر به نظر می رسد کمی بیشتر مستطیل است که در آن یکی از تکه های حافظه برای یک عدد مورد استفاده قرار می گیرد، مانند شماره 1، و پس از آن در صورتی که این مرد فروشگاه شماره 2، این تکه دیگر از حافظه فلش مورد استفاده قرار می گیرد. یا مشخص تر، یک اشاره گر است. و فرض کنید شماره 3 ذخیره من در اینجا در حالی که من از این که در آن مرد اشاره، و در حال حاضر این مرد، اجازه دهید فرض کنید من فقط می خواهم سه تکه از حافظه است. من یک خط که از طریق قرعه کشی، نشان می دهد تهی. هیچ کاراکتر اضافی وجود دارد. در واقع، این است که چگونه ما می توانیم در مورد اجرای چیزی که به نام یک لیست پیوندی. لیست پیوندی یک ساختمان داده جدید است، و آن سنگ پله به سمت خیلی خیال باف ساختارهای داده هایی را که شروع به حل مشکلات در امتداد خطوط مشکلات فیس بوک و گوگل نوع مشکلات که در آن شما باید مجموعه داده های بزرگ، و آن دیگر از آن کاهش برای ذخیره همه چیز را متوالی و استفاده از چیزی شبیه به جستجوی خطی و یا حتی چیزی مانند جستجوی دودویی. شما می خواهید حتی بهتر در حال اجرا بار. در واقع، یکی از از Grails مقدس ما در حدود اواخر این هفته و یا در کنار صحبت خواهیم کرد یک الگوریتم است که در حال اجرا زمان ثابت است. به عبارت دیگر، آن را همیشه به همان مقدار از زمان بدون توجه به طول می کشد چقدر بزرگ ورودی است و خواهد بود که در واقع قانع کننده، حتی بیشتر از چیزی لگاریتمی است. این است که بر روی صفحه نمایش در اینجا؟ هر کدام از مستطیل است که دقیقا همان چیزی است که من فقط با دست کشید. اما چیزی که همه راه را در سمت چپ یک متغیر خاص است. این تنها یک اشاره گر به دلیل مارپیچ با یک لیست پیوندی، به عنوان این چیزها نامیده می شوند، این است که شما باید بر روی یکی از دو انتهای لیست پیوندی آویزان است. درست مثل یک رشته، شما باید بدانید که آدرس اولین کاراکتر. معامله یکسان برای لیست های پیوندی. شما باید بدانید که آدرس اولین تکه از حافظه از آنجا که از وجود دارد، شما می توانید هر یک از دیگر برسد. حرکت نزولی است. چه قیمت ما برای این تنوع داشتن به صورت پویا به پرداخت ساختار داده ها قابل ملاحظه است که اگر ما تا به حال نیاز به حافظه بیشتر، خوب است، فقط یک تکه است و اختصاص به رسم یک اشاره گر از قدیمی به دم از لیست؟ آره. [دانشجو] فضای مورد دو برابر طول می کشد. این فضای دو برابر طول می کشد، به طوری که قطعا یک حرکت نزولی، و ما دیده ایم این معاوضه قبل از میان زمان و فضا و انعطاف پذیری جایی که در حال حاضر، ما نیاز به 32 بیت برای هر یک از این اعداد نیست. ما واقعا نیاز به 64، 32 شماره و 32 برای اشاره گر است. اما هی، من باید 2 گیگابایت RAM است. اضافه کردن یکی دیگر از 32 بیت و در اینجا به نظر نمی رسد که از یک معامله بزرگ است. اما برای مجموعه داده های بزرگ، آن را قطعا می افزاید تا به معنای واقعی کلمه دو برابر است. یکی دیگر از حرکت نزولی چه در حال حاضر، و یا چه ویژگی ما را، اگر ما نمایندگی لیست از چیزهایی که با یک لیست پیوندی و آرایه نیست؟ [دانشجو] شما می توانید آن را به عقب نیست گذشتن. شما می توانید آن را گذشتن نه به عقب، به طوری که شما از نوع پیچ اگر شما در حال راه رفتن از چپ به راست با استفاده از یک حلقه یا حلقه و سپس شما متوجه "آه، من می خواهم برای رفتن به ابتدای لیست است." شما می توانید نه به این دلیل که این اشاره گر فقط از چپ به راست به عنوان فلش نشان می دهد. در حال حاضر، شما می توانید شروع از لیست را با متغیر دیگر به یاد داشته باشید، اما این پیچیدگی را در ذهن داشته است. آرایه، مهم نیست چقدر شما بروید، شما همیشه می توانید منهای، منهای، منهای، منهای و از هر جا که تو آمدی. یکی دیگر از حرکت نزولی در اینجا چه خبر؟ آره. [سوال دانش آموز نامفهوم] ، بنابراین شما می توانید شما در واقع فقط پیشنهاد یک ساختمان داده به نام لیست پیوند مضاعف، و در واقع، شما می توانید یکی دیگر از اشاره گر به هر یک از این مستطیل اضافه کنید می رود که جهت دیگر، حرکت صعودی آن در حال حاضر شما می توانید به عقب و جلو گذشتن، حرکت نزولی است که در حال حاضر شما در حال استفاده از سه بار به عنوان حافظه زیادی را به عنوان ما استفاده می شود و همچنین با اضافه کردن پیچیدگی در کد شما را مجبور به نوشتن به حق آن را دریافت. اما این همه شاید بسیار مناسب بده بستان های مختلفی، اگر برگشت از اهمیت بیشتری برخوردار است. آره. [دانشجو] شما همچنین می توانید یک لیست 2D متصل نیست. خوب، شما واقعا نمی تواند فهرست 2D مرتبط. شما می توانید. آن را تقریبا به عنوان به عنوان یک آرایه آسان نیست. مثل یک آرایه، شما براکت باز، براکت بسته، براکت باز، بسته براکت، و شما می توانید برخی از ساختار 2 بعدی است. شما می توانید 2 بعدی مرتبط فهرست پیاده سازی اگر شما افزودنی شما را به عنوان پیشنهاد یک اشاره گر سوم به هر یک از این کارها را انجام دهید، و اگر شما فکر می کنم در مورد یکی دیگر از لیست در آینده به شما سبک 3D از روی صفحه نمایش را به همه ما است، که تنها یکی دیگر از زنجیره ای از نوعی است. ما می تواند آن را انجام دهد، اما آن را به عنوان ساده به عنوان تایپ براکت باز، براکت نیست. آره. [سوال دانش آموز نامفهوم] خوب است، پس این یک اعتراض واقعی است. این الگوریتم که ما بر این، مثل آه، جستجو باینری pined، شما می توانید مجموعه ای از اعداد را در هیئت مدیره را جستجو کنید یا یک دفترچه تلفن بسیار بیشتر از سرعت اگر شما با استفاده از تقسیم و حل و یک الگوریتم جستجوی دودویی، جستجوی دودویی نیاز به دو پیش فرض است. یک، که داده های طبقه بندی شده اند. در حال حاضر، ما احتمالا می تواند این طبقه بندی شده اند را نگه دارید، بنابراین ممکن است که یک نگرانی نیست، اما جستجوی دودویی نیز به عهده گرفت که شما تا به حال دسترسی به لیستی از اعداد تصادفی، و آرایه این اجازه می دهد تا شما را به دسترسی تصادفی، و با دسترسی تصادفی، منظورم این است که اگر شما با توجه به آرایه، چه مدت شما آن را برای دریافت به براکت 0؟ یک عمل، شما فقط استفاده از [0] و شما در سمت راست وجود دارد. چگونه بسیاری از مراحل آن را برای رسیدن به محل اقامت 10؟ یک مرحله، شما فقط به [10] و شما وجود دارد. در مقابل، چگونه می توانم شما را به عدد صحیح 10th در یک لیست پیوندی؟ شما باید در ابتدای شروع به دلیل این که شما فقط به خاطر سپردن از شروع یک لیست پیوندی، درست مثل یک رشته است که یاد آدرس از کاراکتر اول خود را، و برای پیدا کردن که بین المللی 10 یا که شخصیت 10th در یک رشته، شما باید برای جستجوی همه چیز لعنتی. باز هم، ما همه از مشکلات ما حل نمی کند. ما به معرفی امکانات جدید، اما واقعا در مورد آنچه که شما در حال تلاش برای برای طراحی بستگی دارد. در اجرای این، ما می توانیم یک ایده از ساختار دانش آموز است که قرض بگیرند. نحو بسیار شبیه است، جز در حال حاضر، این ایده است که کمی بیشتر انتزاعی از خانه و نام و ID. اما من پیشنهاد می کنم که ما می توانیم یک ساختار داده ها در C است که به نام گره، به عنوان حرف آخر در اسلاید نشان می دهد، داخل یک گره و یک گره فقط یک ظرف کلی در علم کامپیوتر است. آن را معمولا به عنوان یک دایره و یا مربع یا مستطیل که ما انجام داده ایم کشیده شده است. و در این ساختار داده، ما باید از نوع int، n، به طوری که شماره من می خواهم برای ذخیره. اما آنچه در این خط دوم، ساختار گره * بعدی است؟ چرا این درست است، یا چه نقشی در این بازی چیز، حتی اگر آن را در نگاه اول کمی مرموز است؟ آره. [پاسخ دانش آموز نامفهوم] دقیقا، به طوری که مرتب سازی بر اساس * غنایم است که آن را به یک اشاره گر نوعی است. نام این اشاره گر خودسرانه بعدی، اما ما می توانیم آن را به نام هر چیزی که ما می خواهیم، ​​اما چه این نقطه اشاره گر به؟ [دانشجو] گره دیگر است. >> دقیقا، آن را به گره دیگر چنین اشاره می کند. در حال حاضر، این نوع کنجکاوی C. به یاد بیاورید که C توسط کامپایلر بالا به پایین خوانده می، چپ به راست، که به این معنی است که اگر، این است که کمی متفاوت از چیزی است که ما با دانش آموز است. هنگامی که ما به تعریف یک دانش آموز، ما در واقع یک کلمه قرار نیست وجود دارد. فقط گفت: typedef. پس از آن ما تا به حال از نوع int شناسه، نام رشته، رشته خانه، و پس از آن دانش آموز در پایین ساختار. این بیانیه کمی متفاوت است چرا که، دوباره، کامپایلر C است که کمی گنگ است. تنها به خواندن بالا به پایین، بنابراین اگر آن را به خط 2 در اینجا به کجا میرویم اعلام شده است و آن را می بیند، آه، در اینجا یک متغیر به نام بعدی. این یک اشاره گر به گره ساختار است. کامپایلر برای تحقق بخشیدن به یک گره ساختار است؟ من هرگز از این چیزی که قبل از شنیده می شود، زیرا کلمه گره در غیر این صورت ممکن است به نظر می رسد تا پایین، بنابراین این افزونگی می باشد وجود دارد. شما باید برای گفتن گره ساختار در اینجا، که بعد از آن شما می توانید کوتاه بعد با تشکر از typedef پایین در اینجا، اما دلیل این است که ما در حال اشاره به ساختار خود را در داخل ساختار است. این یک مارپیچ وجود دارد. برخی از مشکلات جالب هستند به وجود می آیند. ما باید یک لیست از اعداد است. چگونه ما را به آن وارد؟ چگونه می توانم آن را جستجو کنم؟ چگونه ما را از آن حذف کنید؟ به خصوص در حال حاضر که در حال حاضر برای مدیریت تمام این اشاره گر. و تو فکر می کردی اشاره گرها مرتبسازی بر ذهن خم بود وقتی که یکی از آنها تنها در تلاش برای خواندن بین المللی به آن است. در حال حاضر ما به دستکاری ارزش یک لیست کل. چرا ما را 5 دقیقه استراحت ما در اینجا، و پس از آن خواهیم به ارمغان بیاورد بعضی افراد تا روی صحنه به انجام این کار است که دقیقا. C خیلی بیشتر سرگرم کننده است زمانی که آن را عمل کرده است. که به معنای واقعی کلمه را به اولین دوست دارید؟ خوب، در آمد بالا. شما برای اولین بار است. چه کسی می خواهم به 9؟ خوب، 9. چگونه در حدود 9؟ 17 یک دسته کوچک در اینجا. 22 و 26 که در ردیف جلو است. و پس از آن در مورد کسی که بیش از وجود دارد که در اشاره کرد. شما 34. خوب، 34، در بالا آمده است. اول این است که بیش از وجود دارد. خوب، هر چهار نفر از شما بچه ها. که ما به مدت 9 می گویند؟ که 9 است ما؟ که واقعا می خواهد به 9؟ تمامی حقوق، بیا، 9 است. در اینجا ما بروید. 34، ما شما را در طول ملاقات وجود دارد. بخش اول این است که خودتان را مانند که نگاه کنید. 26، 22، 17، خوب است. اگر شما می تواند ایستادن به سمت، چرا که ما قصد داریم تا شما را در یک لحظه malloc. خوب، خوب است. بسیار خوب، بسیار عالی است، پس اجازه دهید از یک زن و شوهر از سوالات در اینجا. و در واقع، آنچه که نام خود را؟ >> آنیتا. آنیتا، خوب، بیا اینجا. آنیتا به ما کمک مرتب کردن بر اساس یکی از سوال نسبتا ساده را حل کند در اولین، که این است که چگونه می توانم به شما در پیدا کردن یا نه یک ارزش است در لیست؟ در حال حاضر، توجه کنید که اول، به نمایندگی اینجا لوکاس، کمی متفاوت است، و به همین ترتیب قطعه خود را از مقاله است عمد وری چرا که آن را کاملا به عنوان بلند نیست و نمی کشد تا به عنوان بیت، حتی اگر از لحاظ فنی او به همان اندازه از کاغذ فقط چرخش است. اما او کمی متفاوت است که در او فقط 32 بیت برای یک اشاره گر است، و همه از این بچه ها هستند 64 بیت است، که نیمی از آن تعداد، نیمی از آن است که یک اشاره گر است. اما اشاره گر به تصویر کشیده شده است نیست، بنابراین اگر شما بچه ها تا حدودی می تواند ناشیانه استفاده از دست چپ خود را به فرد بعدی را به شما اشاره. و تو شماره 34. نام شما؟ آری. آری، پس در واقع، برگزاری این مقاله در دست راست خود را، و دست چپ می رود راست پایین. شما نماینده تهی در سمت چپ است. در حال حاضر تصویر انسانی ما است بسیار سازگار است. این است که در واقع اشاره گر کار. و اگر شما می توانید صدای بهم خوردن چیزی کمی در این راه تا من خود را در راه نیستم. آنیتا در اینجا، من شماره 22 را پیدا کنید، اما فرض محدودیت انسان نگه داشتن تکه های کاغذ، اما این یک لیست است، و شما فقط باید لوکاس برای شروع زیرا او است که به معنای واقعی کلمه اشاره گر اول است. فرض کنید که شما خودتان اشاره گر، و بنابراین شما بیش از حد از این توانایی به نقطه در چیزی. چرا با اشاره دقیقا همان چیزی است که لوکاس با اشاره به کار نمی شوی؟ خوب است، و اجازه دهید من از این تصویب در اینجا. فقط به خاطر بحث، اجازه دهید من جلو و یک صفحه خالی در اینجا. چگونه می توانم نام و نام خانوادگی خود را هجی کنید؟ >> آنیتا. خوب، آنیتا. بیایید می گویند که گره * آنیتا = لوکاس. خب، ما باید با شما تماس لوکاس. ما باید تماس شما برای اولین بار است. چرا این کار را در واقع مطابق با واقعیت در اینجا؟ یک، برای اولین بار در حال حاضر وجود دارد. اول اختصاص داده شده است که احتمالا در جایی تا اینجا. گره * اول، و آن را اختصاص داده شده است یک لیست به نحوی است. من نمی دانم که چگونه است که اتفاق افتاده است. اتفاق افتاده است که قبل از کلاس آغاز شده است. این لیست پیوندی انسان ایجاد شده است. و در حال حاضر در این نقطه در داستان این است که همه در فیس بوک رفتن ظاهرا بعد در این نقطه در داستان، آنیتا شده است مقداردهی اولیه به صورت برابر به اولین، که به این معنا نیست که آنیتا در لوکاس. در عوض، او در آنچه که او در نقاط اشاره زیرا همان آدرس که در داخل لوکاس است 32 بیت - 1، 2، 3 - در حال حاضر نیز در داخل از آنیتا است 32 بیت - 1، 2، 3. در حال حاضر 22 مشاهده. چگونه می توانید در مورد انجام این کار بروید؟ که؟ >> به هر. نقطه را به هر چیز دیگری، پس پیش بروید و عمل آن را به عنوان بهترین شما می توانید اینجا. خوب، خوب، و در حال حاضر شما در حال اشاره به چیزی است که نام خود را با 22؟ Ramon را ببینید. >> رامون، رامون است برگزاری 22. شما در حال حاضر انجام چک. آیا رامون == 22، و اگر چنین است، به عنوان مثال، ما می توانیم بازگشت درست است. اجازه بدهید در حالی که این بچه ها اینجا ایستاده تا حدودی ناشیانه اجازه دهید کاری من به سرعت مانند بولی پیدا کنید. من قصد دارم به جلو بروید و می گویند (گره فهرست *، اعضای هیات N). من حق با شما بچه ها. من فقط باید به نوشتن مقداری کد است. و حالا من قصد دارم به جلو بروید و این کار، گره * آنیتا فهرست =. و من قصد دارم به جلو بروید و می گویند در حالی که (آنیتا = NULL). استعاره در اینجا کمی کشیده شده است، اما در حالی که (آنیتا = NULL)، چه چیزی من می خواهم به انجام این کار؟ من نیاز به برخی از راه ارجاع عدد صحیح که آنیتا است با اشاره به در. در گذشته، هنگامی که ما تا به حال سازه ها، که یک گره، ما با استفاده از نماد نقطه، و ما می گویند چیزی شبیه به anita.n، اما مشکل در اینجا این است که آنیتا ساختار در جنوب شرقی نه. آن چیست؟ او یک اشاره گر است، پس در واقع، اگر ما می خواهیم برای استفاده از این نماد نقطه و این است که رفتن به نگاه عمدا کمی مرموز ما باید به چیزی شبیه به رفتن به سمت چپ هر آنچه آنیتا با اشاره به و پس از آن زمینه به نام N دریافت کنید. آنیتا یک اشاره گر است، اما * آنیتا چه شده است؟ چه چیزی شما را هنگامی که شما به چه آنیتا است با اشاره به در؟ یک ساختار، یک گره و یک گره، فراخوان، یک میدان به نام N به دلیل آن است، به یاد این 2 رشته، در کنار و N، که ما را دیدم یک لحظه پیش حق در اینجا. در واقع به تقلید از این کد، ما می توانیم این را می گویند و اگر ((* آنیتا) N == N)، N است که من به دنبال. توجه داشته باشید که تابع در شماره من در مورد مراقبت تصویب شد. سپس من می توانید پیش بروید و چیزی شبیه به راست. دیگری، در صورتی که این مورد نیست، چه چیزی من می خواهم کاری انجام دهید؟ چگونه می توانم ترجمه به کد آنیتا به طور مستقیم به راه رفتن را از طریق لیستی؟ باید چه کار کنم تا اینجا برای شبیه سازی آنیتا که گام به گام به سمت چپ، که گام به گام به سمت چپ؟ [پاسخ دانش آموز نامفهوم] >> که؟ [پاسخ دانش آموز نامفهوم] خوب، یک ایده بد نیست، اما در گذشته، زمانی که ما انجام داده ایم، ما انجام داده ایم آنیتا + + به این دلیل که به شماره 1 اضافه کردن به آنیتا که به طور معمول در شخصی که در کنار اشاره، مانند رامون، یا شخصی که در کنار او و در کنار او فرد پایین خط. اما کاملا خوب نیست در اینجا به دلیل چه چیزی در حافظه؟ که نه. ما باید برای غیر فعال کردن آن است. مثل این در حافظه به نظر می رسد، و حتی اگر من کشیده 1 و 2 و 3 نزدیک به یک دیگر، اگر ما واقعا شبیه سازی می تواند به شما بچه ها، در حالی که هنوز هم مردم همان اشاره، می توانید برخی از شما را یک گام به عقب برداشته تصادفی، برخی از شما تصادفی گام به جلو؟ این آشفته بازار هنوز هم یک لیست پیوندی اما این بچه ها می تواند در هر نقطه در حافظه، بنابراین آنیتا + + است قصد ندارم به کار چرا؟ چه در محل آنیتا + +؟ چه کسی می داند. برخی از آن ارزش دیگری را که خیلی اتفاق می افتد قرار گرفته در میان همه این گره ها توسط شانس از آنجا که ما در حال یک آرایه با استفاده از. ما اختصاص داده شده است هر یک از این گره ها به صورت جداگانه. بسیار خوب، اگر شما بچه ها می توانید خود را به عقب تمیز کردن. اجازه دهید به من پیشنهاد می کنند که به جای آنیتا + +، ما به جای آنیتا می شود خب، چرا به هر آنیتا است با اشاره به در ما نمی بروید و پس از آن انجام بعدی؟ به عبارت دیگر، ما به رامون، که نگه داشتن شماره 22، و پس از آن. بعدی این است که هر چند به عنوان آنیتا می توان به کپی کردن اشاره گر دست چپ خود را. اما او نمی خواهد فراتر از رامون از آنجا که ما در بر داشت 22. اما این امر می تواند ایده. در حال حاضر، این ظروف سرباز یا مسافر خدا افتضاح است. راستش، هیچ کس تا به حال به این نحو، به یاد داشته باشید و بنابراین خوشبختانه، این در واقع کمی عمدی-OH، شما واقعا نمی بینید آنچه من نوشتم. این امر می تواند قانع کننده اگر شما می توانید. مامور پست بپردازید. در پشت صحنه، من به حل این مشکل در این راه. آنیتا را که گام به گام به سمت چپ، اول، ما به آدرس که آنیتا با اشاره به و که در آن او را نه تنها N، که ما آن را فقط به خاطر مقایسه چک، اما شما نیز بعد - در این مورد، دست چپ رامون با اشاره به گره بعدی در لیست است. اما این ظروف سرباز یا مسافر خدا افتضاح است که به من اشاره شد، اما به نظر می رسد از C اجازه می دهد تا این ساده ما. (آنیتا) به جای نوشتن، ما به جای آن می توانید فقط آنیتا-> N نوشتن، و این دقیقا همان کارکردی است، اما آن را بسیار بیشتر بصری، و آن را بسیار بیشتر سازگار با تصویری که ما در حال طراحی تمام این مدت با استفاده از فلش است. در نهایت، چه چیزی ما نیاز داریم تا در پایان این برنامه انجام دهید؟ یک خط از کد باقی مانده وجود دارد. بازگشت چه؟ غلط است، چرا که اگر ما را از طریق کل در حالی که حلقه و آنیتا است، در واقع، تهی، این بدان معناست که او رفت و تمام راه را به انتهای لیست جایی که او با اشاره به آنچه که نام خود را دوباره؟ دست چپ آری. >> آری، که تهی است. آنیتا در حال حاضر تهی، و من می دانم که شما تنها اینجا ایستاده ام ناشیانه در برزخ چون من قصد دارم در تک صدایی در اینجا، اما ما به شما دوباره در یک لحظه را درگیر کند. آنیتا تهی که در آن نقطه در داستان است، بنابراین در حالی که خاتمه حلقه، و ما باید برای بازگشت به غلط، زیرا اگر او تمام راه را به اشاره گر تهی آری پس از آن بود نه شماره ای است که او در لیست به دنبال وجود دارد. ما می توانیم از این تا تمیز کردن بیش از حد، اما این اجرای بسیار خوب یک تابع پیمایش، پیدا کردن تابع برای یک لیست پیوندی است. هنوز هم جستجوی خطی است، اما آن را به عنوان ساده به عنوان یک اشاره گر به + + و یا + + متغیر من چون در حال حاضر ما نمی می توانید حدس بزنید که در آن هر یک از این گره ها در حافظه هستند. ما باید به معنای واقعی کلمه به دنبال دنباله از پودرهای سوخاری و یا به طور خاص تر، اشاره گر، از یک گره به دیگری. در حال حاضر سعی کنید یکی دیگر به شما اجازه می دهد تا. آنیتا، آیا شما می خواهید برای آمدن به اینجا؟ چرا ما به جلو بروید و تخصیص یک نفر دیگر از مخاطبان؟ Malloc نام شما؟ >> ربکا. ربکا. ربکا از مخاطبان malloced شده است. و او در حال حاضر ذخیره سازی شماره 55. و هدف در دست در حال حاضر است که برای آنیتا به درج ربکا به لیست مرتبط در محل مناسب خود. بیا اینجا برای یک لحظه. من چیزی شبیه به این انجام می شود. * گره من انجام داده اند. نام شما چیست؟ دوباره؟ ربکا >> ربکا، درست است. ربکا malloc (sizeof (گره)) می شود. درست مثل ما چیزهایی مثل دانش آموزان و فلان چیز را در گذشته اختصاص داده شده است، ما نیاز داریم که به اندازه گره، به طوری که در حال حاضر ربکا اشاره به آنچه که؟ ربکا دارای دو رشته در داخل از او، که یکی از آنها 55. اجازه دهید، ربکا-> = 55. اما پس از آن ربکا بعدی> باید مانند حال حاضر، دست او نوع از چه کسی می داند؟ این اشاره به برخی از ارزش زباله، پس چرا برای اندازه گیری خوبی انجام نمی ما حداقل این کار را به طوری که دست چپ است که در حال حاضر در کنار او است. در حال حاضر آنیتا، آن را از اینجا. شما باید ربکا اختصاص داده شده است. برو جلو و برای پیدا کردن جایی که ما باید ربکا را قرار داده است. خوب، بسیار خوب است. خوب، خوب است، و در حال حاضر ما نیاز شما را به ارائه یک بیت از جهت، بنابراین شما رسیده آری. دست چپ خود را تهی است، اما ربکا به وضوح به حق به آن تعلق دارد، پس ما چطور باید این لیست مربوط به تغییر به منظور قرار دادن ربکا را به محل مناسب است؟ اگر شما به معنای واقعی کلمه می تواند حرکت دست چپ مردم را در سراسر به عنوان مورد نیاز، خواهیم مشکل این است که راه حل. خوب، خوب است، و در همین حال، دست چپ ربکا در حال حاضر در کنار او. بود که بیش از حد آسان است. بیایید اختصاص we're تقریبا انجام شده است، 20 است. خوب، در آمد بالا. 20 مورد اختصاص داده شده است، به طوری که اجازه دهید من به جلو بروید و می گویند در اینجا دوباره ما فقط انجام * گره سعد. ما malloc (sizeof (گره)). ما پس از انجام به نحو یکسان به عنوان ما قبل 20 و من NULL بعدی =، انجام و در حال حاضر آن را به آنیتا برای وارد کردن شما به لیست پیوندی، اگر شما می توانید این نقش دقیقا همان بازی است. را اجرا کند. خوب، خوب است. در حال حاضر با دقت فکر می کنم قبل از اینکه شما شروع به حرکت دست چپ در اطراف. شما تا کنون بی دست و پا ترین نقش امروز. از دست منتقل می شوند؟ خوب، صبر کنید، من از شنیدن برخی از هیچ است. اگر برخی از مردمی مودبانه برای کمک به حل یک وضعیت بی دست و پا در اینجا می خواهم. دست چپ کسی باید شود به روز شده شاید؟ آره. [دانشجو] سعد. خوب، سعد، اما چرا؟ [پاسخ دانش آموز نامفهوم] خوب، چرا که اگر ما حرکت می کند، چه نام شما؟ >> مارشال. مارشال، در صورتی که دست خود را حرکت اول به تهی، در حال حاضر ما به معنای واقعی کلمه چهار نفر در این لیست یتیم زیرا او تنها چیزی که اشاره به رامون و همگان را به سمت چپ بود، بنابراین به روز رسانی که اشاره گر بد بود. بگذارید لغو که. خوب است، و در حال حاضر رفتن به جلو و حرکت مناسب دست چپ اشاره به رامون. این احساس کار برکنار کمی است. در حال حاضر دو نفر با اشاره به رامون وجود دارد، اما خوب است زیرا در حال حاضر به چه روش دیگری می توانم فهرست ما به روز رسانی؟ از سوی دیگر به حرکت می کند؟ عالی، در حال حاضر ما از دست رفته هر حافظه داشته باشد؟ نه، خیلی خوب، بیایید ببینید که اگر ما نمی توانیم شکستن این یک بار دیگر. Mallocing یک زمان گذشته، شماره 5. تمام راه را در پشت، در پایین آمده است. این بسیار هیجان انگیز است. [تشویق حضار] نام شما؟ >> ران. رون، خوب، شما به عنوان شماره 5 malloced. ما فقط اعدام کدی است که تقریبا یکسان به این تنها با یک نام متفاوت است. عالی. در حال حاضر، آنیتا، موفق باشید قرار دادن شماره 5 را در فهرست در حال حاضر. خوب، و؟ عالی، پس این واقعا یک سوم از مجموع سه مورد است. ما برای اولین بار به کسی که در پایان بود، ربکا. ما پس از آن تا به حال کسی در وسط. در حال حاضر ما کسی را در آغاز، و در این مثال، ما در حال حاضر به حال برای به روز رسانی لوکاس برای اولین بار چرا که این عنصر برای اولین بار در این فهرست در حال حاضر در یک گره جدید اشاره، که به نوبه خود، با اشاره به تعداد گره 9. این تظاهرات بسیار بی دست و پا بود، من مطمئن هستم، بنابراین یک دور بزرگ از تشویق برای این بچه ها اگر شما می توانید. سادگی انجام می شود. که تمام است. شما ممکن است قطعه خود را از کاغذ به عنوان یک حافظه کوچک را نگه می دارد. به نظر می رسد که انجام این کار در کد کاملا به عنوان به عنوان تنها حرکت دست در اطراف ساده نیست و با اشاره به اشاره گر در همه چیز متفاوت است. اما متوجه باشید که وقتی که می آید زمان برای پیاده سازی چیزی شبیه به یک لیست پیوندی و یا یک نوع از آن را اگر شما در واقع تمرکز این اصول پایه، مشکلات نیش اندازه من باید به شکل از، این دست و یا این دست، درک کنند که آنچه که در غیر این صورت یک برنامه نسبتا پیچیده می تواند، در واقع، به بلوک های ساختمان نسبتا ساده مثل این کاهش می یابد. بیایید همه چیز را در یک جهت پیچیده تر هنوز. ما در حال حاضر مفهوم لیست پیوندی است. ما همچنین با تشکر از پیشنهاد به عقب وجود دارد لیست پیوند مضاعف، به نظر می رسد که تقریبا مشابه است، اما در حال حاضر ما دو اشاره گر را در داخل ساختار به جای یکی، و ما احتمالا می تواند کسانی که اشاره گر قبلی و بعدی تماس یا سمت چپ و یا راست، اما ما انجام دهید، در واقع، نیاز به دو نفر از آنها. کد خواهد بود کمی بیشتر درگیر است. آنیتا مجبور به انجام کار بیشتر در اینجا بر روی صحنه است. اما ما قطعا می تواند این نوع از ساختار را اجرا می کنند. در شرایط استفاده از زمان، هر چند، آنچه را که در آن زمان در حال اجرا آنیتا یافتن N عدد در یک لیست پیوندی در حال حاضر؟ هنوز هم بزرگ O از N، پس از آن بهتر از جستجوی خطی است. ما می توانیم جستجوی دودویی را انجام نمی، چند، دوباره. چرا که در مورد؟ شما نمی توانید پرش در اطراف. اگرچه بدیهی است که تمام انسان ها در صحنه را ببینید، و آنیتا می تواند آن را eyeballed و گفت: "در اینجا این است که وسط لیست، او را که نمی دانم اگر او برنامه کامپیوتر زیرا تنها چیزی که او تا به حال بوسیله کلون محکم کردن در آغاز از سناریو لوکاس، که اولین اشاره گر بود. او لزوما به دنبال آن لینک را، شمارش راه خود را تا زمانی که او در بر داشت تقریبا وسط، و حتی پس از آن، او را نمی خواهید بدانید که به او رسیده وسط مگر او می رود تمام راه را برای پایان دادن به کشف کردن که چگونه بسیاری وجود دارد، سپس backtracks، و این که بیش از حد سخت خواهد بود مگر اینکه شما تا به حال لیست پیوند مضاعف برخی از مرتب کردن بر اساس. حل برخی از مشکلات امروز، اما با معرفی دیگران است. چه در مورد ساختار داده های مختلف در دسترس نباشد؟ این عکس از سینی در ماتر خانه است، و در این مورد، ما باید یک ساختار داده ما همچنین نوع در حال حاضر شده است صحبت کردن در مورد. ما در مورد یک پشته در زمینه حافظه صحبت کردیم، و این که مرتب سازی بر اساس عمدا نام به دلیل در شرایط استفاده از حافظه پشته به طور موثر یک ساختمان داده است که چیزهای بیشتر و بیشتر لایه در بالای آن است. اما نکته جالب در مورد پشته، به عنوان مورد در واقع، این است که آن را به یک نوع خاصی از ساختار داده ها. این ساختمان داده است که در آن عنصر برای اولین بار در آخرین عنصر خارج شده است. اگر شما سینی برای اولین بار بر روی پشته قرار داده است، شما در حال رفتن به متاسفانه سینی آخرین به پشته، و این لزوما چیز خوبی نیست. در مقابل، شما می توانید در مورد آن فکر می کنم راه دیگری در اطراف. آخرین بار در اول است. در حال حاضر، به هر سناریو به ذهن می آیند که در آن داشتن یک پشته ساختار داده ها که در آن شما را مجبور می کند که مالکیت از آخرین، اول، است که در واقع قانع کننده است؟ آیا این یک چیز خوب است؟ این است که یک چیز بد است؟ این قطعا یک چیز بد است اگر سینی های همه یکسان نیست و همه آنها رنگ های ویژه مختلف و یا فلان چیز بود، و رنگی که شما میخواهید تمام راه را در پایین است. البته، شما می توانید بدون تلاش زیادی می کنید. شما باید از بالا شروع شده و کار خود را کاهش دهید. به طور مشابه، اگر شما یکی از این پسران فن که منتظر می ماند تا تمام شب تلاش برای بدست آوردن آی فون و خطوط در یک جایی مثل این؟ آیا آن را نمی شود خوب اگر از فروشگاه اپل پشته ساختمان داده؟ عالیست؟ [چنین نیست]؟ این تنها خوبی برای افرادی است که نشان می دهد تا در آخرین لحظه ممکن و پس از آن نواخته صف. و در واقع، این واقعیت است که من خیلی مایل بود برای گفتن صف در واقع مطابق با آنچه که ما این نوع از ساختمان داده، یکی در واقعیت که در آن سفارش می کند ماده، و شما می خواهید یکی از اولین بار در سال به یکی از اولین اگر فقط به خاطر عدالت انسانی است. ما به طور کلی می خواهید که یک صف ساختمان داده تماس بگیرید. به نظر می رسد علاوه بر لیست های پیوندی، ما می توانیم شروع به استفاده از این همان ایده های اساسی و شروع به ایجاد انواع جدید و متفاوت از راه حل ها برای مشکلات. به عنوان مثال، در مورد یک پشته، ما می تواند پشته نمایندگی با استفاده از یک ساختار داده مثل این، پیشنهاد میکنم. در این مورد، من اعلام ساختار، و من گفت: داخل این ساختار آرایه ای از اعداد و سپس یک متغیر به نام اندازه است، و من می خواهم به این کاری که پشته. در حال حاضر، چرا این در واقع کار می کند؟ در مورد پشته، من می توانم این به طور موثر بر روی صفحه نمایش به عنوان یک آرایه رسم. در اینجا این است که پشته من. این اعداد است. و ما آنها را به عنوان این قرعه کشی، این، این، این، این است. و پس از آن من از برخی اعضای دیگر داده ها در اینجا، است که به نام اندازه، تا این اندازه است، و این تعداد، و در مجموع، اپل کل در اینجا نشان دهنده یک پشته ساختار است. در حال حاضر، به طور پیش فرض، اندازه احتمالا تا 0، مقداردهی اولیه، و چه در داخل آرایه ای از اعداد در ابتدا وقتی که من برای اولین بار تخصیص یک آرایه؟ زباله. چه کسی می داند؟ و آن در واقع مهم نیست. مهم نیست که در صورتی که این 1، 2، 3، 4، 5، به طور کامل به صورت تصادفی بد شانس ذخیره شده در ساختار من چون تا زمانی که من می دانم که به اندازه پشته 0 است، سپس من می دانم برنامه نویسی، در هر یک از عناصر موجود در آرایه به نظر نمی آید. مهم نیست که چه خبر هست. آیا در آنها به نظر نمی آید، به عنوان مفهوم به یک اندازه از 0 خواهد بود. اما فرض کنید در حال حاضر من به جلو بروید و وارد کردن چیزی به پشته. من می خواهم به درج شماره 5، پس از قرار دادن شماره 5 در اینجا، و سپس آنچه را می توانم قرار داده است را در اینجا؟ در حال حاضر من در واقع پایین قرار (1) برای اندازه و در حال حاضر پشته از اندازه 1. چه می شود اگر من به جلو بروید و با وارد کردن شماره، اجازه دهید می گویند، 7 بعدی است؟ این پس از آن می شود تا 2 به روز شده، و پس از آن خواهیم 9 انجام دهد. و پس از آن این می شود تا 3 به روز رسانی شده است. اما در حال حاضر از ویژگی های جالب این پشته این است که من قرار است که برای حذف عنصر اگر من می خواهم به پاپ چیزی از پشته، پس به صحبت می کنند؟ 9 خواهد بود اولین چیزی که به آن بروید. چگونه باید تصویر را تغییر دهید اگر من می خواهم به یک عنصر خارج از پشته پاپ، یک سینی در ماتر را دوست دارید؟ آره. >> [دانشجو] اندازه مجموعه را به 2 است. دقیقا، من انجام می دهم به اندازه 2 تعیین می کنند، و آنچه را می توانم با آرایه انجام دهید؟ من مجبور به انجام هر کاری است. من می توانم، فقط به مقعد می شود، قرار دادن یک 0 وجود دارد و یا برابر با -1 یا چیزی است که به معنی که این ارزش قانونی نمی باشد، اما مهم نیست چون من می توانم در خارج از آرایه ی خود چه مدت آن است که سابقه به طوری که من می دانم تنها در دو مورد اول از عناصر این آرایه را نگاه کنید. در حال حاضر، اگر من بروید و اضافه کردن شماره 8 به این آرایه، چگونه تغییر تصویر بعدی؟ این 8 می شود، و این می شود 3. من برش گوشه و کنار چند در اینجا. در حال حاضر ما 5، 7، 8، و ما در حال برگشت به اندازه 3. این است که خیلی ساده برای پیاده سازی، اما زمانی که می خواهیم را به پشیمانی این تصمیم طراحی؟ هنگامی که همه چیز شروع به رفتن به بسیار، بسیار اشتباه است؟ آره. [پاسخ دانش آموز نامفهوم] وقتی که شما میخواهید به عقب برگردید و اولین عنصر شما قرار داده شوید. به نظر می رسد در اینجا حتی اگر پشته یک آرایه در زیر هود، این ساختارهای داده ایم شروع به صحبت کردن در مورد نیز به طور کلی به عنوان شناخته شده ساختمان های داده انتزاعی به موجب آن چگونه آنها در حال اجرا به طور کامل علاوه بر این نقطه است. ساختار داده ها مانند یک پشته قرار است برای اضافه کردن پشتیبانی عملیات مانند فشار، هل می دهد که یک سینی را بر روی پشته، و پاپ، که حذف یک عنصر از پشته، و این از آن است. اگر شما برای دانلود کد شخص دیگری که در حال حاضر اجرا این چیزی به نام پشته، آن شخص را نوشته اند تنها دو عملکرد را برای شما، با فشار و پاپ، که تنها هدف در زندگی خواهد بود که دقیقا برای انجام. شما یا او و یا او را که پیاده سازی آن برنامه می شده اند به طور کامل به تصمیم می گیرید که چگونه برای اجرای معناشناسی از هل دادن و ظاهر در زیر هود یا عملکرد هل دادن و ظاهر است. و من را ساخته اند یک تصمیم تا حدودی کوته در اینجا پیاده سازی پشته من با این ساختار داده ساده چرا؟ هنگامی که این اطلاعات شکستن ساختار است؟ در چه نقطه خطا را بازگشت به زمانی که کاربر خواستار فشار، برای مثال؟ [دانشجو] اگر هیچ فضای بیشتری وجود دارد. دقیقا، اگر به فضای بیشتری وجود دارد، اگر من بیش از ظرفیت، که همه کلاه است، زیرا نشان می دهد که آن را نوعی از ثابت جهانی است. خب، پس من فقط رفتن به گفت: "متاسفم، من می توانم یکی دیگر از ارزش هل داد بر روی پشته، "بسیار در ماتر می خواهم. در برخی موارد، آنها در حال رفتن به ضربه بالا که کابینه کوچک. فضای بیشتر یا ظرفیت در پشته وجود دارد، که در آن نقطه است نوع خطا وجود دارد. آنها به این عنصر را در جایی دیگر، سینی در جایی دیگر، یا هیچ جا و در همه حال. در حال حاضر، با صف، ما می تواند از آن کمی متفاوت اجرا می کنند. صف کمی متفاوت است که در زیر هود، می توان آن را اجرا به عنوان یک آرایه است، اما چرا، در این مورد، من پیشنهاد همچنین دارای یک عنصر head که به نمایندگی از رئیس این فهرست، در مقابل لیست، فرد برای اولین بار در خط در فروشگاه اپل، علاوه بر این به اندازه؟ چرا یک قطعه اضافی از داده ها نیاز دارم؟ فکر می کنم به چه تعداد است اگر من کشیده شده است آن را به عنوان شرح زیر است. فرض کنید این است که در حال حاضر یک صف به جای استفاده از یک پشته، تفاوت بودن، مثل فروشگاه اپل صف منصفانه است. اولین کسی که در خط در آغاز از لیست، شماره 5 در این مورد، او در حال رفتن به فروشگاه می شود اجازه دهید 1. اجازه دهید که. فرض کنید که این حالت از صف من در این لحظه در زمان، و در حال حاضر فروشگاه اپل باز می شود و شخص اول، شماره 5، به فروشگاه منجر شده است. چگونه می توانم عوض کنم در حال حاضر که من آن را د صف اول شخص در مقابل خط؟ چه خبر؟ >> [دانشجو] تغییر صف. تغییر سر، تا 5 از بین می رود. در واقع، آن را به عنوان اینکه چگونه به بهترین وجه برای انجام این کار؟ در واقع، آن را به عنوان اینکه این مرد از بین می رود. شماره 7 را در یک فروشگاه واقعی انجام می دهید؟ آنها را یک گام بزرگ به جلو است. اما آنچه را که ما آمده ایم تا درک که آن را به آرایه ها می آید و همه چیز در حال حرکت است؟ این نوع از زباله ها از وقت خود را، درست است؟ چرا شما می شود تا مقعد را به عنوان اولین کسی باشید که در آغاز خط فیزیکی شروع تکه از حافظه؟ این کاملا غیر ضروری است. چرا؟ چه می توانم فقط به یاد داشته باشید به جای؟ >> [پاسخ دانش آموز نامفهوم] دقیقا، من فقط می تواند با این اطلاعات اضافی سر عضو به یاد داشته باشید که هم اکنون سر از لیست دیگر 0، که در آن یک لحظه پیش بود. در حال حاضر آن را در واقع شماره 1. در این راه، من بهینه سازی اندک است. فقط به خاطر من کسی که از خط در ابتدای خط در فروشگاه اپل د صف به این معنا که هر کس به تغییر، که فراخوان یک عملیات خطی. من به جای آن می توانید در زمان ثابت فقط صرف و پس از آن رسیدن به یک واکنش بسیار سریعتر است. اما قیمت من پرداخت این همان چیزی است که برای به دست آوردن که عملکرد اضافی و نداشتن به تغییر همه؟ آره. >> [پاسخ دانش آموز نامفهوم] می تواند افراد بیشتری اضافه کنید، خوب، این مشکل این است که متعامد به این واقعیت است که مردم در اطراف ما در حال تغییر نیست. این هنوز یک آرایه، یا نه همه ما تغییر و یا نه آه، من منظور شما چیست، درست است. در واقع، من با آنچه شما می گویید که در آن تقریبا به عنوان اینکه به توافق برسند ما در حال حاضر هرگز به استفاده از شروع این آرایه دیگر چرا که اگر 5 را حذف کنم و سپس 7 را حذف کنم. اما من فقط مردم را به حق قرار داده است. این احساس مانند من به هدر رفتن فضا، و در نهایت صف من به هیچ چیز در تمام تجزیه، بنابراین ما فقط می تواند شال مردم داشته باشد، و ما می توانیم از این آرایه فکر می کنم واقعا به عنوان نوعی از ساختار دایره ای، اما ما با استفاده از چه اپراتور در C برای انجام این کار مرتب کردن بر اساس شال؟ [پاسخ دانش آموز نامفهوم] >> عملگر باقی مانده است. این امر می تواند آزار دهنده کمی به فکر می کنم از طریق چگونه می توانم شما انجام شال، اما ما می تواند از آن را انجام دهد و ما می توانیم شروع به قرار دادن مردم در استفاده می شود جلوی خط، اما ما فقط با متغیر سر این که سر واقعی خط واقع شده است به یاد داشته باشید. چه می شود اگر در عوض، هدف ما در نهایت، هر چند، برای نگاه کردن به اعداد، همانطور که ما در اینجا بر روی صحنه با آنیتا، اما ما واقعا می خواهید بهترین ها را از تمام این جهان؟ ما می خواهیم پیچیدگی بیش از آرایه اجازه می دهد تا چون ما می خواهیم که توانایی رشد ساختار داده ها به صورت پویا. اما ما نمی خواهیم به توسل به چیزی است که ما با اشاره به در اولین سخنرانی بود، یک الگوریتم بهینه نیست، که از جستجوی خطی است. به نظر می رسد که شما می توانید، در واقع، رسیدن به و یا حداقل نزدیک به زمان ثابت، به موجب آن کسی مانند آنیتا اگر او تنظیم ساختار داده خود را به یک لیست پیوندی نه به پشته، صف، می تواند، در واقع، آمد تا با ساختار داده ای است که اجازه می دهد تا او را به نگاه کردن همه چیز، حتی واژه ها، نه تنها اعداد، در آنچه که ما به زمان ثابت است تماس بگیرید. و در واقع، نگاه به آینده، یکی از psets در این کلاس تقریبا همیشه یک پیاده سازی از یک غلطگیر، به موجب آن ما شما را دوباره برخی از واژه ها 150.000 انگلیسی و هدف این است که بار آن را به حافظه و به سرعت قادر به پاسخگویی به سوالات از فرم این کلمه را درست وارد کردید؟ و واقعا از آن اگر شما تا به حال از طریق هر 150.000 کلمات تکرار برای پاسخ به این خورد. اما، در واقع، خواهیم دید که ما می توانیم آن را در مدت زمان بسیار، بسیار سریع انجام دهد. و این شامل اجرای چیزی به نام جدول هش، و حتی اگر در نگاه اول، این چیزی است که به نام جدول هش رفتن به به ما اجازه دستیابی به این فوق العاده زمان پاسخ سریع، معلوم می شود که در واقع یک مشکل وجود دارد. وقتی که می آید زمان برای پیاده سازی این چیزی که به نام دوباره، من آن را انجام دوباره. من تنها در اینجا. وقتی که می آید زمان برای اجرای این چیزی که به نام جدول هش، ما در حال رفتن به یک تصمیم است. چقدر بزرگ باید این چیز را در واقع می شود؟ و هنگامی که ما شروع به قرار دادن اعداد به این جدول هش، چگونه می خواهیم آنها را در چنین راه ذخیره که ما می توانیم آنها را به بیرون به سرعت به عنوان ما به آنها کردم؟ اما خواهیم قبل از دیدن طولانی است که این سوال است از این بخش زمانی که تولد هر کس در کلاس خواهد بود که کاملا وابسته است. به نظر می رسد که در این اتاق، ما چند صد نفر، بنابراین شانس است که دو نفر از ما همان روز تولد است، احتمالا بسیار بالا است. چه می شود اگر تنها 40 از ما در این اتاق وجود دارد؟ شانس دو نفر داشتن تولد چه هستند؟ [] دانشجویان بیش از 50٪ است. بله، بیش از 50 درصد است. در واقع، من حتی به ارمغان آورد یک نمودار است. به نظر می رسد و این است که واقعا فقط یک پیش نمایش دزدکی حرکت کردن اگر فقط 58 از ما در این اتاق وجود دارد، احتمال 2 تماس با ما داشتن تولد بسیار بالا، تقریبا 100٪، و این که به علت یک دسته کامل از صدمه دیده است برای ما در روز چهارشنبه است. با که گفت، اجازه دهید موکول اینجا. ما به شما در روز چهارشنبه را ببینید. [تشویق حضار] [CS50.TV]