[Powered by Google Translate] [القسم 6] [أكثر راحة]
[روب بودين] [جامعة هارفارد]
[هذا CS50.] [CS50.TV]
>> يمكننا التوجه الى قسم من الأسئلة.
أرسلت لي URL للفضاء من قبل.
بداية القسم من الأسئلة يقول-
يبدو أنني لست تماما unsick، هو سؤال سهل جدا
ما هو مجرد valgrind؟
ماذا valgrind تفعل؟
أريد أن أقول أي شخص ما valgrind لا؟
[طالب] الشيكات تسرب الذاكرة.
نعم، هو المدقق valgrind الذاكرة العامة.
ذلك، في نهاية المطاف، يقول لك إذا كان لديك أي تسرب الذاكرة،
التي هي في معظمها ما نقوم استخدامه لأنه إذا كنت ترغب في
تحقق نتائج جيدة في مجموعة مشكلة أو إذا كنت ترغب في
الحصول على لوحة كبيرة، تحتاج إلى أن يكون أي تسرب الذاكرة على الإطلاق،
وفي حال كان لديك تسرب الذاكرة التي لا يمكن العثور عليها،
أيضا أن نضع في الاعتبار أنه كلما قمت بفتح ملف
وإذا لم يكن لإغلاقه، وهذا هو تسرب الذاكرة.
>> وهناك الكثير من الناس يبحثون عن بعض عقدة انهم لا تحرير
عندما حقا، لكنها لم تغلق القاموس في الخطوة الأولى.
كما يخبرك إذا كان لديك أي غير صالحة يقرأ أو يكتب،
وهو ما يعني إذا حاولت وتعيين قيمة
وهذا بعد نهاية كومة وذلك لا يحدث إلى خطأ SEG
لكن valgrind أدرك ذلك، كما يجب أن لا يكون في الواقع الكتابة هناك،
ولذا يجب عليك بالتأكيد لم يكن لديك أي من هذه أيضا.
كيف يمكنك استخدام valgrind؟
>> انها مسألة من العام
نوع من تشغيله وإلقاء نظرة على الإخراج.
الإخراج هو الساحقة في الكثير من الأحيان.
هناك أيضا أخطاء ممتعة حيث إذا كان لديك بعض الشيء خطأ فادحا
يحدث في حلقة، بعد ذلك سوف يقول في النهاية، "أخطاء الطريق كثيرة جدا.
انا ذاهب الى وقف العد الآن. "
انها في الاساس خرج النصية التي لديك لتحليل.
في النهاية، وسوف اقول لكم أي تسرب الذاكرة التي لديك،
كم عدد القطع، والتي يمكن أن تكون مفيدة ل
إذا كان واحد unfreed كتلة، ثم انها عادة ما تكون أسهل للعثور على
من unfreed 1000 بنات.
1000 بنات unfreed يعني على الارجح كنت لا تحرير
لديك القوائم المرتبطة بشكل مناسب أو شيء.
انها valgrind ذلك.
>> الآن لدينا قسم من الأسئلة،
التي لا تحتاج لتحميل.
يمكنك النقر على اسمي وسحب لهم حتى في الفضاء.
انقر الآن على لي.
وسوف يكون التنقيح 1 المكدس، الذي نقوم به أولا.
وسوف تكون قائمة الانتظار التنقيح 2، والتنقيح 3 ستكون قائمة منفردة مرتبطة.
الانطلاق مع مكدس لدينا.
كما جاء هنا، كومة هي واحدة من أبسط،
هياكل البيانات الأساسية لعلوم الكمبيوتر.
المثال تنميط جدا هو
كومة من الأدراج في قاعة الطعام.
انها في الاساس كلما يجري تعرفت على كومة،
شخص ما سوف يقول، "أوه، مثل كومة من الصواني."
كنت كومة من الصواني فوق.
ثم عندما تذهب لسحب الدرج،
علبة الأولى التي سحبت الحصول على انها هي الأخيرة التي وضعت على المكدس.
المكدس أيضا مثل ذلك يقول هنا،
لدينا شريحة من الذاكرة تسمى المكدس.
ولماذا يطلق عليه مكدس؟
>> لأن مثل كومة بنية بيانات،
فإنه يدفع الملوثات العضوية الثابتة وإطارات المكدس على المكدس،
حيث إطارات المكدس هي بمثابة دعوة محددة من وظيفة.
ومثل كومة، سيكون لديك دائما للعودة
استدعاء دالة من قبل يمكنك الحصول على أسفل إلى إطارات المكدس أقل مرة أخرى.
لا يمكنك الحصول على دعوة الرئيسية فو شريط المكالمة والعودة إلى شريط مباشرة الرئيسي.
انها دائما حصلت لمتابعة مكدس الصحيح وظهرت دفع.
العمليتين، كما قلت، هي دفعة والبوب.
تلك هي الشروط العامة.
يجب أن نعرف دفعة والبوب ​​من حيث مداخن مهما كانت.
سنرى طوابير هي نوع من مختلفة.
فإنه لا يملك في الواقع مصطلح عالمي، ولكن الشد والبوب ​​عالمية للمداخن.
وضعت للتو دفعة على المكدس.
البوب ​​هو خلع المكدس.
ونرى هنا لدينا لدينا كومة البنية typedef،
لذلك لدينا شار السلاسل. **
لا تحصل خائفين من أي **.
هذا هو الذهاب الى نهاية الأمر مجموعة من السلاسل
أو مجموعة من المؤشرات إلى الأحرف، حيث
مؤشرات إلى الأحرف تميل إلى أن تكون السلاسل.
فإنه ليس من الضروري أن تكون السلاسل، ولكن هنا، انهم ذاهبون لتكون السلاسل.
>> لدينا مجموعة من السلاسل.
لدينا الحجم والتي تمثل العديد من العناصر كيف حاليا على المكدس،
ثم لدينا القدرة، وهو كيف يمكن أن يكون العديد من العناصر في بنية تخزين العناصر.
يجب قدرة تبدأ كشيء أكبر من 1،
ولكن حجم سوف تبدأ ك 0.
الآن، وهناك أساسا ثلاث طرق مختلفة يمكن ان يخطر لك كومة.
حسنا، ربما يكون هناك أكثر من ذلك، ولكن هي الطرق الرئيسيتين
يمكنك تنفيذ ذلك باستخدام مجموعة، أو يمكنك تنفيذ ذلك باستخدام قائمة مرتبطة.
القوائم المرتبطة هي نوع من تافهة لجعل أكوام من.
فمن السهل جدا لجعل كومة باستخدام قوائم مرتبط،
حتى هنا، ونحن في طريقنا لجعل كومة باستخدام المصفوفات،
ثم استخدام المصفوفات، وهناك أيضا اثنين من الطرق التي يمكنك التفكير في الامر.
من قبل، عندما قلت لدينا القدرة على المكدس،
حتى نتمكن من احتواء عنصر في بنية تخزين العناصر.
>> طريقة واحدة يمكن أن يحدث هو بمجرد تصل إلى 10 عناصر، ثم الانتهاء من ذلك.
هل يمكن أن نعرف أن هناك حدا أعلى من 10 أشياء في العالم
عليك أبدا أن لديها أكثر من 10 أشياء على الكدسة،
وفي هذه الحالة هل يمكن أن يكون الحد الأعلى لحجم كومة الخاص بك.
أو هل يمكن أن يكون غير محدود أن الكدسة،
ولكن إذا كنت تفعل مجموعة، وهذا يعني أن في كل مرة كنت أصاب 10 عناصر،
ثم وأنت تسير لدينا ليصل إلى 20 عنصرا، وعندما ضرب 20 عنصرا،
وأنت تسير لدينا لتنمو مجموعة الخاصة بك إلى 30 عناصر أو عناصر 40.
كنت بحاجة الى الذهاب الى زيادة قدرة، وهذا ما نحن بصدد القيام به هنا.
في كل مرة نصل إلى الحد الأقصى لحجم كومة لدينا،
عندما ندفع شيئا آخر على، نحن بحاجة الى الذهاب الى زيادة القدرات.
هنا، لقد أعلنا دفعة ودفعة BOOL (تشار * شارع).
* شار شارع عبارة عن سلسلة أننا دفع إلى المكدس،
ويقول BOOL فقط ما إذا كنا نجحت أو فشلت.
>> كيف يمكننا أن تفشل؟
ما هو الظرف الوحيد الذي يمكن ان يخطر لك
حيث سنكون في حاجة إلى عودة كاذبة؟
نعم.
[طالب] إذا كان كاملا ونحن باستخدام تنفيذ يحدها.
نعم، إذا كيف نحدد-أجاب
اذا كان كاملا ونحن باستخدام تنفيذ يحدها.
ثم سوف نعود بالتأكيد كاذبة.
بمجرد أن تصل إلى 10 في مجموعة الأشياء، ونحن لا يمكن احتواء 11، لذلك نحن عودة كاذبة.
ما إذا كان غير محدود على ما تريد؟ نعم.
إذا لم تتمكن من توسيع مجموعة لسبب ما.
نعم، حتى الذاكرة هو مورد محدود،
وفي نهاية المطاف، إذا كنا ابقاء الامور دفع إلى المكدس مرارا وتكرارا،
ونحن في طريقنا لمحاولة تخصيص أكبر مجموعة لتناسب
وسعة أكبر، وmalloc أو أيا كان نستخدمه هو الذهاب الى عودة كاذبة.
حسنا، سوف malloc العودة فارغة.
>> تذكر، في كل مرة واحدة من أي وقت مضى استدعاء malloc، يجب ان تكون التحقق لمعرفة ما إذا كان
ترجع فارغة أو آخر هو أن خصم صحة.
لأننا نريد أن يكون هناك كومة غير محدود،
الحالة الوحيدة ونحن في طريقنا إلى أن العودة هي كاذبة إذا حاولنا
زيادة قدرة وmalloc أو أيا كان إرجاع false.
ثم يأخذ بدون وسائط البوب،
وتقوم بإرجاع السلسلة التي يتم على الجزء العلوي من المكدس.
كان آخرها دفع مهما في بنية تخزين العناصر هو ما يعود البوب،
ويزيل أيضا من المكدس.
وتلاحظ أن تقوم بإرجاع فارغة إذا كان هناك أي شيء على المكدس.
فمن الممكن دائما أن مكدس فارغ.
في جاوة، إذا كنت تستخدم لذلك، أو لغات أخرى،
قد تحاول البوب ​​من المجموعة الفارغة تسبب استثناء أو شيء.
>> ولكن في C، فارغة هو نوع من الكثير من الحالات كيفية التعامل مع هذه المشاكل.
العودة فارغة هو كيف ونحن في طريقنا للدلالة على أن مكدس فارغ.
لقد قدمنا ​​التعليمات البرمجية التي سيتم اختبار وظيفة مكدس الخاص بك،
ودفع تنفيذ البوب.
وهذا لن يكون هناك الكثير من التعليمات البرمجية.
I-الإرادة في الواقع، قبل ان نفعل ذلك، تلميح، تلميح-
إذا كنت لم يطلعوا عليه، malloc ليست وظيفة فقط
أن يخصص الذاكرة على الكومة لك.
هناك عائلة مكونة من وظائف alloc.
الأول هو malloc، والتي كنت تستخدم ل.
ثم هناك calloc، الذي يفعل الشيء نفسه malloc،
ولكن سيكون من الصفر كل شيء بالنسبة لك.
إذا كنت من أي وقت مضى كنت أريد كل شيء لتعيين إلى فارغة بعد mallocing شيء
يجب أن كنت قد استخدمت فقط calloc في المقام الأول بدلا من الكتابة
لحلقة من الصفر إلى كتلة كاملة من الذاكرة.
>> Realloc مثل malloc و لديه الكثير من الحالات الخاصة،
ولكن أساسا ما يفعله هو realloc
يستغرق مؤشر إلى أنه تم بالفعل تخصيص.
Realloc هي وظيفة تريد أن الاهتمام هنا.
يستغرق مؤشر إلى أنه تم بالفعل عاد من malloc.
دعونا نقول لكم أن تطلب من malloc مؤشر من 10 بايت.
في وقت لاحق ثم كنت أدرك كنت تريد 20 بايت،
حتى استدعاء realloc على هذا المؤشر مع 20 بايت،
وسوف realloc نسخ تلقائيا على كل شيء لك.
إذا كنت فقط ودعا malloc مرة أخرى، مثل ولدي كتلة من 10 بايت.
الآن أنا بحاجة إلى كتلة من 20 بايت،
حتى لو كنت malloc 20 بايت، ثم لا بد لي من يدويا نسخ بايت على 10 من أول شيء
في الأمر الثاني ومن ثم فإن أول شيء مجانا.
سوف Realloc التعامل مع هذا لك.
>> لاحظ التوقيع سيكون * الفراغ،
التي تعود مجرد مؤشر إلى كتلة من الذاكرة،
ثم الفراغ * PTR.
يمكنك التفكير في الفراغ * كمؤشر عام.
عموما، أنت لا تتعامل مع الفراغ *،
لكن malloc يتم إرجاع * الفراغ، ثم انها تستخدم فقط لانه مثل
هذه هي في طريقها فعلا لتكون شار *.
* في الفراغ السابقة التي تم إرجاعها بواسطة malloc
يجري الآن لتمريرها إلى realloc، ومن ثم حجم
هو عدد وحدات البايت جديدة تريد تخصيص، لذلك القدرات الجديدة.
سأعطيك بضع دقائق، ويفعل ذلك في فضائنا.
تبدأ مراجعة 1.
سأتوقف عن نأمل لكم بعد ما يكفي من الوقت لتنفيذ الدفع،
ثم سأعطيك استراحة أخرى للقيام البوب.
ولكنها في الحقيقة ليست هذا الرمز كثيرا في كل شيء.
الأكثر متاحة على الارجح توسيع الاشياء، وتوسيع القدرات.
حسنا، لا الضغط الذي يتعين القيام به تماما،
ولكن طالما كنت تشعر أنك على الطريق الصحيح، وهذا جيد.
>> هل لديها أي رمز أنها تشعر بالراحة معي سحب ما يصل؟
نعم، وأنا، ولكن هل لديها أي رمز أستطيع سحب ما يصل؟
حسنا، يمكن أن تبدأ، حفظه، كل ما هو؟
أنسى دائما أن الخطوة.
حسنا، والنظر في الدفع،
تريد أن شرح التعليمات البرمجية؟
[طالب] أولا وقبل كل شيء، الأول زيادة حجم.
زيادة I اعتقد ربما ينبغي لي أن يكون هذا، على أي حال، وحجم،
وأرى ما اذا كان أقل من القدرات.
وإذا كان أقل من القدرات، وأود أن أضيف إلى الصفيف أن لدينا بالفعل.
وإذا لم تكن كذلك، I مضاعفة القدرة بنسبة 2،
وأنا إعادة تخصيص مجموعة السلاسل إلى شيء بحجم أكبر قدرة الآن.
ثم اذا فشل ذلك، وأنا أقول للمستخدم وعودة كاذبة،
وإذا كان على ما يرام، ثم وضع I السلسلة في نقطة جديدة.
>> [روب B.] أيضا لاحظت أن كنا عامل أحادي المعامل لطيفة هنا
لمضاعفة بنسبة 2.
تذكر، تحول اليسار ودائما ما يكون مضروبا 2.
وينقسم SHIFT الأيمن بنسبة 2 طالما أنك تذكر أنه يعني
القسمة على 2 كما في صحيح مقسوما على 2.
قد اقتطاع (أ) 1 هنا أو هناك.
ولكن التحول الذي تركه 1 ودائما ما يكون مضروبا 2،
إلا إذا كنت تجاوز حدود العدد الصحيح، وبعد ذلك لن يكون.
تعليق الجانب.
أود أن تفعل هذا لن يغير ترميز بأي شكل من الأشكال،
ولكن أود أن تفعل شيئا مثل هذا.
انها في الواقع هو الذهاب الى جعل لفترة أطول قليلا.
ربما لم تكن هذه هي الحالة المثالية لإظهار هذا،
ولكن أود أن الجزء هو داخل هذه الكتل من بين
حسنا، إذا كان هذا يحدث إذا، ثم انا ذاهب الى القيام بشيء ما،
ومن ثم يتم وظيفة.
ولست بحاجة للتمرير ثم عيني على طول الطريق وظيفة
لنرى ماذا سيحدث بعد آخر.
يبدو الأمر وكأن هذا إذا حدث ذلك، ثم أعود للتو.
كما أن لديها مصلحة وأضاف لطيف من كل شيء أبعد من ذلك
والآن تحول اليسار مرة واحدة.
لم أعد بحاجة إلى أي وقت مضى إذا كنت بالقرب من خطوط يبعث على السخرية طويلة،
ثم يمكن تلك 4 بايت مساعدة، وأيضا ما هو أكثر من الزمن،
وطغت أقل إذا كنت تشعر مثل-حسنا، أنا يجب أن نتذكر
أنا حاليا في حلقة بينما داخل لآخر داخل من حلقة For.
في أي مكان يمكنك القيام بذلك العودة فورا، وأنا نوع من مثل.
انها اختيارية تماما وليس من المتوقع بأي شكل من الأشكال.
>> [طالب] ينبغي أن يكون هناك حجم - في حالة فشل؟
ونحن هنا حالة فشل فشل في realloc، نعم ذلك.
لاحظ كيف في حالة فشل، ويفترض،
إلا إذا كنا الاشياء المجانية في وقت لاحق، ونحن دائما ما تفشل
بغض النظر عن عدد المرات التي نحاول دفع شيء.
اذا واصلنا الضغط، ونحافظ على حجم تزايد،
على الرغم من أننا لا نضع أي شيء إلى المكدس.
عادة نحن لا زيادة حجم حتى
بعد أن نكون قد وضعت بنجاح على المكدس.
ونحن نفعل ذلك، ويقول، إما هنا وهنا.
ثم بدلا من أن تقول s.size ≤ القدرات، انها أقل من القدرات،
فقط لأننا انتقلت حيث كان كل شيء.
>> وتذكر أن المكان الوحيد الذي يمكن أن نعود ربما كاذبة
هنا، حيث عاد realloc فارغة،
وإذا كنت يحدث أن نتذكر الخطأ المعياري،
ربما قد تفكر في هذه الحالة حيث تريد طباعة الخطأ المعياري،
fprintf ذلك STDERR بدلا من طباعة فقط مباشرة إلى خارج القياسية.
مرة أخرى، هذا ليس توقع، ولكن إذا كان خطأ،
اكتب printf، فإنك قد تريد أن تجعل من الطباعة إلى خطأ قياسي بدلا من الخروج القياسية.
>> أي شخص لديه أي شيء آخر أن نلاحظ؟ نعم.
[طالب] هل يمكن أن يذهب أكثر من (غير مسموع)؟
[روب B.] نعم، binariness الفعلية منه أو فقط ما هو عليه؟
[طالب] لذلك أنت اضربها 2؟
[روب B.] نعم، أساسا.
في الأراضي الثنائية، لدينا دائما لدينا مجموعة من الأرقام.
تحول هذا اليسار بمقدار 1 إدراج أساسا هنا في الجانب الأيمن.
عودة إلى ذلك، تذكر فقط أن كل شيء في ثنائي
هو أس 2، لذلك هذا يمثل 2 إلى 0،
هذه 2 إلى 1، 2 إلى هذا 2.
عن طريق إدراج 0 إلى الجانب الأيمن الآن، ونحن فقط تحول كل شيء انتهى.
ما كان ليكون 2 إلى 0 هو الآن 2 إلى 1، يتم 2 إلى 2.
الجانب الأيمن أننا إدراج
يجري بالضرورة أن يكون 0،
الأمر الذي يجعل الشعور.
إذا كنت من أي وقت مضى مضاعفة عدد بنسبة 2، انها ليست الذهاب الى نهاية المطاف ونيف،
لذلك ينبغي على 2 إلى المكان 0 كن 0،
وهذا ما حذر I نحو نصف قبل هو إذا لم يحدث التحول
ما وراء عدد البتات في عدد صحيح،
ثم هذا 1 هل الذهاب الى نهاية المطاف الخروج.
هذا هو مصدر القلق الوحيد إذا كنت يحدث ليكون التعامل مع قدرات كبيرة حقا.
ولكن في تلك المرحلة، ثم كنت تتعامل مع مجموعة من المليارات من الأشياء،
والتي قد لا يصلح في الذاكرة على أي حال.
>> الآن يمكن أن نحصل على موسيقى البوب، التي هي أكثر سهولة.
هل يمكن أن تفعل ذلك إذا كنت تحب يحدث لموسيقى البوب ​​في مجمله مجموعة،
والآن أنت بنصف طاقتها مرة أخرى.
هل يمكن أن realloc لتقليص مقدار الذاكرة لديك،
ولكن لم يكن لديك ما يدعو للقلق حول ذلك، وبالتالي فإن حالة realloc فقط ستكون
تزايد الذاكرة، لم تقلص الذاكرة،
الذي هو الذهاب الى جعل سوبر البوب ​​سهلة.
طوابير الآن، والتي ستكون مثل المداخن،
ولكن يتم عكس الترتيب الذي كنت تأخذ الأمور.
المثال تنميط لقائمة انتظار هو خط،
لذا أعتقد لو كنت الإنجليزية، لكنت أجيبه
مثال تنميط لقائمة انتظار هو قائمة الانتظار.
ذلك مثل الخط، إذا كنت أول شخص في الخط،
كنت تتوقع أن تكون أول شخص من على خط المرمى.
إذا كنت آخر شخص في خط، وأنت تسير أن يكون الشخص الأخير خدمتها.
ندعو هذا النمط FIFO، LIFO في حين كان مكدس النمط.
هذه الكلمات هي حقوق عالمية جدا.
>> مثل المداخن وعلى عكس المصفوفات، قوائم الانتظار عادة لا تسمح بالوصول إلى عناصر في الوسط.
هنا، كومة، لدينا دفعة والبوب.
هنا، ونحن قد يحدث لإدراج بقائمة الانتظار ودعا لهم dequeue.
لقد سمعت أيضا لهم ودعا التحول unshift.
لقد سمعت الناس يقولون دفعة والبوب ​​لتنطبق أيضا على قوائم الانتظار.
لقد سمعت إدراج أو إزالة،
دفع ذلك والبوب، إذا كنت تتحدث عن المداخن، وكنت تدفع ظهرت.
إذا كنت تتحدث عن قوائم الانتظار، هل يمكن اختيار الكلمات التي ترغب في استخدام
لإزالة والإدراج، وليس هناك توافق في الآراء بشأن ما ينبغي أن يسمى.
ولكن هنا، لدينا إدراج بقائمة الانتظار وdequeue.
الآن، يبدو البنية متطابقة تقريبا إلى البنية المكدس.
ولكن علينا أن تتبع الرأس.
واعتقد انه يقول هنا إلى أسفل، ولكن لماذا نحن بحاجة إلى الرأس؟
النماذج متطابقة أساسا لدفع والبوب.
يمكنك التفكير في الأمر على النحو دفعة والبوب.
والفرق الوحيد هو البوب ​​تعود-بدلا من الماضي، انها تعود أول.
2، 1، 3، 4، أو شيء من هذا.
وهنا البداية.
لدينا قائمة انتظار ممتلئ تماما، ولذلك لا يوجد أربعة عناصر فيه.
نهاية قائمة الانتظار لدينا حاليا 2،
والآن نذهب إلى إدراج شيء آخر.
>> عندما نريد أن إدراج شيء آخر، ما قمنا به لإصدار مكدس
تم تمديده نحن لدينا كتلة من الذاكرة.
ما هي المشكلة في ذلك؟
[طالب] يمكنك نقل 2.
ما قلت من قبل عن نهاية قائمة الانتظار،
هذا لا معنى له أن نبدأ في 1،
ثم نريد أن dequeue 1، ثم dequeue 3، ثم dequeue 4،
ثم dequeue 2، ثم dequeue هذا واحد.
لا يمكننا استخدام realloc الآن،
أو على أقل تقدير، لديك لاستخدام realloc بطريقة مختلفة.
ولكن يجب عليك ربما لا مجرد استخدام realloc.
كنت ستكون لدينا لنسخ الذاكرة الخاصة بك يدويا.
>> هناك نوعان من المهام لنسخ الذاكرة.
وهناك memcopy memmove.
أنا أقرأ حاليا على صفحات الرجل لمعرفة أي واحد كنت تريد الذهاب الى استخدامها.
حسنا، memcopy، والفرق هو
أن memcopy وmemmove، واحد يعالج القضية بشكل صحيح
أين أنت نسخ إلى المنطقة التي يحدث أن تتداخل المنطقة
كنت نسخ من.
Memcopy لا التعامل معها. Memmove لا.
يمكنك التفكير في المشكلة AS-
دعنا نقول أريد أن نسخ هذا الرجل،
هذه الأربعة لهذا الرجل انتهى.
في النهاية، ما ينبغي أن تبدو وكأنها مجموعة
بعد النسخة 2، 1، 2، 1، 3، 4، ومن ثم بعض الاشياء في نهاية المطاف.
ولكن هذا يعتمد على الترتيب الذي نسخ في الواقع،
لأنه إذا كنا لا نعتبر حقيقة أن المنطقة نحن في نسخ
التداخل واحد ونحن نسخ من،
ثم قد نفعل مثل بداية هنا، نسخ 2 في المكان الذي تريد أن تذهب،
ثم الانتقال لدينا مؤشرات إلى الأمام.
>> الآن ونحن في طريقنا إلى هنا وهنا، والآن نريد أن نسخ
هذا الرجل أكثر من هذا الرجل والتحرك إلى الأمام مؤشرات لدينا.
ما نحن ذاهبون الى نهاية المطاف الحصول على 2، 1، 2، 1، 2، 1
بدلا من 2 الاقتضاء، 1، 2، 1، 3، 4 لأن
تجاهلت 2، 1 في 3 الأصلية، 4.
Memmove يعالج بشكل صحيح أن.
في هذه الحالة، وأساسا دائما مجرد استخدام memmove
لأنه يعالج بشكل صحيح.
فإنه عادة لا تؤدي أي أسوأ من ذلك.
والفكرة هي بدلا من البدء من البداية ونسخ بهذه الطريقة
كما فعلنا هنا فقط، ويبدأ من نهاية ونسخة في،
وفي هذه الحالة، لا يمكن ان يكون مشكلة.
هناك لا يضيع الأداء.
دائما استخدام memmove. تقلق أبدا memcopy.
وحيث ان كنت ستكون لدينا لmemmove بشكل منفصل
الجزء ملفوفة حول من قائمة الانتظار، الخاص بك.
لا تقلق إذا لم تفعل تماما.
هذا هو أكثر صعوبة من، كومة دفعة والبوب.
>> أي شخص يحصل أي رمز نتمكن من العمل مع؟
حتى لو غير مكتملة تماما؟
[طالب] نعم، انها غير مكتملة تماما، وإن كان.
غير كاملة تماما على ما يرام ما دمنا-يمكنك حفظ مراجعة؟
أنسى أنه في كل مرة واحدة.
حسنا، وتجاهل ما يحدث عندما نحتاج لتغيير حجم الأشياء.
تجاهل تماما تغيير الحجم.
شرح هذا الرمز.
أنا أولا وقبل كل فحص إذا كان حجم أقل من النسخة الأولى من كل
ثم بعد ذلك، وأنا إدراج-I + حجم الرأس تأخذ،
وأنا تأكد من أنه يلتف حول قدرة مجموعة،
وأنا أدخل في سلسلة جديدة هذا الموقف.
ثم I زيادة حجم والعودة الحقيقية.
>> [روب B.] هذا هو بالتأكيد واحدة من تلك الحالات التي كنت تريد الذهاب الى تستخدم وزارة الدفاع.
أي نوع من الحالة حيث قمت التفاف حولها، وإذا كنت تعتقد أن التفاف حولها،
يجب أن تكون فورية الفكر وزارة الدفاع.
كما التحسين السريع / يصبح لديك رمز سطر واحد أقصر،
لاحظت أن السطر التالي مباشرة هذا واحد
هو حجم فقط + +، بحيث يمكنك دمج ذلك في هذا الخط، وحجم + +.
إلى هنا الآن، لدينا حالة
حيث لم يكن لدينا ما يكفي من الذاكرة،
لذلك نحن لدينا زيادة القدرة بنسبة 2.
اعتقد انك يمكن أن يكون لها نفس المشكلة هنا، ولكن يمكننا تجاهل عليه الآن،
حيث إذا فشل لك لزيادة قدرتك،
ثم كنت تريد الذهاب الى خفض قدرتك بنسبة 2 مرة أخرى.
ملاحظة أخرى هي قصيرة مثلما يمكنك القيام به + =،
يمكنك أيضا القيام << =.
أي شيء تقريبا يمكن أن تذهب قبل يساوي، = +، | = و =، = <<.
تشار * الجديد هو كتلة الجديد من الذاكرة.
أوه، أكثر من هنا.
>> ماذا يفكر الناس في نوع من كتلة الجديد من الذاكرة؟
[طالب] وينبغي أن يكون ** شار.
التفكير في العودة إلى البنية دينا هنا حتى،
سلاسل ما نقوم بإعادة توزيع.
ونحن نبذل بأكمله التخزين دينامية جديدة لعناصر في قائمة الانتظار.
ما نحن في طريقنا إلى أن تعيين إلى سلاسل الخاص بك هو ما نقوم mallocing في الوقت الراهن،
وهكذا الجديدة ستكون ** شار.
انها سوف تكون مجموعة من السلاسل.
ثم ما هو الحال في ظلها ونحن في طريقنا للعودة كاذبة؟
[طالب] ينبغي علينا أن نفعل ل* شار؟
[روب B. نعم، الكلمة الطيبة.
[طالب] ماذا كان ذلك؟
[روب B.] أردنا أن نقوم حجم شار * لأننا لم يعد-
هذا من شأنه أن يكون في الواقع مشكلة كبيرة جدا لأن sizeof (تشار) سيكون 1.
Sizeof تشار * سيكون 4،
لذلك الكثير من الأوقات عندما كنت تتعامل مع رجات،
كنت تميل إلى تفلت من العقاب بسبب حجم كثافة العمليات وحجم كثافة العمليات *
على نظام 32 بت سوف تكون نفس الشيء.
ولكن هنا، sizeof (تشار) وsizeof (تشار *) تسير الآن أن يكون نفس الشيء.
>> ما هو الظرف الذي كنا عودة كاذبة؟
[طالب] جديد فارغ.
نعم، إذا جديدة فارغة، نعود كاذبة،
وانا ذاهب لرمي أسفل هنا،
[طالب] [غير مسموع]
[روب B.] نعم، هذا على ما يرام.
هل يمكن أن تفعل أي قدرة أو 2 مرات التحول القدرة 1 و قم بتعيين فقط عليه هنا أو أيا كان.
سوف نفعل ذلك كما كنا عليه.
القدرة = 1 >>.
وكنت أبدا ستكون لدينا ما يدعو للقلق حول فقدان مكان ال 1 في
لأنك تركت تحولت بحلول 1، لذلك مكان ال 1 هو بالضرورة 0،
تحويل الحق في ذلك في موعد أقصاه 1، وأنت لا تزال جارية ليكون على ما يرام.
[طالب] هل تحتاج إلى القيام بذلك قبل العودة؟
[روب B.] نعم، هذا يجعل الاطلاق لا معنى له.
>> نفترض الآن ونحن في طريقنا إلى العودة الحقيقية في نهاية المطاف إلى نهاية.
الطريق ونحن في طريقنا للقيام بهذه memmoves،
نحن بحاجة إلى أن نكون حذرين مع كيف نفعل لهم.
هل لديها أي اقتراحات لكيفية القيام بها؟
وهنا بدايتنا.
حتما، نحن نريد أن تبدأ في بداية مرة أخرى
أشياء نسخة من هناك و، 1، 3، 4، 2.
كيف يمكنك أن تفعل ذلك؟
أولا، لا بد لي من إلقاء نظرة على الصفحة رجل لmemmove مرة أخرى.
Memmove، ترتيب الحجج المهم دائما.
نريد وجهتنا الأولى والثانية المصدر والثالث الحجم.
هناك الكثير من الوظائف التي عكس المصدر والوجهة.
المقصد، يميل إلى أن يكون مصدر ثابت إلى حد ما.
الخطوة، ما هو العودة؟
تقوم بإرجاع المؤشر إلى الوجهة، لأي سبب من الأسباب التي قد ترغب.
لا أستطيع قراءتها صور، لكننا نريد للانتقال إلى وجهتنا.
>> ما وجهتنا ستكون؟
[طالب] جديدة.
[روب B.] نعم، وأين نحن من النسخ؟
أول شيء هو أننا نسخ هذا 1 و 3 و 4.
ما هو هذا، 1، 3، 4.
ما هو عنوان هذا 1؟
ما هو عنوان أن 1؟
[طالب] [غير مسموع]
[روب B.] + رئيس عنوان العنصر الأول.
كيف نحصل على العنصر الأول في الصفيف؟
[طالب] قائمة الانتظار.
[روب B. نعم، q.strings.
تذكر، هنا، رأسنا هو 1.
الرتق. أنا فقط أعتقد انها سحرية-
هنا، لدينا رئيس هو 1. انا ذاهب الى تغيير لون بلدي أيضا.
وهنا السلاسل.
هذا، يمكن أن نكتب إما كما فعلنا أكثر من هنا
+ مع رؤساء q.strings.
هناك الكثير من الناس هنا أيضا وq.strings [رئيس].
هذا ليس حقا أي أقل كفاءة.
قد تعتقد بأنها تقوم عليه ومن ثم يعتبر إلغاء مرجعية الحصول على عنوان،
لكن المترجم هو الذهاب الى ترجمتها الى ما كان لدينا قبل أي حال، q.strings + الرأس.
وفي كلتا الحالتين كنت ترغب في التفكير في الأمر.
>> وعدد بايت نريد أن نسخ؟
[طالب] القدرات - الرأس.
القدرة - الرأس.
ومن ثم يمكن أن تكتب دائما مثالا
لمعرفة ما اذا كان هذا صحيح.
[طالب] لا بد من مقسوما على 2 ثم.
نعم، لذلك أعتقد أننا يمكن أن تستخدم الحجم.
لا يزال لدينا حجم كونها-
باستخدام حجم، لدينا حجم يساوي 4.
حجمنا هو 4. رؤوسنا هو 1.
نحن نريد لنسخ هذه العناصر 3.
هذا هو التعقل تأكد من أن حجم - رئيس هو 3 بشكل صحيح.
ويعود هنا، كما قلنا من قبل،
إذا كنا القدرات، فسيتعين علينا اللجوء لتقسيم بنسبة 2
لأننا قد نمت بالفعل قدرتنا، وذلك بدلا، ونحن في طريقنا للاستخدام الحجم.
أن نسخ هذا الجزء.
الآن، ونحن بحاجة لنسخ جزء آخر، الجزء الذي تبقى من البداية.
>> وهذا سوف memmove إلى ما هو الموقف؟
[طالب] حجم بلس - الرأس.
نعم، لذلك نحن بالفعل قد نسخت من حيث الحجم - بايت الرأس،
وذلك حيث نريد لنسخ بايت المتبقية هو جديد
ومن ثم حجم ناقص بشكل جيد، وعدد وحدات البايت الانتهاء من نسخ أننا بالفعل.
ثم أين نحن من النسخ؟
[طالب] Q.strings [0].
[روب B. نعم، q.strings.
يمكن أن نفعل أي وq.strings [0].
هذا هو أقل شيوعا بكثير من هذا.
إذا كان يحدث لمجرد أن يكون 0، ثم عليك أن نميل إلى النظر إلى q.strings.
حيث ان نسخ من نحن.
كم بايت لا لم يقم نحن لنسخ؟ >> [طالب] 10.
الحق.
[طالب] هل علينا أن تتضاعف 5 - 10 يوقت حجم بايت أو شيء؟
نعم، لذلك هذا هو بالضبط ما فيها، ونحن نسخ؟
[طالب] [غير مسموع]
ما هو نوع من الشيء نحن نسخ؟
[طالب] [غير مسموع]
نعم، لذلك ليالي * شار اننا نسخ، ونحن لا نعرف من أين تأتي تلك من.
حسنا، حيث أنهم لافتا إلى، مثل السلاسل، نحن في نهاية المطاف دفع وضعها على قائمة الانتظار
أو enqueuing على قائمة الانتظار.
حيث تكون هذه تأتي من، ليس لدينا أي فكرة.
نحن بحاجة فقط للحفاظ على تعقب من S * شار أنفسهم.
نحن لا نريد لنسخ المطاطية - بايت الرأس.
نريد أن حجم نسخ - رئيس شار ق *،
لذلك نحن ذاهبون الى مضاعفة ذلك sizeof (تشار *).
نفس الى هنا، رئيس * sizeof (تشار *).
>> [طالب] وماذا عن (غير مسموع)؟
هذا الحق هنا؟
[طالب] لا، دون أن حجم - الرأس.
[روب B.] هذا الحق هنا؟
مؤشر الحساب.
كيف الحسابية المؤشر هو الذهاب إلى العمل هو
تتكاثر تلقائيا حسب حجم من النوع الذي نتعامل معه.
تماما مثل هنا، جديدة + (حجم - الرأس)
ما يعادل بالضبط و[حجم - رئيس] جديدة
حتى نتوقع أن للعمل بشكل صحيح،
لأنه إذا نتعامل مع مجموعة الباحث، ثم لم نفعل ذلك من قبل مؤشر INT-
أو إذا كان حجم من 5 وتريد العنصر 4، ثم نحن في مؤشر
الباحث مجموعة [4].
أنت مش-[4] * حجم كثافة العمليات.
الذي يعالج تلقائيا، وهذه الحالة
ما يعادل حرفيا، وبالتالي فإن شريحة الجملة
هو مجرد الذهاب لتحويلها إلى هذا بمجرد تجميع.
هذا شيء عليك أن تكون حذرا من أن
عند إضافة حجم - رئيس
الذي تضيفه لا بايت واحد.
كنت تقوم بإضافة حرف واحد *، والتي يمكن أن تكون واحدة بايت أو أيا كان.
>> أسئلة أخرى؟
حسنا، dequeue ستكون أسهل.
سأعطيك دقيقة لتنفيذها.
أوه، وأعتقد أن هذا هو نفس الوضع حيث
ما حالة إدراج بقائمة الانتظار، إذا نحن enqueuing فارغة،
ربما نريد أن التعامل معها، وربما لم نفعل ذلك.
ونحن لن نفعل ذلك مرة أخرى هنا، ولكن نفس الحالة مكدس لدينا.
إذا كان لنا أن إدراج بقائمة الانتظار فارغة، ونحن قد ترغب في تجاهل ذلك.
أي شخص يحصل بعض التعليمات البرمجية أستطيع سحب ما يصل؟
[طالب] أنا فقط dequeue.
الإصدار 2 هو أن-بخير.
تريد شرح؟
[طالب] أولا، يجب التأكد من أن هناك شيئا في قائمة الانتظار
وأن حجم تتراجع بمقدار 1.
ما عليك القيام به ذلك، وبعد ذلك يمكنك العودة الرأس
ثم قم بتحريك الرأس بنسبة 1.
حسنا، لذلك هناك حالة الزاوية لدينا للنظر فيها. نعم.
[طالب] إذا رأسك هو في العنصر الأخير،
ثم كنت لا تريد رئيس للإشارة خارج الصفيف.
>> نعم، ذلك في أقرب وقت الرأس يضرب نهاية مجموعتنا،
عندما كنا dequeue، ينبغي كتكوت رؤوسنا إلى 0.
للأسف، لا يمكننا أن نفعل ذلك في خطوة واحدة.
أعتقد أن الطريقة التي كنت ربما هو إصلاح
هذا وستكون * شار، ما نقوم العائدين،
أيا كان الاسم متغير يريد أن يكون.
ثم نريد أن وزارة الدفاع من قبل رئيس قدرتنا
وأرجع ثم العودة.
وهناك الكثير من الناس هنا لأنها قد تفعل
هذا هو الحال من رؤية الناس، اختر مربع الطباعة تفعل لو رئيس
أكبر من القدرات، والقيام الرأس - القدرات.
وأن يعمل فقط حول ما هو وزارة الدفاع.
قدرة وزارة الدفاع هو رئيس = أنظف بكثير
لالتفاف حول رأس مما لو أكبر من قدرة رئيس - القدرات.
>> الأسئلة؟
حسنا، وآخر شيء نحن لم يقم هو لدينا قائمة المرتبطة.
قد تستخدم لبعض من السلوك قائمة مرتبطة إذا لم
ربط القوائم في الجداول التجزئة، إذا فعلتم جدول التجزئة.
وإنني أوصي بشدة القيام جدول التجزئة.
قد كنت قد فعلت بالفعل يحاكم،
لكنها تحاول هي أكثر صعوبة.
من الناحية النظرية، وانهم مقارب أفضل.
ولكن مجرد إلقاء نظرة على لوحة كبيرة،
ويحاول أبدا أن تفعل أفضل، وأنها تأخذ المزيد من الذاكرة.
كل شيء عن يحاول ينتهي به الأمر أسوأ لمزيد من العمل.
هذا ما حل ديفيد مالان هو دائما
هل هو دائما الحل المشاركات يحاكم له، ودعونا نرى أين هو حاليا.
ماذا كان تحت ديفيد J؟
انه رقم 18، بحيث ليست سيئة بشكل رهيب،
والتي ستكون واحدة من أفضل يحاول يمكن ان يخطر لك
أو واحدة من أفضل يحاول من يحاكم.
أليس الحل حتى بلده الأصلي؟
أشعر حلول يحاكم تميل إلى أن تكون أكثر في هذا النطاق لاستخدام RAM.
>> النزول إلى الأعلى جدا، واستخدام ذاكرة الوصول العشوائي هو في خانة واحدة.
تنخفض نحو الأسفل، ثم تبدأ في رؤية يحاول
حيث تحصل ضخمة تماما استخدام RAM،
ويحاول أكثر صعوبة.
ليس تماما يستحق كل هذا العناء ولكن تجربة تعليمية إذا لم واحد.
وآخر شيء هو لدينا قائمة مرتبط،
وهذه الأمور الثلاثة، مداخن، طوابير، وقوائم مرتبط،
أي شيء من أي وقت مضى كنت تفعل في المستقبل في علوم الكمبيوتر
سوف نفترض لديك الإلمام بهذه الأمور.
أنها مجرد الأساسية من أجل كل شيء.
>> ربط القوائم، وهنا لدينا قائمة منفردة مرتبطة ستكون تنفيذنا.
ماذا يعني ربط منفردة بدلا من ربطها بشكل مضاعف؟ نعم.
[طالب] ويشير فقط إلى مؤشر المقبل بدلا من المؤشرات،
مثل واحد قبله واحدا بعد ذلك.
نعم، وذلك في تنسيق الصورة، ماذا أفعل للتو؟
لقد اثنين من الأشياء. لدي صورة وصورة.
في شكل صور، لدينا منفردة القوائم المرتبطة،
حتما، لدينا نوع من مؤشر إلى رئيس قائمتنا،
ثم ضمن القائمة، لدينا مؤشرات فقط،
وربما يشير هذا إلى قيمة خالية.
انها سوف تكون نموذجية من الرسم على قائمة منفردة مرتبطة.
قائمة مرتبطة على نحو مضاعف، يمكنك العودة إلى الوراء.
إذا أعطي لك أي عقدة في القائمة، ثم يمكنك الحصول بالضرورة على
أي عقدة أخرى في القائمة إذا كان قائمة مرتبطة على نحو مضاعف.
ولكن إذا كنت تحصل على عقدة الثالث في قائمة وانها قائمة مرتبطة منفردة،
بأي حال من الأحوال من أي وقت مضى كنت تريد الذهاب للوصول الى العقد الأول والثاني.
وهناك فوائد والمضار، واحدة واحدة واضحة
وتأخذ المزيد من حجمها، وعليك أن تتبع هذه الأشياء حيث تشير الآن.
لكننا نهتم فقط مرتبطة منفردة.
>> وهناك أشياء قليلة ونحن في طريقنا لدينا لتنفيذها.
عقدة البنية typedef الخاص، وكثافة العمليات الأول: البنية عقدة * القادمة؛ العقدة.
وينبغي أن أحرق typedef في عقولكم.
يجب أن يكون مثل القصير 1 إعطاء typedef من عقدة قائمة مرتبطة،
ويجب أن تكون قادرة على خربشات على الفور أن لأسفل
دون حتى التفكير فيه.
اعتقد الزوجان على بعض الأسئلة، لماذا نحن بحاجة البنية هنا؟
لماذا لا نقول * العقدة؟
[طالب] [غير مسموع]
نعم.
الشيء الوحيد الذي يحدد عقدة كشيء
هو typedef نفسها.
ولكن اعتبارا من هذه النقطة، عندما نكون نوع من تحليل البنية من خلال هذا التعريف العقدة،
نحن لم ننته بعد typedef لدينا، منذ ذلك typedef لم ينته،
عقدة غير موجود.
ولكن البنية لا عقدة، وهذه العقدة هنا،
هذا ويمكن أيضا أن يسمى أي شيء آخر.
يمكن أن يسمى هذا ن.
يمكن أن يسمى ذلك مرتبط العقدة القائمة.
يمكن أن يطلق عليه أي شيء.
ولكن هذه العقدة البنية يحتاج إلى أن يطلق عليه نفس الشيء هذه العقدة البنية.
ما تسمونه هذا قد يكون هنا أيضا،
وبحيث يجيب أيضا نقطة الثاني من السؤال
وهذا هو السبب واحد في الكثير من المرات عندما ترى البنيات وtypedefs من البنيات،
سترى البنيات مجهول حيث سترى فقط البنية typedef،
تنفيذ القاموس، بنية، أو أيا كان.
>> لماذا نحتاج هنا أن أقول عقدة؟
لماذا لا يكون من البنية مجهول؟
انها تقريبا نفس الإجابة.
[طالب] تحتاج إلى الرجوع إليه في البنية.
نعم، داخل البنية، تحتاج إلى الرجوع إلى البنية نفسها.
إذا كنت لا تعطي البنية اسم، إذا انها البنية مجهول، لا يمكنك الرجوع إليه.
وأخيرا وليس آخرا، يجب أن تكون هذه واضحة إلى حد ما جميع،
وينبغي أن تساعدك على تحقيق إذا كنت أكتب هذا لأسفل
أن كنت تريد ان تفعل شيئا خاطئا إذا هذا النوع من الأشياء لا معنى لها.
أخيرا وليس آخرا، لماذا يجب أن تكون هذه البنية عقدة *؟
لماذا لا يمكن أن يكون مجرد البنية عقدة في المرة القادمة؟
[طالب] مؤشر إلى البنية المقبل.
وهذا حتما ما نريد.
يمكن أن يكون السبب في ذلك أبدا عقدة البنية القادمة؟
لماذا يجب أن تكون البنية عقدة * في المرة القادمة؟ نعم.
[طالب] انها مثل حلقة لا نهائية.
نعم.
[طالب] وسيكون كل واحدة.
نعم، مجرد التفكير في الطريقة التي ستفعل حجم أو شيء.
حجم البنية هي في الأساس + أو - بعض نمط هنا أو هناك.
انه سيكون أساسا ليكون مجموع أحجام من الأشياء في البنية.
هذا الحق هنا، لم يتغير أي شيء، وحجم سيكون سهلا.
حجم العقدة البنية ستكون حجم حجم + ط المقبل.
حجم أنا سوف يكون 4. حجم المقبل ستكون 4.
حجم العقدة البنية ستكون 8.
إذا كنا لا نملك *، التفكير في sizeof،
ثم sizeof (ط) ستكون 4.
حجم العقدة البنية المقبل سيكون حجم ط + حجم العقدة البنية المقبل
+ + حجم حجم العقدة الأولى من البنية المقبل.
فإنه يكون العودية لا حصر له من العقد.
هذا هو السبب في هذا هو كيف تسير الامور يجب أن تكون.
>> مرة أخرى، بالتأكيد أن استظهر،
أو على الأقل فهم يكفي أنه يمكنك أن تكون قادرة على
السبب من خلال ما يجب أن تبدو.
الأشياء التي كنت تريد الذهاب الى تنفيذها.
إذا طول القائمة،
هل يمكن أن يغش والحفاظ حول
طول العالمية أو شيء ما، لكننا لن نفعل ذلك.
ونحن في طريقنا لحساب طول القائمة.
لدينا يحتوي، لذلك هذا هو في الأساس مثل البحث،
لذلك لدينا قائمة من الأعداد الصحيحة المرتبطة لمعرفة ما إذا كان هذا صحيحا في القائمة المرتبطة.
Prepend هو الذهاب الى إدراج في بداية القائمة.
الإلحاقي هو الذهاب الى إدراج في نهاية المطاف.
Insert_sorted سوف تضاف الى موقف مصنفة في القائمة.
نوع من Insert_sorted يفترض أنك لم تستخدم قط prepend أو إلحاق بطرق سيئة.
>> Insert_sorted عندما كنت تنفيذ insert_sorted-
دعونا نقول لدينا قائمتنا المرتبطة.
هذا ما يبدو حاليا مثل، 2، 4، 5.
أريد أن إدراج 3، لذلك طالما يتم فرز القائمة بالفعل في حد ذاته،
فإنه من السهل أن تجد ينتمي حيث 3.
أبدأ في 2.
حسنا، 3 أكبر من 2، لذلك أريد أن الاستمرار.
أوه، 4 هو كبير جدا، لذلك أنا أعرف 3 ستذهب في الفترة ما بين 2 و 4،
ولدي مؤشرات لإصلاح وجميع الاشياء التي.
ولكن إذا لم نستخدم بدقة insert_sorted،
مثل دعنا نقول فقط أنا prepend 6،
ثم قائمتي المرتبطة سيصبح هذا.
يجعل لا معنى له الآن، وذلك لinsert_sorted، يمكنك مجرد افتراض
أن يتم فرز القائمة، على الرغم من وجود عمليات
والتي يمكن أن تسبب لأنه لا يمكن فرزها، وهذا كل شيء.
إيجاد مفيدة إدخالها حتى تلك هي الأشياء الرئيسية وأنت تسير لدينا لتنفيذها.
>> في الوقت الحالي، يستغرق ذلك دقيقة للقيام طول ويحتوي،
وينبغي لهذه أن تكون سريعة نسبيا.
تقترب الساعة الختام، بحيث يتمكن أي شخص لديه أي شيء لمدة أو يحتوي على؟
انهم ذاهبون لتكون متطابقة تقريبا.
[طالب] طول.
دعونا نرى، مراجعة.
حسنا.
تريد شرح؟
[طالب] I مجرد خلق عقدة وتهيئة مؤشر على الأول، وهو متغير لدينا العالمية،
وبعد ذلك تحقق لمعرفة ما اذا كان فارغة لذلك أنا لا تحصل على خطأ SEG والعودة 0 إذا كان هذا هو الحال.
خلاف ذلك، وأنا من خلال حلقة، تتبع داخل عدد صحيح
كم مرة كنت الوصول إلى I العنصر التالي من قائمة
والزيادة في العملية نفسها أيضا الوصول إلى هذا العنصر الفعلي،
وبعد ذلك جعل باستمرار تحقق لمعرفة ما اذا كان باطلا،
وإذا كان فارغة، ثم إحباط وإرجاع فقط عدد من العناصر كنت الوصول إليها.
>> [روب B.] هل لديها أي تعليقات على أي شيء؟
هذا يبدو من الحكمة صحة غرامة.
[طالب] لا أعتقد أن كنت في حاجة إلى عقدة == فارغة.
نعم، حتى إذا عقدة == 0 العودة فارغة.
ولكن إذا عقدة == فارغة ثم وهذا أوه، هناك قضية صحة.
كان مجرد العودة كنت أنا، ولكنها ليست في نطاق الوقت الحالي.
كل ما تحتاجه الباحث الأول، لذلك أنا 0 =.
ولكن إذا عقدة فارغة، ثم أنا ما زالت مستمرة ليكون 0،
ونحن في طريقنا للعودة 0، لذلك هذا هو الحال متطابقة.
شيء آخر مشترك هو الحفاظ على الإعلان
من داخل عقدة من لحلقة.
يمكن القول أوه، لا.
دعونا يبقيه لأن هذا.
وأود أن وضع الباحث ربما ط = 0 هنا،
ثم عقدة عقدة * = الأولى في هنا.
وربما هذا هو الكيفية التخلص من هذا الآن.
وربما هذا هو كيف كنت قد كتبت عليه.
هل يمكن أيضا النظر إليها، مثل هذا.
هذا للهيكل حلقة هنا
يجب أن تكون تقريبا الطبيعية لكم كما لكثافة العمليات ط = 0
أنا أقل من طول الصفيف ط + +.
إذا هذه هي الطريقة التي iterate عبر صفيف، هذه هي الطريقة التي iterate عبر قائمة مرتبطة.
>> هذا ينبغي أن يكون طبيعة ثانية في مرحلة ما.
مع أخذ ذلك في الاعتبار، وهذا سيكون تقريبا نفس الشيء.
كنت تريد الذهاب الى تكرار عبر قائمة مرتبطة.
إذا كانت العقدة ليست لدي فكرة ما يسمى القيمة.
أنا عقدة.
إذا كانت القيمة في تلك العقدة = ط العودة الحقيقية، وهذا كل شيء.
تلاحظ أن الطريقة الوحيدة التي يمكننا العودة من أي وقت مضى كاذبة
هو إذا كنا iterate عبر القائمة بأكملها مرتبطة أبدا والعودة الحقيقية،
أن ذلك دعونا هذا ما يفعله.
باعتبارها الجانب علما، أننا ربما لن تحصل على إلحاق أو prepend.
>> مشاركة ملاحظة سريعة.
إذا كنت ترى الكلمة ثابت، لذلك دعونا نقول ثابت الباحث العد = 0،
ثم اننا نعول + +، يمكن ان يخطر لك في الأساس من أنها متغير عمومي،
على الرغم من انني وقال هذا ليس فقط كيف ونحن في طريقنا لتنفيذ الطول.
أنا أفعل ذلك هنا، والعد ثم + +.
أي الطريقة التي يمكن أن تدخل في عقدة قائمتنا مرتبط نحن تزايد عدد دينا.
والقصد من هذه الكلمة هو ما يعني ثابت.
إذا كان لي فقط العد = 0 الباحث أن يكون متغير عمومي العادية القديمة.
ما ثابت وسائل العد الباحث هو أنه متغير عمومي لهذا الملف.
فإنه من المستحيل بالنسبة لبعض الملفات الأخرى،
أحب التفكير في pset 5، إذا كنت قد بدأت.
لديك كل speller.c، وكان لديك dictionary.c،
وإذا قمت بتعريف مجرد شيء العالمية، ثم أي شيء في speller.c
ويمكن الوصول إليها في dictionary.c والعكس بالعكس.
المتغيرات العالمية يمكن الوصول إليها بواسطة أي ملف ج.،
ولكن المتغيرات ثابتة يمكن الوصول إليها فقط من داخل الملف نفسه،
حتى داخل المدقق الإملائي أو داخل dictionary.c،
هذا هو نوع من الطريقة التي أود أن تعريف متغير بلدي لحجم مجموعة بلدي
أو حجم رقم هاتفي من الكلمات في القاموس.
منذ أن كنت لا تريد أن تعريف متغير العالمية أن أي شخص لديه حق الوصول إلى،
أنا فقط يهتمون حقا لأغراض بلدي.
>> الشيء الجيد في هذا هو أيضا اسم الاصطدام كله الاشياء.
إذا كانت بعض الملفات الأخرى يحاول استخدام متغير عمومي يسمى العد، تسير الأمور جدا، خطأ جدا،
ولذلك فإن هذا يبقي لطيف الأشياء الآمنة، والوحيد الذي يمكن الوصول إليه،
ويمكن لأي مستخدم آخر، وإذا كان شخص آخر يعلن متغير عمومي يسمى العد
بعد ذلك سوف لا تتداخل مع متغير ثابت يسمى العد الخاص بك.
هذا ما هو ثابت. بل هو متغير الملف العالمي.
>> أسئلة عن أي شيء؟
كل مجموعة. وداعا.
[CS50.TV]