[Powered by Google Translate] بخش 6: کمتر راحت]
[مقابله Hardison] [دانشگاه هاروارد]
[این CS50.] [CS50.TV]
بسیار خوب. خوش آمدید به بخش 6.
این هفته، ما قصد داریم به صحبت کردن در مورد ساختمان های داده شده در بخش
در درجه اول به دلیل مشکل این هفته در spellr
آیا یک دسته کامل از اکتشاف ساختار داده های مختلف است.
یک دسته از راه های مختلف شما می توانید با مجموعه ای مشکل وجود دارد،
و ساختمان های داده بیشتر شما می دانید در مورد چیزهایی که سرد است که شما می توانید انجام دهید.
>> بنابراین اجازه گرفتن آغاز شده است. در ابتدا ما قصد داریم به صحبت در مورد پشته،
پشته و صف به ساختارهای داده ای است که ما قصد داریم به صحبت کردن در مورد.
پشته ها و صف ها واقعا مفید است هنگامی که ما شروع به صحبت کردن در مورد نمودار ها
که ما قصد داریم برای انجام خیلی از حق در حال حاضر.
اما آنها واقعا خوب به درک یکی از سازه های بزرگ داده های اساسی CS.
شرح در مشخصات مجموعه مشکل،
اگر شما آن را بالا بکشد، مذاکرات در مورد پشته به عنوان شبیه به
توده ای از سینی های ناهار خوری است که شما را در کافه تریا در سالن ناهار خوری
که در آن زمانی که کارکنان غذاخوری می آید و قرار می دهد سینی های غذاخوری پس از آنها آنها را تمیز،
آنها را یکی در بالای دیگر پشته.
و پس از آن زمانی که بچه ها برای گرفتن غذا می آیند،
آنها جلو و سینی های خاموش، برای اولین بار در بالای یک، و سپس زیر آن، پس از آن که در زیر.
بنابراین، در واقع، اولین سینی که کارکنان غذاخوری قرار داده است پایین یکی از آخرین که می شود گرفته شده است.
یکی از آخرین که کارکنان غذاخوری قرار داده و در یکی از اولین بار است که می شود برای صرف شام گرفته شده است.
در تنظیمات مجموعه ای از مشکل است، جایی که شما می توانید دانلود کنید اگر شما در حال حاضر نه،
ما در مورد مدل سازی پشته ساختار داده ها با استفاده از این نوع از ساختارها (struct) صحبت می کنند.
>> بنابراین آنچه ما باید در اینجا، این است که شبیه به آنچه که در سخنرانی ارائه شد.
به جز در سخنرانی ما این کار را با نوع داده int به عنوان مخالف به کاراکتر * ها ارائه شده است.
این است که برای رفتن به یک پشته که فروشگاه چه؟
دانیل؟ چه هستند که ما در این پشته ذخیره؟
[دانیال] رشته؟ >> ما در حال ذخیره سازی رشته ها در این پشته، دقیقا.
همه شما نیاز به منظور ایجاد یک پشته یک آرایه است
ظرفیت خاص، که در این مورد،
ظرفیت در همه کلاه است به خاطر آن ثابت است.
و پس از آن در علاوه بر این به آرایه، همه ما باید به دنبال اندازه آرایه است.
یک چیز را به یاد داشته باشید که در اینجا نوع سرد
این است که ما در حال ایجاد ساختار داده ها انباشته شده در بالا یکی دیگر از ساختمان داده، آرایه است.
راه های مختلفی را برای پیاده سازی پشته وجود دارد.
ما این کار را انجام نمی کاملا رتبهدهی نشده است، اما امیدوارم پس از انجام این کار از مشکلات مربوط به لیست
شما خواهید دید که چگونه می توانید به راحتی پیاده سازی پشته در بالای یک لیست پیوندی را به عنوان.
اما در حال حاضر، ما به آرایه ها می چسبد.
تا دوباره، همه ما نیاز داریم که یک آرایه است و ما فقط نیاز به پیگیری اندازه آرایه است.
[سام] با عرض پوزش، به همین دلیل است که به شما گفت که این پشته در بالای رشته؟
به نظر من این به نظر می رسد مانند رشته در پشته می باشد.
[Hardison] آره. ما در حال ایجاد، ما در حال گرفتن آرایه ما ساختار داده ها -
این یک سوال بزرگ است. بنابراین سوال این است که چرا، برای افرادی که در حال تماشای این آنلاین
چرا به ما گفت که پشته است که در بالا از رشته ها،
چرا که در اینجا به نظر می رسد مانند رشته داخل پشته هستند؟
است که کاملا مورد.
چیزی که من اشاره به این بود که ما باید یک آرایه ساختار داده است.
ما باید آرایه ای از کاراکتر * ها، آرایه ای از رشته ها،
و ما می خواهیم برای اضافه کردن به آن به منظور ایجاد ساختار داده ها انباشته شده است.
>> بنابراین یک پشته است کمی پیچیده تر از یک آرایه است.
ما می توانیم یک آرایه یک پشته برای ساخت استفاده کنید.
به طوری که که در آن ما می گویند که پشته در بالای یک آرایه ساخته شده است.
به همین ترتیب، مثل من که قبلا گفته شد، ما می توانیم یک پشته در بالای یک لیست پیوندی ساخت.
به جای استفاده از یک آرایه برای نگهداری عناصر،
ما می توانیم یک لیست پیوندی برای نگه داشتن عناصر و ایجاد پشته اطراف آن استفاده کنید.
اجازه راه رفتن را از طریق چند مثال، به دنبال در برخی از کد،
برای دیدن آنچه که در واقع اتفاق می افتد در اینجا.
در سمت چپ، من آنچه که ساختار پشته در حافظه نگاه پرتاب
اگر ظرفیت # تعریف شد به چهار.
ما باید چهار عنصر آرایه * کاراکتر است.
ما باید رشته ها [0]، رشته [1]، رشته [2]، رشته [3]
و پس از آن فضا برای عدد صحیح اندازه ما.
آیا این را حس؟ باشه.
این همان چیزی است که اتفاق می افتد اگر چه من در سمت راست،
خواهد شد که کد من، این است که فقط اعلام یک ساختار، یک ساختار انباشته نامیده میشود.
این چیزی است که ما را دریافت کنید. این می گذارد این نشانه ها در حافظه است.
اولین سوال در اینجا این است که محتویات این ساختار پشته ها چه هستند؟
در حال حاضر آنها هیچ چیز، اما آنها کاملا هیچ چیز نیست.
آنها این نوع از زباله است. در حال حاضر هیچ ایده چه چیزی در آنها.
وقتی S پشته ما اعلام می کنیم، ما فقط پرتاب که در بالای حافظه است.
این نوع مانند اعلام اعضای هیات من و مقدار دهی اولیه آن.
شما نمی دانید که چه چیزی در آن وجود دارد. شما می توانید به خواندن آنچه در آن وجود دارد،
اما آن را نمی ممکن است فوق العاده مفید است.
یکی از چیزی که شما می خواهید برای همیشه به یاد داشته باشید برای انجام این کار است مقداردهی اولیه هر چه نیاز به مقداردهی اولیه می شود.
در این مورد، ما قصد داریم به مقداردهی اولیه به اندازه صفر باشد،
چرا که به نوبه خود می شود برای ما بسیار مهم است.
ما می تواند پیش برود و مقداردهی اولیه اشاره گر، همه S * کاراکتر،
به برخی از ارزش قابل درک است، احتمالا تهی.
اما این کاملا لازم است که ما انجام می دهیم که نه.
>> در حال حاضر، دو عملیات اصلی بر روی پشته هستند؟
هر کسی به یاد داشته باشید از سخنرانی چیزی است که شما با پشته انجام می دهید؟ بله؟
[استلا] هل دادن و ظاهر؟ >> دقیقا.
هل دادن و ظاهر دو عملیات اصلی بر روی پشته.
و چه فشار کاری انجام دهید؟ >> آن را قرار می دهد چیزی را بر روی بالای صفحه
از پشته، و سپس کشیدن آن طول می کشد خاموش.
[Hardison] دقیقا. بنابراین هل دادن هل چیزی در بالای پشته است.
مثل کارکنان ناهار خوری قرار دادن یک سینی غذاخوری در مقابله.
و ظاهر است گرفتن یک سینی غذاخوری از پشته.
بیایید راه رفتن را از طریق یک زن و شوهر نمونه هایی از آنچه اتفاق می افتد
هنگامی که چیزهایی که ما فشار را به پشته.
اگر ما به فشار رشته 'سلام' را بر روی پشته ما
این همان چیزی است که نمودار ما در حال حاضر می خواهم.
ببینید چه اتفاقی می افتد؟
ما به عنصر اول از آرایه رشته ما را تحت فشار قرار دادند
و ما upped تعداد اندازه ما می شود (1).
بنابراین اگر ما در تفاوت بین دو اسلاید نگاه کنید، در اینجا 0 بود، در اینجا قبل از فشار است.
در اینجا است که پس از فشار است.
قبل از فشار، پس از فشار است.
و در حال حاضر ما باید یک عنصر در پشته ما.
این رشته "سلام" است، و این از آن است.
هر چیز دیگری در آرایه در آرایه رشته ها، هنوز هم زباله.
ما آن را مقداردهی اولیه نیست.
بیایید می گویند ما یک رشته دیگر فشار را بر روی پشته ما.
ما قصد داریم به فشار "جهان" در این زمان است.
بنابراین شما می توانید ببینید "جهان" در اینجا در بالا "سلام" می رود،
و تعداد اندازه بالا می رود تا 2.
در حال حاضر ما می توانیم "CS50"، و آن را در بالا دوباره هل داد.
اگر ما به عقب، شما می توانید ببینید که چگونه ما در حال هل دادن چیزهایی در بالای پشته است.
و در حال حاضر ما به موسیقی پاپ.
هنگامی که ما چیزی از پشته ظهور، چه اتفاقی افتاد؟
هر کسی تفاوت؟ این خیلی ظریف است.
[دانشجو] اندازه. >> آره، به اندازه تغییر کرده است.
>> چه چیز دیگری که شما انتظار می رود را تغییر دهید؟
[دانشجو] رشته ها، بیش از حد. >> راست. رشته بیش از حد.
به نظر می رسد که زمانی که شما در حال انجام آن به این ترتیب،
از آنجا که ما در حال عناصر را به پشته ما کپی کردن نیست،
ما در واقع لازم نیست تا هر کاری را انجام دهند، ما فقط می تواند با استفاده از اندازه
برای پیگیری تعدادی از چیزهایی در آرایه ما
به طوری که هنگامی که ما در موسیقی پاپ دوباره، دوباره ما فقط اندازه ما را واحد کم به 1.
بدون نیاز به رفتن به در و بازنویسی هر چیزی وجود دارد.
نوع بد بو.
به نظر می رسد که ما به طور معمول فقط به ترک همه چیز تنهایی، زیرا این کار کمتر برای ما انجام است.
اگر ما لازم نیست برای رفتن به عقب و بازنویسی چیزی، پس چرا آن را انجام دهد؟
بنابراین، هنگامی که ما از پشته پاپ دو بار خاموش، که می کند این است واحد کم به اندازه چند بار.
و باز هم، این است که فقط به این دلیل که ما چیزها را به پشته ما کپی کردن نیست.
بله؟ پیش بروید.
[دانشجو، ناخوانا] >> و پس از آن چه اتفاقی می افتد هنگامی که چیزی به شما فشار دوباره؟
هنگامی که شما فشار چیزی دوباره، کجا برود؟
آن را از کجا بروید، ریحان؟ >> به رشته [1]؟ >> راست.
چرا به رشته ها [3] آن را به رفتن نیست؟
[ریحان] از آنجا که آن را فراموش کرده که هر چیزی که در رشته ها وجود دارد [1] و [2]
[Hardison] دقیقا. پشته ما، در اصل، "فراموش شده" بود که نگه داشتن به هر چیزی
در رشته [1] و یا رشته های [2]، تا زمانی که "woot" ما فشار،
آن را قرار می دهد که به این عنصر در رشته [1].
آیا هر گونه سوال در مورد چگونگی این کار، در یک سطح پایه؟
[سام] این است که در هر راه پویا، از نظر مقدار
و یا در از نظر اندازه از پشته؟
[Hardison] دقیقا. این است - این نقطه بود که این یک پشته به صورت پویا growning.
این پشته است که می تواند نگه دارید، در، چهار کاراکتر * S، در اکثر چهار چیز است.
اگر ما را امتحان کنید و فشار یک چیز پنجم، شما چه فکر میکنید باید اتفاق می افتد؟
[دانش آموزان، ناخوانا]
[Hardison] دقیقا. تعدادی از چیزهایی است که می تواند اتفاق می افتد وجود دارد.
این احتمالا می تواند SEG گسل، با توجه به آنچه که ما -
دقیقا چگونه ما اجرای به عقب پایان است.
این می تواند بازنویسی. این که می تواند سرریز بافر است که ما در مورد کلاس صحبت داشته باشد.
چه خواهد بود بارز ترین چیز این است که ممکن است رونویسی
اگر ما سعی به فشار یک چیز اضافی بر روی پشته ما؟
بنابراین شما ذکر سرریز بافر.
آنچه که ممکن است چیزی که گرفتن نوشته شده است و یا بیش از در stomped
اگر ما به طور تصادفی با تلاش به فشار یک چیز اضافی سرریز؟
[دانیل، ناخوانا] >> ممکن است.
اما در ابتدا، آنچه ممکن است اتفاق می افتد؟ چه می شود اگر ما سعی به فشار یک چیز چهارم؟
این ممکن است به اندازه، بازنویسی حداقل با نمودار حافظه این است که ما داریم.
>> در خصوصیات مجموعه مشکل، که همان چیزی است که ما قصد داریم به اجرای امروز،
چه کار می کنیم می خواهید برای انجام شده است فقط بازگشت کاذب.
روش فشار ما این است که برای بازگشت به یک مقدار بولی،
و آن مقدار بولی درست خواهد بود اگر فشار موفق
و نادرست اگر ما می توانیم هر چیزی را هل داد به این دلیل که پشته پر است.
اجازه راه رفتن را از طریق یک کمی از این کد در حال حاضر.
در اینجا تابع فشار است.
تابع فشار ما برای پشته در رشته را بر روی پشته قرار داده است.
این درست به بازگشت اگر رشته با موفقیت رانده شد
در غیر این صورت پشته و نادرست است.
هر گونه پیشنهادات در مورد آنچه که ممکن است چیز خوبی برای انجام این کار در اینجا؟
[سام] اگر اندازه برابر ظرفیت و سپس بازگشت کاذب؟
[Hardison] یکنوع بازی شبیه لوتو. کار نیس.
اگر به اندازه ظرفیت، ما قصد داریم به بازگشت غلط است.
ما می توانیم هر چیزی را در پشته قرار داده است.
در غیر این صورت، ما می خواهم برای قرار دادن چیزی در بالای پشته است.
"بالای پشته،" در ابتدا؟
[دانیال] اندازه 0؟ >> اندازه 0.
بالای پشته پس از یک چیز در پشته وجود دارد چیست؟ دختر خانم، آیا می دانید؟
[دختر خانم]. حجم >> یکی است، دقیقا. شما در حفظ و اضافه کردن به اندازه،
و هر زمانی که شما در حال قرار دادن عنصر جدید در اندازه شاخص در آرایه.
ما می توانیم آن را با این نوع از یک بوش انجام دهد، اگر آن را حس می کند.
بنابراین ما باید آرایه ما رشته، ما در حال رفتن به آن را در شاخص اندازه دسترسی داشته باشید.
و ما در حال رفتن به مغازه * کاراکتر ما در آن وجود دارد.
توجه داشته باشید که چگونه بدون کپی کردن رشته وجود دارد که در اینجا،
هیچ تخصیص پویا از حافظه؟
و پس از آن دختر خانم به ارمغان آورد تا آنچه که ما در حال حاضر باید به انجام این کار،
چرا که ما از رشته در محل مناسب در آرایه ذخیره شده،
و او گفت که ما تا به حال به افزایش اندازه به طوری که ما برای فشار بعدی آماده است.
بنابراین ما می توانیم که با s.size + +.
در این مرحله، ما را به آرایه ما تحت فشار قرار دادند. آخرین چیزی که ما باید انجام دهیم؟
[دانشجو] [بازگشت درست است. >> بازگشت درست است.
پس از آن بسیار ساده است، یک کد بسیار ساده است. بیش از حد نه.
هنگامی که شما سر خود را در اطراف پشته چگونه کار می کند پیچیده شده،
این بسیار ساده است برای پیاده سازی است.
>> در حال حاضر، بخش بعدی این است که ظاهر یک رشته از پشته.
من قصد دارم به شما بچه ها برخی از زمان به کار بر روی این بیت کمی.
این تقریبا در اصل معکوس از آنچه که ما انجام داده ایم در اینجا در فشار است.
آنچه من انجام داده ام، در واقع - اوه.
من بوت دستگاه در اینجا، و در دستگاه،
من کشیده تا این مشکل را 5 مشخصات.
اگر ما در اینجا زوم، ما می توانید ببینید که من در cdn.cs50.net/2012/fall/psets/pset5.pdf هستم.
شما بچه ها دریافت این کد که در اینجا واقع شده، section6.zip؟
بسیار خوب. اگر شما انجام داده اند نیست که انجام این کار در حال حاضر، واقعا سریع است.
من آن را در پنجره ترمینال من انجام دهد.
من در واقع آن را انجام داد تا در اینجا. آره.
بله، سام؟ >> من یک سوال در مورد چرا براکت s.string 'از اندازه به شما می گویند = STR؟
STR چیست؟ این است که در جایی قبل از تعریف، و یا - اوه، در خ * کاراکتر؟
[Hardison] بله، دقیقا. این استدلال بود. >> آه، درست است. متأسفم.
[Hardison] ما در حال تعیین رشته به فشار شوید.
سوال دیگری که ممکن است که ما در اینجا واقعا صحبت بود
در زمان ما برای مسلم است که ما تا به حال این متغیر به نام های
بود که در دامنه و در دسترس به ما.
در زمان ما برای مسلم است که این ساختار پشته بود.
پس نگاهی به این کد فشار،
شما می توانید ببینید که ما در حال انجام چیزهای با این رشته که در منتقل می کردم
اما بعد از آن همه به طور ناگهانی، ما دسترسی به s.size، مانند، که در آن ها آمده اند؟
در کد است که ما قصد داریم تا نگاهی به در بایگانی بخش
و پس از آن چیزهای است که شما انجام می شود در مشکل شما این مجموعه ها،
پشته ما ساخته ایم، ساختار یک متغیر جهانی
به طوری که ما می توانیم دسترسی به آن را در همه توابع مختلف ما
بدون نیاز به صورت دستی آن را منتقل می کند و با تصویب آن توسط مرجع،
آیا همه این نوع از مسائل به آن.
ما فقط کمی تقلب، اگر شما خواهد شد، تا همه چیز بهتر است.
و این چیزی است که ما در اینجا به دلیل آن را برای تفریح، آن را آسانتر می کند.
اغلب، شما خواهید دید که مردم این کار را در صورتی که یکی از بزرگ ساختمان داده
که در درون برنامه خود اداره می شود.
>> اجازه بازگشت را به دستگاه.
آیا همه موفقیت section6.zip؟
همه آن را از حالت زیپ خارج با استفاده از section6.zip جدا کردن؟
اگر شما را به بخش 6 دایرکتوری -
aah، همه جا -
و شما فهرستی از آنچه در اینجا، شما می بینید که شما رو سه متفاوت است. فایل C.
شما باید یک صف، یک SLL است که به تنهایی مرتبط با لیست و پشته.
اگر شما باز کردن stack.c،
شما می توانید ببینید که ما باید این ساختار تعریف شده برای ما،
ساختار دقیق است که ما فقط در مورد اسلاید صحبت کردیم.
ما متغیر جهانی خود را برای پشته کردم،
ما باید تابع فشار ما،
و پس از آن ما باید تابع پاپ ما است.
من کد برای عقب براند تا بر روی اسلاید در اینجا قرار دهید،
اما آنچه که من می خواهم به شما بچه ها را به انجام است، به بهترین توانایی خود را،
بروید و پیاده سازی تابع پاپ.
هنگامی که شما آن را اجرا کنید، می توانید این کار را با ایجاد پشته کامپایل،
و پس از آن پشته حاصل اجرایی اجرا شود،
و این همه از این کد آزمون را در اینجا است که در اصلی اجرا شود.
و اصلی طول می کشد مراقبت از فشار و تماس های پاپ
و مطمئن شوید که همه چیز می رود از طریق همه حق است.
همچنین این مقدار دهی اولیه به اندازه پشته
بنابراین شما لازم نیست که به نگرانی در مورد مقدار دهی اولیه که.
شما می توانید فرض کنید که آن را به درستی مقداردهی اولیه شده است
آن زمان است که شما دسترسی آن را در تابع پاپ.
آیا این را حس؟
بنابراین در اینجا ما بروید. کد فشار وجود دارد.
من به شما بچه 5 یا 10 دقیقه به من بدهید.
اگر شما هر گونه سوال در این فاصله در حالی که شما در حال برنامه نویسی،
لطفا از آنها بخواهید با صدای بلند.
بنابراین اگر شما به نقطه چسبیده کنید، فقط بپرسید.
اجازه بدهید من می دانم، اجازه دهید هر کس دیگری می دانم.
با همسایه خود را بیش از حد.
[دانیال] ما فقط به اجرای موسیقی پاپ در حال حاضر؟ >> فقط پاپ.
هر چند شما می توانید پیاده سازی از فشار اگر می خواهید کپی کنید
به طوری که تست کار خواهد کرد.
از آنجا که آن را سخت برای تست چیزهای از وارد شدن به -
و یا، آن را سخت برای تست چیزهای به ظاهر از پشته اگر هر چیزی را در پشته برای شروع وجود ندارد.
>> پاپ قرار است از بازگشت چیست؟ این عنصر از بالای پشته است.
قرار است برای به دست آوردن این عنصر بالای پشته
و پس از آن واحد کم اندازه پشته،
و در حال حاضر شما از دست داده ایم عنصر در بالای صفحه است.
و سپس این عنصر به شما در بالا بازگشت.
[دانشجو، ناخوانا]
[Hardison] پس چه اتفاقی می افتد اگر شما انجام این کار؟ [دانشجو، ناخوانا]
به پایان می رسد تا اتفاق می افتد به احتمال زیاد شما دسترسی به هر دو
یک عنصر که مقداردهی اولیه نشده است با این حال، تا محاسبات خود را
از جایی که آخرین عنصر است خاموش است.
بنابراین در اینجا، اگر شما متوجه است، در فشار، ما دسترسی به رشته ها در عنصر s.size
چرا که آن را به یک شاخص جدید.
بالای پشته است.
در حالی که در موسیقی پاپ، s.size است برای رفتن به فضای بعدی،
فضایی که در بالا از تمام عناصر موجود در پشته خود را.
پس بالا ترین عنصر در s.size نیست،
اما در عوض، آن را در زیر آن است.
>> چیز دیگر را به انجام زمانی که شما - در موسیقی پاپ،
این است که شما باید به اندازه واحد کم.
اگر شما به یاد داشته باشید به نمودار کوچک ما اینجا،
در واقع، تنها چیزی که ما دیدیم اتفاق می افتد زمانی که ما به نام موسیقی پاپ
این بود که این اندازه کاهش یافته است، برای اولین بار به 2 و سپس به 1.
سپس هنگامی که ما تحت فشار قرار دادند یک عنصر جدید در، آن را بروید در نقطه ای مناسب است.
[ریحان] اگر s.size 2، پس از آن که به عنصر 2 رفتن نیست،
و پس از آن شما می خواهم می خواهم که این عنصر به ظاهر خاموش؟
بنابراین اگر ما به رفت - >> اجازه دهید نگاهی به این دوباره.
اگر این پشته ما این است که در این نقطه
و ما به پاپ،
که در آن شاخص بالا ترین عنصر است؟
[ریحان] در 2 است، اما آن را به پاپ 3. >> راست.
به طوری که که در آن اندازه ما 3 است، اما ما می خواهیم به پاپ این عنصر در صفحه اول 2.
این است که نوع معمولی از خارج توسط یکی است که شما را با صفر نمایه سازی آرایه است.
بنابراین شما می خواهید به موسیقی پاپ عنصر سوم، اما عنصر سوم این است که در اول 3.
و به همین دلیل ما لازم نیست که برای انجام این کار 1 منهای زمانی که ما در حال هل دادن
چون در حال حاضر، شما متوجه است که بالا ترین عنصر،
اگر ما به فشار چیز دیگری را بر روی پشته در این نقطه،
ما می خواهیم آن را در اول 3 فشار.
و این فقط اتفاق می افتد که اندازه و شاخص خط تا زمانی که شما در حال هل دادن است.
>> چه کسی رو پیاده سازی پشته کار؟
شما یک پشته کار یکی است. آیا شما موسیقی پاپ کار نشده است؟
[دانیال] بله. من فکر می کنم تا.
برنامه >> در حال اجرا و SEG گسلش، آن را چاپ می شود؟
آیا آن را چاپ از "موفقیت" هنگامی که شما آن را اجرا کنید؟
آره. را پشته، آن را اجرا کنید، اگر آن را چاپ از "موفقیت" می کند و رونق رفتن نیست،
پس از آن همه خوب است.
بسیار خوب. بیایید به دستگاه واقعا به سرعت،
و ما از طریق این راه رفتن.
اگر ما در چه خبر است در اینجا با پاپ،
دانیل، اولین چیزی است که شما چه بود؟
[دانیال] اگر s.size بزرگتر از 0.
[Hardison] باشه. و چرا شما کار را کرد؟
[دانیال] برای اینکه مطمئن شوید که چیزی در داخل پشته وجود دارد.
[Hardison] راست. شما می خواهید برای تست تا مطمئن شوید که s.size بزرگتر از 0؛
در غیر این صورت، چه چیزی می خواهید به اتفاق می افتد؟
[دانیال] بازگشت پوچ؟ >> بازگشت به تهی، دقیقا.
بنابراین اگر s.size بزرگتر از 0 بود. پس چه می خواهیم کاری انجام دهید؟
چه کنیم اگر پشته خالی نیست؟
[استلا] اندازه شما واحد کم؟ >> اندازه واحد کم، درست است.
پس چگونه شما انجام دهد را انجام داد؟ >> s.size -.
[Hardison] بزرگ است. و پس از آن چه شما باید انجام دهید؟
[استلا] و پس از آن به من گفت: بازگشت s.string [s.size].
[Hardison] بزرگ است.
در غیر این صورت شما بازگشتی NULL است. بله، سام؟
[سام] چرا به آن نیاز دارند نمی شود s.size + 1؟
[Hardison] به علاوه 1؟ >> آره. >> آن را کردم.
[سام] من فکر می کنم به دلیل این که شما در حال گرفتن 1 از،
پس از آن شما برای رفتن به بازگرداندن این است که آنها را برای خواسته است.
[Hardison] و این تنها چیزی است که ما با صحبت کردن در مورد این موضوع از 0 شاخص.
بنابراین اگر ما زوم در اینجا.
اگر ما به این مرد نگاه کنید در اینجا شما می توانید ببینید که زمانی که ما در موسیقی پاپ،
ما در حال ظاهر این عنصر در صفحه اول 2.
>> بنابراین اندازه ما کاهش اول، و سپس اندازه ما مطابقت شاخص ما.
اگر ما به اندازه واحد کم اولین بار نیست، پس ما باید برای انجام اندازه -1 و پس از آن کاهشی است.
بزرگ است. همه خوب است؟
هر گونه سوال در مورد این؟
تعدادی از روش های مختلف برای نوشتن این عنوان به خوبی وجود دارد.
در واقع، ما می توانیم چیزی حتی - ما می توانیم یک بوش انجام دهد.
ما می توانیم یک خط بازگشت را انجام دهد.
بنابراین، ما در واقع می تواند قبل از ما با انجام این که بازگشت کاهشی.
بنابراین قرار دادن - قبل از s.size.
که باعث می شود خط واقعا متراکم است.
جایی که تفاوت بین - اندازه و s.size -
است که این پسوند - آنها آن را پسوند به این دلیل که - می آید پس از s.size -
بدان معنی است که s.size به منظور پیدا کردن شاخص مورد ارزیابی قرار
آن را به عنوان در حال حاضر زمانی که این خط اجرا شده است،
و پس از آن این - اتفاقی می افتد بعد از خط می شود اجرا می شود.
پس از این عنصر در s.size اول دیده است.
و این چیزی است که ما می خواهیم نیست، چرا که ما می خواهیم کاهشی اتفاق می افتد 1.
در Othewise، ما قصد داریم به دسترسی به آرایه، به طور موثر، به خارج از مرزهای.
ما در حال رفتن به دسترسی به این عنصر بالا است که ما در واقع می خواهید برای دسترسی به.
آره، سام؟ >> آن را سریع یا استفاده از RAM کمتری را در یک خط است یا نه را؟
[Hardison] راستش، آن را واقعا بستگی دارد.
[سام، ناخوانا] >> بله، بستگی دارد. شما می توانید از حقه کامپایلر
برای دریافت کامپایلر را به رسمیت شناخته است که، معمولا، من قابل تصور است.
>> بنابراین ما از یک کمی در مورد این مسائل بهینه سازی کامپایلر ذکر شده
که شما می توانید انجام دهید، در تدوین
و این نوع از چیزی است که یک کامپایلر ممکن است قادر به کشف کردن است،
مانند اوه، سلام، شاید من می تواند این همه در یک عملیات انجام دهید،
به عنوان مخالف به بارگذاری متغیر اندازه از RAM،
طرح ساده آن، ذخیره سازی آن را به عقب، و سپس آن را در حال بارگذاری دوباره
به روند بقیه این عملیات است.
اما به طور معمول، نه، این نوع از چیزی که نمی باشد.
که رفتن را به برنامه های خود را به میزان قابل توجهی سریعتر.
سوالات بیشتر در مورد پشته؟
>> بنابراین هل دادن و ظاهر است. اگر شما بچه ها می خواهید سعی کنید از نسخه هکر،
آنچه ایم در نسخه هکر انجام می شود در واقع رفته
و رشد در این پشته به صورت پویا.
چالش این است که در درجه اول وجود دارد در اینجا در تابع فشار،
تا بفهمند که چگونه به رشد که آرایه
که شما در حفظ و هل دادن عناصر بیشتر و بیشتر بر روی پشته.
در واقع این کد اضافی بیش از حد نیست.
فقط یک تماس - شما باید به خاطر داشته باشید برای دریافت تماس به malloc در آن وجود دارد به درستی،
و پس از آن شکل زمانی که شما در حال رفتن به تماس بازتخصیص.
این یک چالش سرگرم کننده است اگر شما علاقه مند است.
>> اما در حال حاضر، اجازه دهید، و اجازه دهید بحث در مورد صف.
رفته از اینجا.
صف یک خواهر و برادر نزدیک از پشته است.
بنابراین در پشته، چیزهایی که در گذشته قرار گرفتند
اولین چیزهایی که به آن قابل بازیابی بودند.
ما باید این گذشته در، ابتدا، و یا LIFO، سفارش.
در حالی که در صف، به عنوان شما می خواهم از زمانی که شما در حال ایستاده در صف انتظار،
اولین کسی باشید که برای به دست آوردن در خط، اولین چیزی که به صف،
اولین چیزی که می شود از صف بازیابی است.
صف نیز اغلب استفاده می شود زمانی که ما در حال برخورد با نمودار ها
ما در مورد صحبت کردیم به طور خلاصه با پشته،
ها و صف ها نیز در دسترس است که برای یک دسته از چیزهای دیگر.
یکی از چیزهایی است که می آید تا اغلب تلاش برای حفظ، برای مثال،
یک لیست مرتب شده از عناصر.
و شما می توانید این کار را با یک آرایه انجام دهید. شما می توانید لیستی از چیزهایی که طبقه بندی شده اند در یک آرایه نگهداری،
اما جایی است که می شود روی حیله و تزویر است و سپس شما همیشه باید برای پیدا کردن
محل مناسب برای قرار دادن چیزی که بعد از.
بنابراین اگر شما یک آرایه از اعداد 1 تا 10،
و پس از آن شما می خواهید به گسترش است که به تمام اعداد 1 در 100،
و شما این اعداد را در صورت تصادفی و تلاش برای نگه داشتن همه چیز
طبقه بندی شده اند به عنوان شما را از طریق، شما را تا پایان نیاز به انجام بسیاری از تغییر است.
با انواع خاصی از صف ها و انواع خاصی از ساختمان داده های اساسی،
شما در واقع می توانید آن را نسبتا ساده نگه دارید.
شما لازم نیست برای اضافه کردن چیزی و سپس زدن همه چیز در هر زمان.
نه می توانم شما را برای انجام بسیاری از تغییر از عناصر داخلی در اطراف.
هنگامی که ما در یک صف نگاه کنید، که به شما مراجعه کنید - همچنین در queue.c کد بخش -
ساختار ایم که به شما داده شده است واقعا شبیه به ساختار است که ما شما را برای یک پشته داد.
>> یک استثناء به این وجود دارد، و آن یک استثنا
این است که ما باید این عدد صحیح به نام سر،
و سر در اینجا این است که برای پیگیری از سر صف،
یا اولین عنصر در صف.
با استفاده از پشته، ما قادر به نگه داشتن مسیر از عنصر را که ما برای بازیابی،
و یا در بالای پشته، فقط با استفاده به اندازه،
در حالی که با یک صف، ما نیاز به مقابله با به پایان می رسد مخالف است.
ما در حال تلاش برای رویه همه چیز در پایان است، اما پس از آن بازگشت همه چیز از جلو.
بنابراین به طور موثر، با سر، در حال حاضر شاخص از ابتدای صف،
و به اندازه ما می دهد شاخص در انتهای صف
به طوری که ما می توانیم همه چیز را از سر بازیابی و اضافه کردن چیزهایی به دم.
در حالی که با پشته، ما فقط با بالای پشته خرید و فروش.
ما تا به حال برای دسترسی به پایین پشته است.
ما فقط همه چیز را به بالا و در زمان همه چیز را از بالا
بنابراین ما که فیلد اضافی در داخل ساختار ما نیاز ندارد.
کند که به طور کلی احساس را؟
بسیار خوب. بله، شارلوت؟ [شارلوت، ناخوانا]
[Hardison] این یک سوال بزرگ، که یکی بود که در سخنرانی آمد.
شاید راه رفتن را از طریق چند مثال نشان می دهد چرا
ما نمی خواهیم که به استفاده از رشته ها [0] عنوان سر صف.
>> بنابراین تصور کنید که در حال حاضر صف ما، ما در حال رفتن به آن صف.
در ابتدا، زمانی که ما فقط آن را نمونه،
زمانی که ما فقط آن را اعلام کرد، ما را به هر چیزی مقداردهی اولیه نشده است.
این همه زباله است. پس البته که ما می خواهیم مطمئن شوید که ما مقداردهی اولیه
هر دو اندازه و زمینه های سر به 0، چیزی معقول است.
ما همچنین می تواند به جلو بروید و تهی از عناصر موجود در صف ما.
و مناسب نمودار را به این توجه کنید که در حال حاضر صف ما تنها می تواند برگزاری سه عنصر؛
در حالی که پشته ما می تواند چهار نگه دارید، صف ما فقط می تواند سه نگه دارد.
و این فقط به تناسب نمودار است.
اولین چیزی که اتفاق می افتد در اینجا این رشته است enqueue ما "سلام".
و درست مثل ما با پشته بود، هیچ چیز وحشتناکی های مختلف در اینجا،
ما با پرتاب این رشته در در رشته ها [0] و افزایش اندازه ما با 1.
ما enqueue "خداحافظ"، آن را قرار داده است.
پس این به نظر می رسد مانند یک پشته برای اکثر بخش است.
ما آغاز شده اینجا، عنصر، عنصر جدید، اندازه را نگه می دارد در حال بالا رفتن است.
چه اتفاقی می افتد در این نقطه زمانی که ما می خواهیم به dequeue چیزی؟
هنگامی که ما می خواهیم به dequeue، که این عنصر است که ما می خواهیم به dequeue است؟
[ریحان] رشته [0]. >> صفر. دقیقا حق، ریحان.
ما می خواهیم از رشته اول، این یکی، "سلام" را به خلاص شدن از شر.
پس چه چیز دیگری که تغییر؟
توجه داشته باشید که زمانی که ما چیزی از پشته ظهور، ما فقط به تغییر اندازه،
اما در اینجا، ما یک زن و شوهر از چیزهایی که تغییر کردم.
نه تنها تغییر اندازه، اما سر.
این است که بازگشت به نقطه شارلوت زودتر:
چرا این سر ما که به عنوان خوبی؟
معنی آن را در حال حاضر، شارلوت؟ نوع >>.
[Hardison] نوع؟ پس چه رخ داده هنگامی که ما dequeued؟
چه سر انجام بود که در حال حاضر جالب است؟
[شارلوت] آه، چرا که آن را تغییر - درست است. متوجه هستم.
از آنجا که سر - که در آن سر با اشاره به تغییر در قوانین و مقررات از محل.
این دیگر همواره یکی از شاخص صفر است. >> بله، دقیقا.
چه اتفاقی می افتد اگر dequeueing عنصر بالا
انجام شد و ما در این زمینه سر ندارد
چرا که ما همیشه خواستار شدند و این رشته در 0 شاخص سر صف ما،
پس از آن ما می خواهم بقیه صف برای تغییر کردن.
ما می خواهم برای تغییر "خداحافظ" از از رشته ها [1] به رشته ها [0].
و رشته ها [2] پایین به رشته [1].
و ما می خواهم که برای انجام این کار برای لیست کامل از عناصر،
مجموعه ای کامل از عناصر.
و هنگامی که ما در حال انجام این کار با یک آرایه، که می شود واقعا پرهزینه است.
بنابراین در اینجا، این یک معامله بزرگ است. ما فقط باید سه عنصر در آرایه.
اما اگر ما تا به حال یک صف از هزار عنصر یا یک میلیون عناصر،
و سپس به طور ناگهانی، ما شروع به ساخت یک دسته از dequeue می نامد، همه در یک حلقه،
همه چیز در حال واقعا به کم کردن سرعت آن را به عنوان شیفت همه چیز پایین به طور مداوم.
شما می دانید، با 1 تغییر مکان، تغییر 1، از SHIFT 1، از SHIFT توسط 1.
در عوض، ما از این سر، ما اسمش را "اشاره گر" حتی اگر آن را واقعا یک اشاره گر
در معنای دقیق، آن را یک نوع اشاره گر نیست.
این نوع int * یا * کاراکتر یا هر چیزی شبیه به آن نیست.
اما آن را به اشاره و یا نشان می دهد سر از صف ما. آره؟
>> [دانشجو] چگونه dequeue می دانم که فقط به ظاهر آنچه در سر؟
[Hardison] چگونه dequeue می دانم که چگونه به موسیقی پاپ آنچه در سر؟ حق >>، آره.
>> آنچه در آن نگاه کردن به این است که فقط هر زمینه سر قرار است به.
بنابراین در این مورد اول، اگر ما نگاه حق در اینجا،
سر ما، 0، 0 اول است. >> راست.
[Hardison] پس از آن فقط می گوید: خوب، خوب، این عنصر در اندیس 0، رشته "سلام"،
عنصر در سر صف ما است.
بنابراین ما در حال رفتن به dequeue که مرد.
خواهد شد که این عنصر می شود که به تماس گیرنده.
بله، سعد؟ >> پس سر اساسا مجموعه - که در آن شما در حال رفتن به صفحه اول آن است؟
این بود که شروع از آن؟ >> آره. >> درست است.
[Hardison] که این تبدیل شدن به پیمان جدید استارت را برای آرایه است.
بنابراین، هنگامی که شما dequeue چیزی، همه شما باید انجام دهید این است که دسترسی به عنصر اول q.head،
و خواهد بود که عنصر را که شما می خواهید به dequeue.
همچنین شما می توانید به واحد کم حجم.
ما را در یک بیت که در آن همه چیز کمی از روی حیله و تزویر با این.
ما dequeue، و در حال حاضر، اگر ما دوباره enqueue،
جایی که ما enqueue؟
عنصر بعدی در صف ما کجا برود؟
می گویند که ما می خواهیم به enqueue رشته "CS".
که به صفحه اول آن را؟ [] دانشجویان رشته های [2]. >> دو.
چرا 2 و 0؟
[ریحان] از آنجا که در حال حاضر سر 1، به طوری که مانند آغاز از لیست؟
[Hardison] راست. و آنچه بیانگر گزینه ای است که پاسخ دادن به آن پایان از لیست؟
چیزی که ما با استفاده از به معنی انتهای صف ما؟
سر، سر صف ما، در آغاز از صف ما است.
پایان صف ما چیست؟ [دانش آموزان] حجم. >> حجم، دقیقا.
بنابراین عناصر جدید ما در اندازه، و عناصری که ما را به خاموش کردن در سر.
هنگامی که ما enqueue عنصر بعدی، ما در حال قرار دادن آن در اندازه است.
[دانشجو] قبل از اینکه شما قرار داده است که در هر چند، اندازه 1 بود، درست است؟
[Hardison] راست. بنابراین نه کاملا در اندازه. + حجم، +1 نیست، اما سر +.
از آنجا که ما همه چیز را با مقدار سر منتقل.
بنابراین در اینجا، در حال حاضر ما باید یک صف از اندازه 1 شروع می شود که در اندیس 1.
دم اول 2 است. بله؟
>> [دانشجو] چه اتفاقی می افتد زمانی که شما dequeue رشته [0]، و شیارهای رشته در حافظه
فقط خالی شو، در واقع، یا فقط فراموش؟
[Hardison] آره. در این معنا، ما فقط آنها را به فراموش کردن.
اگر ما ذخیره سازی کپی از آنها -
بسیاری از ساختمان های داده، اغلب به نسخه خود را از عناصر ذخیره
به طوری که فرد مدیریت ساختار داده ها را ندارد به نگران
در مورد که در آن همه کسانی که اشاره گر در حال رفتن است.
ساختار داده نگه می دارد به همه چیز، نگه می دارد بر روی تمام نسخه،
اطمینان حاصل کنید که همه چیز ادامه یابد مناسب.
با این حال، در این مورد، این ساختمان های داده، برای سادگی،
کپی از هر چیزی که ما در آنها ذخیره نمی کند.
[دانشجو] این است که یک آرایه مداوم -؟ >> بله.
اگر ما نگاه چه تعریف از این ساختار آن است.
این فقط یک آرایه استاندارد مثل شما دیده ام،
آرایه ای از کاراکتر * S.
کند که - >> آره، من فقط تعجب بود
اگر شما در نهایت خواهید از حافظه اجرا شود، تا حدودی،
اگر شما تمام این نقاط خالی در آرایه شما؟
[Hardison] آره، که یک نقطه خوب است.
>> اگر ما در آنچه اتفاق افتاده، در حال حاضر در این نقطه، نگاه
ایم پر از صف ما، آن را مانند به نظر می رسد.
اما ما واقعا نمی پر تا صف ما
چرا که ما یک صف است که به اندازه 2 است، اما آن را در اندیس 1 شروع می شود،
چرا که جایی که اشاره گر سر ما است.
مثل شما می گفتند، که در رشته عنصر [0]، در اول 0 است، واقعا وجود ندارد.
در صف ما ندارد.
ما فقط زحمت نیست برای رفتن و بازنویسی آن زمانی که ما آن را dequeued.
بنابراین حتی اگر به نظر می رسد که ما از حافظه ام است، ما واقعا وجود ندارد.
آن نقطه در دسترس است برای ما برای استفاده از.
رفتار مناسب، اگر ما را امتحان کنید و برای اولین بار dequeue چیزی
مانند "خداحافظ"، که پاپ خداحافظی کردن.
در حال حاضر صف ما آغاز می شود در شاخص 2 و از اندازه 1 است.
و حالا اگر ما سعی می کنیم و enqueue چیزی دوباره، می گویند 50،
50 باید در این نقطه در اندیس 0
به دلیل آن را برای ما هنوز در دسترس است. بله، سعد؟
[سعد] آیا اتفاق می افتد که به طور خودکار؟
[Hardison] این اتفاق نمی افتد کاملا به صورت خودکار. شما باید برای انجام محاسبات ریاضی
آن را به کار می کنند اما اساسا آنچه که ما انجام داده ایم این است که ما فقط در اطراف پیچیده است.
[سعد] و آن درست است در صورتی که این است یک سوراخ در وسط آن؟
[Hardison] این است که اگر ما می توانیم ریاضی کار درستی است.
>> و معلوم که در واقع که سخت به با عملگر وزارت دفاع انجام نیست.
بنابراین درست مثل ما با سزار و مسائل رمزنگاری،
با استفاده از وزارت دفاع، ما می توانیم همه چیز را به پوشش در اطراف و نگه داشتن رفتن
در اطراف و در اطراف و در اطراف با صف ما،
نگه داشتن که اشاره گر سر حرکت در اطراف.
توجه کنید که اندازه است که همیشه احترام به تعدادی از عناصر در واقع در درون صف است.
و آن را فقط به اشاره گر سر نگه می دارد که دوچرخه سواری را از طریق.
اگر ما در آنچه رخ داده نگاه کنید، اگر ما به بازگشت به آغاز،
و شما فقط چیزی که اتفاق می افتد به سر تماشا
هنگامی که ما enqueue چیزی، هیچ چیز به سر اتفاق افتاده است.
هنگامی که ما enqueued چیز دیگری، هیچ چیز به سر اتفاق افتاده است.
محض این که ما dequeued چیزی، سر می رود تا به یک.
ما enqueued چیزی، هیچ چیز اتفاق می افتد به سر می شود.
هنگامی که ما چیزی dequeue، ناگهان همه از یک سر می شود افزایش مییابد.
هنگامی که ما enqueue چیزی، هیچ چیز اتفاق می افتد به سر می شود.
>> چه چیزی را در این مرحله اتفاق می افتد اگر ما به dequeue چیزی دوباره؟
هر گونه افکار؟ چه به سر اتفاق می افتد؟
چه چیزهایی را باید به سر اتفاق می افتد
اگر ما چیز دیگری به dequeue؟
سر حق در حال حاضر در صفحه اول 2.
که بدان معنی است که سر صف رشته ها [2].
[دانشجو] که برمی گرداند 0؟ >> باید به 0. باید بسته بندی اطراف، دقیقا.
تا کنون، هر بار که ما به نام dequeue، ما شده ایم افزودن به سر،
اضافه کردن یک به سر، اضافه کردن یک به سر، اضافه کردن یک به سر.
به محض این که اشاره گر سر می شود به شاخص در آرایه ما،
پس از آن ما باید آن را بپیچید بازگشت به اطراف به آغاز، به عقب برگردید تا 0.
[شارلوت] تعیین ظرفیت صف در پشته؟
[Hardison] در این مورد، ما فقط شده است با استفاده از ثابت # تعریف شده است. >> درست است.
[Hardison] در واقعی فایل C، شما می توانید بروید و در پهن کردن با آن را کمی
و آن را به عنوان بزرگ و یا بصورت کمی که شما می خواهید.
[شارلوت] بنابراین زمانی که شما آن را به صف، چگونه می توانم شما را کامپیوتر می دانیم
چقدر بزرگ است که شما می خواهید به پشته؟
[Hardison] این یک سوال بزرگ است.
یک زن و شوهر از راه وجود دارد. یکی این است که فقط آن را تعریف جلو
و می گویند این است که برای رفتن به یک صف است که دارای 4 عنصر یا 50 عناصر یا 10،000.
راه دیگر این است که برای انجام آنچه هکر مردمی نسخه در حال انجام
و ایجاد توابع به صف شما رشد می کنند به صورت پویا به عنوان کارهای بیشتری اضافه شوید.
>> [شارلوت] بنابراین با گزینه اول، به چه نحو می توانم به شما استفاده از
که به برنامه چه اندازه از صف؟
[Hardison] ه. پس از این.
من هنوز در stack.c در اینجا، بنابراین من فقط رفتن برای حرکت به بالا در اینجا.
آیا این حق را به شما اینجا را ببینید؟ این است که # تعریف 10 ظرفیت.
و این تقریبا به نحو دقیق همان است که ما برای صف می باشد.
به جز در صف، ما این زمینه ساختار اضافی در اینجا کردم.
[شارلوت] آه، من فکر می کردم ظرفیت به معنای ظرفیت برای رشته.
[Hardison] ه. >> که آن را حداکثر طول کلمه است. >> آن را کردم.
آره. ظرفیت اینجا - که یک نقطه بزرگ است.
و این چیزی است که از روی حیله و تزویر است
زیرا آنچه که ما انجام داده ایم، اعلام کرد که در اینجا یک آرایه ای از کاراکتر * S است.
آرایه ای از اشاره گرها.
این آرایه ای از کاراکتر است.
این است که احتمالا دیده اید زمانی که شما در بافر اعلام شده خود را برای فایل های I / O،
هنگامی که شما ایجاد شده است رشته دستی بر روی پشته.
با این حال، آنچه ما باید در اینجا یک آرایه ای از کاراکتر * S است.
پس از آن یک آرایه ای از اشاره گرها.
در واقع، اگر ما زوم به عقب و ما در نگاه چه خبر در اینجا
در ارائه، شما می بینید که عناصر واقعی، شخصیت داده
است که در داخل خود آرایه ذخیره می شود.
چه در داخل آرایه ذخیره می شود در اینجا اشاره گر به داده های شخصیت.
باشه. بنابراین، ما دیده ایم که چگونه اندازه صف فقط با پشته،
اندازه همیشه احترام به تعدادی از عناصر که در حال حاضر در صف.
پس از ساخت 2 enqueues، به اندازه 2 است.
پس از ساخت dequeue اندازه در حال حاضر 1.
به پس از دیگری enqueue اندازه برگشت تا 2.
بنابراین اندازه قطعا احترام به تعدادی از عناصر در صف،
و پس از آن سر و دوچرخه سواری را نگه می دارد.
آن را از 0-1-2، 0-1-2، 0-1-2 می رود.
و هر وقت ما تماس بگیرید dequeue، اشاره گر به سر می شود به شاخص بعدی افزایش مییابد.
و اگر سر به بیش، این حلقه در اطراف تا 0.
بنابراین با آن، ما می توانیم تابع dequeue ارسال.
و ما قصد داریم به ترک تابع enqueue برای شما بچه ها برای پیاده سازی به جای.
>> هنگامی که ما dequeue یک عنصر از صف ما،
اولین چیزی که دانیل زمانی که ما شروع به نوشتن تابع پاپ برای پشته بود؟
اجازه بدهید من از کسی که صحبت کرده است هنوز رتبهدهی نشده است را بشنود.
بیایید ببینید، سعد، آیا شما به یاد داشته باشید آنچه که دانیل را به عنوان اولین چیزی که زمانی که او نوشت: پاپ؟
[سعد] شد، آن بود - >> او برای چیزی مورد آزمایش قرار گرفته است.
[سعد] اگر اندازه بزرگتر از 0. >> دقیقا.
و چه شد که برای تست؟
[سعد] بود که آزمایش برای دیدن اگر هر چیزی در داخل آرایه وجود دارد.
[Hardison] آره. دقیقا. بنابراین شما می توانید هر چیزی را از پشته پاپ نیست اگر آن را خالی.
به همین ترتیب، شما می توانید هر چیزی از یک صف dequeue نیست اگر آن را خالی.
اولین چیزی که ما باید در عملکرد dequeue ما را در اینجا چیست، آیا شما فکر می کنید؟
[سعد] اگر اندازه بزرگتر از 0؟ >> آره.
در این مورد، من در واقع فقط تست شده برای دیدن آن 0 است.
اگر آن 0 است، ما می توانیم تهی بازگشت.
اما دقیق همان منطق است.
و اجازه ادامه این.
اگر به اندازه 0 است، که در آن عنصر است که ما می خواهیم به dequeue؟
[سعد] در سر؟ >> دقیقا.
ما فقط می تواند از کنار این عنصر برای اولین بار در صف ما
دسترسی به این عنصر در سر.
هیچ چیز دیوانه.
پس از آن، چه باید کرد؟ آنچه که اتفاق می افتد؟
چیز دیگری که ما در مورد در dequeue صحبت چه بود؟
دو چیز اتفاق می افتد، زیرا صف ما تغییر کرده است.
[دانیال] کاهش حجم. >> ما باید به منظور کاهش حجم و افزایش سر؟ دقیقا.
برای افزایش سر، ما فقط نمی تواند کورکورانه سر، افزایش به یاد داشته باشید.
ما می توانیم نه فقط انجام queue.head + +.
ما نیز شامل این وزارت دفاع با ظرفیت.
و چرا ما از ظرفیت وزارت دفاع، استلا؟
[استلا] از آنجا که آن را به پوشش در اطراف. >> دقیقا.
ما با ظرفیت وزارت دفاع به دلیل آن است به بسته بندی کردن در اطراف را به 0.
بنابراین در حال حاضر، در این مرحله، ما می توانیم انجام آنچه دانیل گفت.
ما می توانیم به اندازه کاهشی.
و پس از آن ما فقط می تواند این عنصر بود که در ابتدای صف را برگرداند.
به نظر می رسد نوع gnarly در ابتدا. شما ممکن است یک سوال را داشته باشد. ببخشید؟
>> [سام] چرا در ابتدای صف؟ کجا برود؟
[Hardison] آن را از خط چهارم از پایین می آید.
بعد از آزمایش می کنیم تا مطمئن شوید که صف ما خالی نیست،
ما بیرون بکشد * کاراکتر برای اولین بار، ما بیرون بکشد عنصر را که در صفحه اول سر نشسته
از آرایه از رشته ها آرایه ما >> و تماس که برای اولین بار؟
[Hardison] و ما تماس بگیرید برای اولین بار. آره.
فقط به دنبال آن، چرا شما فکر می کنم که ما تا به حال به انجام این کار؟
[سام] هر اولین بار است که در راه بازگشت q.strings [q.head؟ >> آره.
>> از آنجا که ما در حال انجام این کار در حال تغییر از q.head با تابع وزارت دفاع،
و هیچ راهی برای انجام این کار در داخل خط بازگشت نیز وجود دارد.
[Hardison] دقیقا. تو نقطه در. سام کاملا در نقطه.
به این دلیل که ما تا به حال به این عنصر برای اولین بار در صف ما بیرون بکشد و آن را در یک متغیر ذخیره
زیرا این خط که در آن ما فقط q.head بود،
عملگر وزارت دفاع در آنجا وجود دارد چیزی است که ما می توانیم انجام دهیم
و اثر بر روی سر آن را بدون - در یک خط است.
بنابراین، ما در واقع باید به جلو و از عنصر اول، و سپس سر را تنظیم کنید،
تنظیم اندازه، و سپس بازگشت عنصر را که ما را از جیبش در آورد.
و این چیزی است که خواهیم دید آمد تا بعد از آن با
مرتبط با لیست ها، به عنوان ما در سراسر بازی با آنها.
اغلب زمانی که شما آزادی و یا خلاصی از لیست های پیوندی
شما نیاز دارید به خاطر داشته باشید که این عنصر بعدی، اشاره گر بعد از یک لیست پیوندی
قبل از دفع از یک جریان است.
از آنجا که در غیر این صورت شما دور انداختن اطلاعات از آنچه در فهرست باقی مانده است.
در حال حاضر، اگر شما به دستگاه شما، شما باز کردن queue.c-X از این است.
بنابراین اگر من باز کردن queue.c، اجازه دهید به من زوم در اینجا،
شما خواهید دید که شما یک فایل مشابه به دنبال.
به دنبال فایل مشابه به آنچه که ما تا به حال پیش از آن با stack.c.
ما ساختار خود را برای صف تعریف شده فقط به عنوان ما بر روی اسلاید دیدم شدم.
>> ما باید تابع enqueue ما است که شما را به انجام.
و ما باید تابع dequeue در اینجا.
این تابع dequeue در فایل اجرا نشده،
اما من آن را به عقب قرار داده تا در پاورپوینت به طوری که شما می توانید آن را در نوع، اگر شما می خواهم.
پس از 5 دقیقه یا بیشتر در کنار شما بچه ها در enqueue کار
است که تقریبا فقط در مقابل dequeue.
شما لازم نیست برای تنظیم سر زمانی که شما در حال enqueueing، اما چه چیزی شما باید برای تنظیم؟
اندازه. بنابراین، هنگامی که شما enqueue، سر دست نخورده باقی می ماند، به اندازه تغییر می شود.
اما این کار را کمی از - شما باید به بازی در اطراف با آن وزارت دفاع
برای کشف کردن دقیقا چه شاخص این عنصر جدید را باید در قرار داده شده است.
بنابراین من به شما بچه ها یک کمی، قرار داده dequeue به بالا بر روی اسلاید
و شما بچه ها سوالی دارید، آنها را فریاد به طوری که ما می توانیم
همه بحث در مورد آنها را به عنوان یک گروه است.
همچنین، با اندازه don't - زمانی که شما تنظیم اندازه، شما می توانید همیشه فقط -
آیا شما باید به اندازه وزارت دفاع تا کنون؟ [دانیال] شماره >> شما لازم نیست که به وزارت دفاع، به اندازه درست است.
از آنجا که اندازه همیشه، اگر you're - فرض شما مدیریت همه چیز مناسب،
اندازه همیشه بین 0 و 3 می شود.
از کجا می توانم شما را به وزارت دفاع در هنگامی که شما در حال انجام enqueue؟
[دانشجویی] فقط سر. >> فقط برای سر، دقیقا.
و چرا شما باید در همه وزارت دفاع در enqueue؟
هنگامی که یک وضعیت که در آن شما می خواهم به وزارت دفاع است؟
[دانشجو] اگر شما چیزهای در فضاهای، مانند در فضای 1 و 2،
و سپس شما نیاز به اضافه کردن چیزی در 0.
[Hardison] بله، دقیقا. بنابراین اگر اشاره گر سر خود را در پایان،
و یا در صورتی که اندازه خود را به همراه سر خود بزرگتر است، و یا به جای است، رفتن به اطراف صف بپیچید.
>> بنابراین در این شرایط که ما رو تا اینجا بر روی اسلاید در حال حاضر،
اگر من می خواهم به enqueue چیزی در حال حاضر،
ما می خواهیم به enqueue چیزی در اندیس 0.
بنابراین اگر شما در جایی که در 50 می رود نگاه کنید، و من اسمش enqueue 50،
آن پایین می رود وجود دارد در پایین. این در 0 شاخص می رود.
آن را جایگزین "سلام" که در حال حاضر dequeued شد.
[دانیال] آیا شما را مراقبت از آن در dequeue در حال حاضر؟
چرا هر چیزی این کار را انجام با سر در enqueue؟
[Hardison] اوه، پس شما سر اصلاح نیست، متاسفم.
اما شما مجبور به استفاده از عملگر وزارت دفاع در زمانی که شما به
عنصر را که شما می خواهید به enqueue زمانی که شما به
عنصر بعدی در صف شما.
[ریحان] من که انجام نمی، من و "موفقیت" وجود دارد.
[دانیال] آه، من درک می کنم چه می گویید.
[Hardison] بنابراین شما didn't - شما فقط در q.size بود؟
[ریحان] آره. من فقط تغییر طرف، من هر چیزی را با سر انجام نیست.
[Hardison] شما در واقع نه سر به بازنشانی به هر چیزی باشد،
اما زمانی که شما را به آرایه رشته اول،
شما در واقع باید به جلو بروید و محاسبه است که در آن عنصر بعدی این است که،
زیرا withe پشته، عنصر بعدی در پشته خود را همیشه
در شاخص مربوط به اندازه.
اگر ما نگاه به بالا در عملکرد پشته ما فشار،
ما همیشه می تواند در عنصر جدید ما در اندازه شاخص قار قار کردن.
در حالی که با صف، ما می توانیم آن را انجام ندهید
چرا که اگر ما در این وضعیت هستیم،
اگر ما enqueued 50 رشته جدید ما در رشته های [1]
که ما نمی خواهیم به انجام.
ما می خواهیم به رشته جدید در اول 0.
>> کسی آیا - بله؟ [دانشجو] من یک سوال اما واقعا مربوط نیست.
به چه معنی است وقتی که کسی فقط خواستار چیزی شبیه به اشاره گر pred؟
چه شده است که نام کوتاه برای؟ من می دانم که این فقط یک نام است.
[Hardison] Pred اشاره گر؟ اجازه دهید را ببینید. در چه زمینه؟
[دانشجو] برای قرار دادن. من می توانم به شما بعد بپرسید که آیا شما می خواهید
چرا که آن را واقعا مربوط نیست، اما من فقط -
Hardison] کد قرار دادن دیوید از سخنرانی؟
ما می توانیم آن را بکشید و در مورد آن صحبت کنید.
ما می خواهیم که در مورد بعد، زمانی که ما را به لیست های پیوندی صحبت کنید.
>> بنابراین اجازه دهید واقعا به سرعت به دنبال چه تابع enqueue به نظر می رسد مانند.
اولین چیزی که مردم سعی به در خط enqueue شما چه بود؟ به این صف؟
شبیه به آنچه که شما برای پشته هل دادن بود.
چه شما باید انجام دهید، استلا؟
[استلا، ناخوانا]
[Hardison] دقیقا. اگر (q.size ظرفیت ==) -
من نیاز به قرار دادن پرانتز در جای مناسب - بازگشت نادرست است.
زوم کمی. باشه.
در حال حاضر آنچه نکته بعدی که ما تا به حال برای انجام این کار؟
فقط با پشته مانند، و در جای مناسب قرار داده شده است.
و به این ترتیب جای مناسب برای وارد کردن که چه بود؟
با استفاده از پشته حجم شاخص بود، با این که نه کاملا که.
[دانیال] من q.head یا - q.strings >>؟ >> آره.
q.strings [q.head + q.size وزارت دفاع ظرفیت؟
[Hardison] ما احتمالا می خواهید برای قرار دادن پرانتز در اطراف این
به طوری که ما در حال گرفتن اولویت مناسب و به همین ترتیب که به همه cleart.
و مجموعه ای است که برابر است؟ >> به خ؟ >> به خ. بزرگ است.
و در حال حاضر آنچه که این آخرین چیزی است که ما باید انجام دهیم؟
درست مثل ما در پشته بود. >> افزایش اندازه؟ >> افزایش اندازه.
بوم. و سپس، از آنجا که کد استارت نادرست به طور پیش فرض بازگشت،
ما می خواهیم برای تغییر این درست است اگر همه می رود و از طریق همه به خوبی می رود.
بسیار خوب. این یک مقدار زیادی از اطلاعات را در بخش.
ما کاملا بیش از حد نیست. ما می خواهیم به صحبت واقعا به سرعت به تنهایی مرتبط با لیست.
من این را قرار داده به طوری که ما می تواند به آن بعد.
اما اجازه بازگشت به ارائه ما فقط چند اسلاید.
پس enqueue TODO است، در حال حاضر آن را انجام داده ایم.
>> حالا اجازه دهید نگاهی در تنهایی مرتبط با لیست.
ما در مورد این کمی در سخنرانی صحبت کردیم.
چند نفر از شما بچه ها نسخه ی نمایشی را دیدم که در آن ما تا به حال مردم
ناشیانه با اشاره به هر یک از شماره های دیگر و برگزاری؟ >> من در آن بود.
>> چه شما بچه ها فکر می کنم؟ را انجام داد، امیدوارم این کمی کمی demystify؟
با یک لیست، که معلوم است که ما با این نوع برخورد است که ما قصد داریم تا با یک گره است.
در حالی که با صف و پشته ما تا به حال ساختمانها که ما می خواهم صف در پشته تماس بگیرید،
ما تا به حال این صف در انواع پشته،
در اینجا یک لیست است که واقعا فقط یک دسته از گره ها ساخته شده است.
در راه همان است که رشته ها فقط یک دسته از کاراکتر اندود شده تا در کنار یکدیگر است.
فهرست مرتبط با فقط یک گره و گره دیگر و یکی دیگر از گره و گره دیگر است.
و به جای فوق العاده تمام گره ها با یکدیگر و ذخیره سازی آنها را متوالی
همه حق در کنار یکدیگر در حافظه،
داشتن اشاره گر بعد به ما اجازه می دهد تا به ذخیره گره در هر کجا، در تصادفی.
و سپس نوع سیم همه آنها را با هم به از یکی به بعدی.
>> و مزیت بزرگ این بود که تا به حال بیش از یک آرایه؟
بیش از همه چیز ذخیره متوالی بعدی به یکدیگر گیر کرده است؟
به خاطر داشتن؟ آره؟ >> تخصیص حافظه پویا؟
>> تخصیص حافظه دینامیکی در چه معنا است؟
[دانشجو] در آن شما می توانید نگه دارید و آن را بزرگتر و شما لازم نیست که کل آرایه خود را به حرکت می کند؟
[Hardison] دقیقا. بنابراین با یک آرایه، زمانی که شما می خواهید برای قرار دادن عنصر جدید را در وسط آن،
شما باید برای تغییر همه چیز را به فضا.
و مثل ما در مورد با صف صحبت کردیم،
به همین دلیل است که اشاره گر سر ما را،
به طوری که ما دائما در حال تغییر همه چیز است.
از آنجا که گران می شود اگر شما یک آرایه بزرگ
و شما به طور مداوم انجام این اضافه تصادفی.
در حالی که با یک لیست، همه شما باید انجام دهید این است که پرتاب آن بر روی یک گره جدید
تنظیم اشاره گر، و شما انجام می شود.
در این مورد چه بمکد؟
گذشته از این واقعیت است که آن را به عنوان کار آسانی نیست به کار به عنوان یک آرایه؟ آره؟
[دانیال] خوب، من حدس می زنم آن را به مراتب سخت تر برای دسترسی به یک عنصر خاص در لیست پیوندی؟
[Hardison] شما فقط به یک عنصر دلخواه در وسط خود را از لیست پیوندی می تواند به پرش.
چگونه می توانم شما باید آن را به جای؟ >> شما را از طریق تمام چیزی که گام.
[Hardison] آره. شما باید از طریق یکی در یک زمان، در یک زمان.
بزرگ است - این یک درد است.
چه دیگر - یکی دیگر از سقوط به این وجود دارد.
[ریحان] شما نمی توانید به جلو و عقب؟ شما باید برای رفتن به یک جهت؟
[Hardison] آره. پس چگونه است که ما را حل کند، گاهی اوقات؟
[ریحان] مضاعف مرتبط با لیست؟ >> دقیقا. مضاعف مرتبط با لیست وجود دارد.
نیز وجود دارد - با عرض پوزش؟
>> [سام] است که همان را با استفاده از چیزی که pred که -
من فقط به یاد میآورد، این است که چه چیزی pred؟
این است که نه در بین مضاعف و تنهایی؟
نگاه [Hardison] بیایید در آنچه که دقیقا او انجام شده بود.
بنابراین در اینجا ما بروید. در اینجا لیست کد.
در اینجا ما باید predptr، در اینجا. این چیزی است که شما صحبت کردن در مورد؟
بنابراین این بود - او آزاد کردن یک لیست و او در تلاش برای ذخیره یک اشاره گر به آن است.
این مضاعف، به تنهایی مرتبط لیست نمی باشد.
ما می توانیم اطلاعات بیشتری در این مورد بعدا صحبت از آنجایی که این صحبت کردن در مورد آزادی فهرست
و من می خواهم به برخی از چیزهای دیگر برای اولین بار نشان می دهد.
اما آن را فقط - به خاطر سپردن ارزش PTR
[دانشجو] آه، آن اشاره گر preceeding؟ >> آره.
به طوری که ما پس از آن می توانید PTR خود را قبل از ما پس از آن آزاد چه predptr نمود.
از آنجا که ما می توانیم آزاد PTR و سپس تماس بگیرید PTR = و PTR بعدی، درست است؟
این خیلی بد است.
بنابراین اجازه دهید را ببینید، به این مرد.
>> چیز بد دیگر در مورد لیست است که در حالی که با یک آرایه
ما فقط باید همه عناصر خود را روی هم چیده شده در کنار یکدیگر،
در اینجا ما نیز به معرفی این اشاره گر است.
بنابراین تکه های اضافی از حافظه است که ما نیاز به استفاده از وجود دارد
برای هر عنصر است که ما در حال ذخیره در لیست ما.
ما انعطاف پذیری، اما آن را در هزینه می آید.
آن را با هزینه این زمان می آید،
و آن را با هزینه این حافظه می آید بیش از حد است.
زمان به این معنا است که ما در حال حاضر از طریق هر عنصر در آرایه
برای پیدا کردن یکی در اول 10، یا که می توانست اول 10 را در یک آرایه شده است.
>> واقعا به سرعت، هنگامی که ما نمودار از این لیست،
به طور معمول ما را بر روی سر از لیست یا اشاره گر برای اولین بار از این فهرست
و توجه داشته باشید که این یک اشاره گر واقعی است.
فقط 4 بایت است. این یک گره واقعی خود نیست.
بنابراین می بینید که آن را ندارد ارزش int در آن، هیچ اشاره گر آینده در آن است.
این به معنای واقعی کلمه فقط یک اشاره گر است.
این برای اشاره به چیزی است که ساختار گره واقعی.
[سام] یک اشاره گر به نام گره؟ >> این است - نه. این یک اشاره گر به چیزی از نوع گره است.
این یک اشاره گر به ساختار گره است. >> آه، درست است.
نمودار در سمت چپ، کد در سمت راست است.
ما می توانیم آن را به تهی است، که یک راه خوب برای شروع تنظیم کنید.
هنگامی که شما به آن نمودار است، شما هم آن را به عنوان تهی نوشتن و یا به شما یک خط را از طریق آن قرار داده است که می خواهم.
>> یکی از ساده ترین راه برای کار با لیست ها،
و ما از شما هر دو prepend و الحاق برای دیدن تفاوت بین این دو،
اما prepending قطعا آسان تر است.
هنگامی که شما prepend، این است که شما - که شما prepend (7)
شما بروید و ایجاد ساختار گره
و شما را برای اولین بار به اشاره به آن است، چرا که در حال حاضر، از آنجایی که ما به آن اضافه شده،
آن را در آغاز از لیست.
اگر ما prepend (3)، که باعث ایجاد گره دیگر است، اما در حال حاضر 3 می آید قبل از 7 می باشد.
بنابراین ما اساسا هل دادن چیزهایی را بر روی لیست ما است.
در حال حاضر، شما می توانید ببینید که prepend، گاهی اوقات مردم به آن فشار،
دلیل این که شما در حال هل دادن عنصر جدید را بر روی لیست شما.
آن آسان به در جلو از لیست حذف کنید.
بنابراین مردم اغلب خواهد شد که پاپ تماس بگیرید.
و به این ترتیب، شما می توانید یک پشته با استفاده از لیست پیوندی شبیه سازی کنید.
متأسفیم. با عرض پوزش، در حال حاضر ما در حال وارد شدن به افزودنپرونده. بنابراین در اینجا ما اضافه شده (7)، در حال حاضر ما prepend (3).
اگر ما چیز دیگری را بر روی این لیست اضافه شده است، اگر ما اضافه شده (4)
پس از آن ما می 4 و سپس 3 و سپس 7.
بنابراین پس از آن ما می تواند پاپ و حذف 4، حذف 3، حذف 7.
اغلب راه بصری بیشتر به فکر می کنم در این مورد این است که با الحاق است.
پس من diagrammed از آنچه در آن می خواهم با الحاق اینجا نگاه کنید.
در اینجا، اضافه (7) هیچ به نظر نمی آید
چرا که تنها یک عنصر در لیست وجود دارد.
و الحاق (3) آن را در پایان قرار می دهد.
شاید شما می توانید ببینید که در حال حاضر این ترفند با افزودنپرونده
این است که از آنجایی که ما فقط می دانیم که در آن ابتدا از لیست است،
اضافه به لیست شما را به تمام راه را از طریق لیست
برای رسیدن به پایان، توقف، و سپس گره خود و همه چیز را با صدای تلپ پایین ساخت.
سیم همه چیز.
بنابراین با prepend، به عنوان ما فقط از طریق این پاره پاره واقعا به سرعت،
هنگامی که شما به یک لیست prepend، آن را نسبتا ساده است.
>> شما را به گره جدید خود را، شامل برخی از تخصیص حافظه پویا است.
بنابراین در اینجا ما در حال ساخت یک ساختار گره با استفاده از malloc.
بنابراین malloc ما با استفاده از به دلیل که به حافظه برای ما کنار گذاشته برای بعد
چرا که ما این کار را می خواهید نیست - ما می خواهیم این حافظه برای مدت زمان طولانی باقی بماند.
و ما یک اشاره گر به فضا در حافظه است که ما فقط اختصاص داده شده است.
ما با استفاده از اندازه گره، ما زمینه خلاصه نمی شود.
ما دستی تولید تعدادی از کلمه در ادامه متن،
به جای آن ما با استفاده از sizeof به طوری که ما می دانیم که ما در حال گرفتن تعداد مناسب از کلمه در ادامه متن.
ما مطمئن شوید که برای تست که تماس malloc ما موفق است.
این چیزی است که شما می خواهید برای انجام این کار به طور کلی است.
در ماشین های مدرن، در حال اجرا از حافظه چیزی است که آسان نیست
مگر اینکه شما در حال اختصاص یک تن از مسائل و ساخت یک لیست بزرگ،
اما اگر شما در حال ایجاد مسائل، می گویند، مانند آی فون یا آندروید،
شما مجبور منابع حافظه محدود، به خصوص اگر شما در حال انجام کاری شدید.
بنابراین آن را خوب به عمل آورید.
>> توجه کنید که من با استفاده از توابع مختلف زن و شوهر در اینجا
که شما دیده می شود که از نوع جدید.
تا fprintf است فقط printf دوست
به جز آرگومان اول آن جریان است که در آن شما می خواهید برای چاپ می باشد.
در این مورد، ما می خواهیم به رشته خطای استاندارد چاپ
outStream با استاندارد متفاوت است.
به طور پیش فرض، آن را نشان می دهد تا در همان محل است.
این نیز چاپ به ترمینال، اما شما می توانید -
با استفاده از آن دستورات به شما آموخته، تکنیک تغییر مسیر
شما در مورد ویدیو تامی برای مجموعه مشکل 4 آموخته، شما می توانید آن را به طور مستقیم
به مناطق مختلف و پس از آن، خروج از حق در اینجا، خروجی برنامه شما.
این اساسا مانند بازگشت از اصلی،
به جز خروج استفاده می کنیم چرا که در اینجا بازگشت هیچ کاری انجام نمی.
ما اصلی هستیم، به طوری که بازگشت به این برنامه را مانند ما می خواهیم خارج نیست.
بنابراین، ما با استفاده از تابع خروجی و یک کد خطا را به آن بدهید.
و سپس در اینجا ما مجموعه ای گره جدید در زمینه ارزش، رشته من آن را به صورت برابر به من، و سپس آن را به ما سیم.
ما مجموعه ای اشاره گر به گره جدید به نقطه اول،
و در ابتدا به گره جدید است.
این خط اول کد ما در واقع ساخت گره جدید است.
تاریخ و زمان آخرین دو خط از این تابع، اما نخستین کسانی بودند.
در واقع شما می توانید از جلو و به یک تابع را به یک تابع کمکی.
که اغلب به آنچه که من انجام می دهند این است، من آن را بیرون بکشد به یک تابع،
من اسمش را چیزی شبیه به گره ساخت،
و نگه می دارد که تابع prepend بسیار کوچک است، آن را فقط 3 خط بعد از آن است.
من را از یک تماس به تابع گره من ساخت، و پس از آن من همه چیز سیم.
>> آخرین چیزی که من می خواهم به شما نشان دهد،
و من به شما اجازه می اضافه نماییم و آنچه را که در را آن گونه که مایلید تغییر دهید،
این است که چگونه می توان به تکرار بیش از یک لیست است.
یک دسته از راه های مختلف به تکرار بیش از یک لیست وجود دارد.
در این مورد، ما قصد داریم برای پیدا کردن طول یک لیست است.
بنابراین ما با طول = 0 شروع می شود.
این است که بسیار شبیه به نوشتن strlen برای یک رشته است.
این همان چیزی است که من می خواهم به شما نشان می دهد، این حلقه for در اینجا می باشد.
این به نظر می رسد نیمه بد بو است، آن را معمول نیست من بین المللی = 0، I <هر چیز دیگری، من + +.
در عوض آن را مقدار دهی اولیه N متغیر ما را به ابتدای فهرست.
و سپس در حالی که متغیر تکرارکننده ما تهی نیست، نگه می داریم.
دلیلش این است که توسط کنوانسیون، به انتهای لیست ما null خواهد بود.
و سپس به افزایش است، و نه از انجام + +،
مرتبط معادل لیستی از + + N = N-بعدی>.
>> من اجازه دهید شما را در پر کردن شکاف در اینجا چون ما از زمان.
اما این را در ذهن به عنوان شما را در psets spellr شما کار می کنند.
لینک لیست ها، اگر شما در حال اجرای یک جدول هش،
قطعا در بسیار سودمند هستند.
و این اصطلاح را برای حلقه بیش از همه چیز زندگی را بسیار ساده تر را، امیدوارم.
هر گونه سؤال، به سرعت؟
[سام] شما ارسال SLL تکمیل و SC؟
[Hardison] آره. من ارسال اسلاید تکمیل شده و به اتمام SLL پشته و queue.cs.
[CS50.TV]