1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [القسم 6] [أكثر راحة] 2 00:00:01,000 --> 00:00:04,000 [روب بودين] [جامعة هارفارد] 3 00:00:04,000 --> 00:00:09,000 [هذا CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> يمكننا التوجه الى قسم من الأسئلة. 5 00:00:11,000 --> 00:00:17,000 أرسلت لي URL للفضاء من قبل. 6 00:00:17,000 --> 00:00:22,000 بداية القسم من الأسئلة يقول- 7 00:00:22,000 --> 00:00:26,000 يبدو أنني لست تماما unsick، هو سؤال سهل جدا 8 00:00:26,000 --> 00:00:28,000 ما هو مجرد valgrind؟ 9 00:00:28,000 --> 00:00:30,000 ماذا valgrind تفعل؟ 10 00:00:30,000 --> 00:00:34,000 أريد أن أقول أي شخص ما valgrind لا؟ 11 00:00:34,000 --> 00:00:36,000 [طالب] الشيكات تسرب الذاكرة. 12 00:00:36,000 --> 00:00:41,000 نعم، هو المدقق valgrind الذاكرة العامة. 13 00:00:41,000 --> 00:00:44,000 ذلك، في نهاية المطاف، يقول لك إذا كان لديك أي تسرب الذاكرة، 14 00:00:44,000 --> 00:00:49,000 التي هي في معظمها ما نقوم استخدامه لأنه إذا كنت ترغب في 15 00:00:49,000 --> 00:00:54,000 تحقق نتائج جيدة في مجموعة مشكلة أو إذا كنت ترغب في 16 00:00:54,000 --> 00:00:59,000 الحصول على لوحة كبيرة، تحتاج إلى أن يكون أي تسرب الذاكرة على الإطلاق، 17 00:00:59,000 --> 00:01:01,000 وفي حال كان لديك تسرب الذاكرة التي لا يمكن العثور عليها، 18 00:01:01,000 --> 00:01:04,000 أيضا أن نضع في الاعتبار أنه كلما قمت بفتح ملف 19 00:01:04,000 --> 00:01:07,000 وإذا لم يكن لإغلاقه، وهذا هو تسرب الذاكرة. 20 00:01:07,000 --> 00:01:10,000 >> وهناك الكثير من الناس يبحثون عن بعض عقدة انهم لا تحرير 21 00:01:10,000 --> 00:01:15,000 عندما حقا، لكنها لم تغلق القاموس في الخطوة الأولى. 22 00:01:15,000 --> 00:01:19,000 كما يخبرك إذا كان لديك أي غير صالحة يقرأ أو يكتب، 23 00:01:19,000 --> 00:01:22,000 وهو ما يعني إذا حاولت وتعيين قيمة 24 00:01:22,000 --> 00:01:26,000 وهذا بعد نهاية كومة وذلك لا يحدث إلى خطأ SEG 25 00:01:26,000 --> 00:01:30,000 لكن valgrind أدرك ذلك، كما يجب أن لا يكون في الواقع الكتابة هناك، 26 00:01:30,000 --> 00:01:33,000 ولذا يجب عليك بالتأكيد لم يكن لديك أي من هذه أيضا. 27 00:01:33,000 --> 00:01:38,000 كيف يمكنك استخدام valgrind؟ 28 00:01:38,000 --> 00:01:42,000 كيف يمكنك استخدام valgrind؟ 29 00:01:42,000 --> 00:01:45,000 >> انها مسألة من العام 30 00:01:45,000 --> 00:01:49,000 نوع من تشغيله وإلقاء نظرة على الإخراج. 31 00:01:49,000 --> 00:01:51,000 الإخراج هو الساحقة في الكثير من الأحيان. 32 00:01:51,000 --> 00:01:54,000 هناك أيضا أخطاء ممتعة حيث إذا كان لديك بعض الشيء خطأ فادحا 33 00:01:54,000 --> 00:01:59,000 يحدث في حلقة، بعد ذلك سوف يقول في النهاية، "أخطاء الطريق كثيرة جدا. 34 00:01:59,000 --> 00:02:03,000 انا ذاهب الى وقف العد الآن. " 35 00:02:03,000 --> 00:02:08,000 انها في الاساس خرج النصية التي لديك لتحليل. 36 00:02:08,000 --> 00:02:13,000 في النهاية، وسوف اقول لكم أي تسرب الذاكرة التي لديك، 37 00:02:13,000 --> 00:02:16,000 كم عدد القطع، والتي يمكن أن تكون مفيدة ل 38 00:02:16,000 --> 00:02:20,000 إذا كان واحد unfreed كتلة، ثم انها عادة ما تكون أسهل للعثور على 39 00:02:20,000 --> 00:02:23,000 من unfreed 1000 بنات. 40 00:02:23,000 --> 00:02:26,000 1000 بنات unfreed يعني على الارجح كنت لا تحرير 41 00:02:26,000 --> 00:02:30,000 لديك القوائم المرتبطة بشكل مناسب أو شيء. 42 00:02:30,000 --> 00:02:32,000 انها valgrind ذلك. 43 00:02:32,000 --> 00:02:35,000 >> الآن لدينا قسم من الأسئلة، 44 00:02:35,000 --> 00:02:38,000 التي لا تحتاج لتحميل. 45 00:02:38,000 --> 00:02:41,000 يمكنك النقر على اسمي وسحب لهم حتى في الفضاء. 46 00:02:41,000 --> 00:02:44,000 انقر الآن على لي. 47 00:02:44,000 --> 00:02:46,000 وسوف يكون التنقيح 1 المكدس، الذي نقوم به أولا. 48 00:02:46,000 --> 00:02:55,000 وسوف تكون قائمة الانتظار التنقيح 2، والتنقيح 3 ستكون قائمة منفردة مرتبطة. 49 00:02:55,000 --> 00:02:58,000 الانطلاق مع مكدس لدينا. 50 00:02:58,000 --> 00:03:02,000 كما جاء هنا، كومة هي واحدة من أبسط، 51 00:03:02,000 --> 00:03:07,000 هياكل البيانات الأساسية لعلوم الكمبيوتر. 52 00:03:07,000 --> 00:03:11,000 المثال تنميط جدا هو 53 00:03:11,000 --> 00:03:13,000 كومة من الأدراج في قاعة الطعام. 54 00:03:13,000 --> 00:03:16,000 انها في الاساس كلما يجري تعرفت على كومة، 55 00:03:16,000 --> 00:03:20,000 شخص ما سوف يقول، "أوه، مثل كومة من الصواني." 56 00:03:20,000 --> 00:03:22,000 كنت كومة من الصواني فوق. 57 00:03:22,000 --> 00:03:24,000 ثم عندما تذهب لسحب الدرج، 58 00:03:24,000 --> 00:03:31,000 علبة الأولى التي سحبت الحصول على انها هي الأخيرة التي وضعت على المكدس. 59 00:03:31,000 --> 00:03:34,000 المكدس أيضا مثل ذلك يقول هنا، 60 00:03:34,000 --> 00:03:37,000 لدينا شريحة من الذاكرة تسمى المكدس. 61 00:03:37,000 --> 00:03:40,000 ولماذا يطلق عليه مكدس؟ 62 00:03:40,000 --> 00:03:42,000 >> لأن مثل كومة بنية بيانات، 63 00:03:42,000 --> 00:03:46,000 فإنه يدفع الملوثات العضوية الثابتة وإطارات المكدس على المكدس، 64 00:03:46,000 --> 00:03:53,000 حيث إطارات المكدس هي بمثابة دعوة محددة من وظيفة. 65 00:03:53,000 --> 00:03:57,000 ومثل كومة، سيكون لديك دائما للعودة 66 00:03:57,000 --> 00:04:03,000 استدعاء دالة من قبل يمكنك الحصول على أسفل إلى إطارات المكدس أقل مرة أخرى. 67 00:04:03,000 --> 00:04:08,000 لا يمكنك الحصول على دعوة الرئيسية فو شريط المكالمة والعودة إلى شريط مباشرة الرئيسي. 68 00:04:08,000 --> 00:04:14,000 انها دائما حصلت لمتابعة مكدس الصحيح وظهرت دفع. 69 00:04:14,000 --> 00:04:18,000 العمليتين، كما قلت، هي دفعة والبوب. 70 00:04:18,000 --> 00:04:20,000 تلك هي الشروط العامة. 71 00:04:20,000 --> 00:04:26,000 يجب أن نعرف دفعة والبوب ​​من حيث مداخن مهما كانت. 72 00:04:26,000 --> 00:04:28,000 سنرى طوابير هي نوع من مختلفة. 73 00:04:28,000 --> 00:04:32,000 فإنه لا يملك في الواقع مصطلح عالمي، ولكن الشد والبوب ​​عالمية للمداخن. 74 00:04:32,000 --> 00:04:34,000 وضعت للتو دفعة على المكدس. 75 00:04:34,000 --> 00:04:37,000 البوب ​​هو خلع المكدس. 76 00:04:37,000 --> 00:04:43,000 ونرى هنا لدينا لدينا كومة البنية typedef، 77 00:04:43,000 --> 00:04:46,000 لذلك لدينا شار السلاسل. ** 78 00:04:46,000 --> 00:04:51,000 لا تحصل خائفين من أي **. 79 00:04:51,000 --> 00:04:54,000 هذا هو الذهاب الى نهاية الأمر مجموعة من السلاسل 80 00:04:54,000 --> 00:04:58,000 أو مجموعة من المؤشرات إلى الأحرف، حيث 81 00:04:58,000 --> 00:05:00,000 مؤشرات إلى الأحرف تميل إلى أن تكون السلاسل. 82 00:05:00,000 --> 00:05:05,000 فإنه ليس من الضروري أن تكون السلاسل، ولكن هنا، انهم ذاهبون لتكون السلاسل. 83 00:05:05,000 --> 00:05:08,000 >> لدينا مجموعة من السلاسل. 84 00:05:08,000 --> 00:05:14,000 لدينا الحجم والتي تمثل العديد من العناصر كيف حاليا على المكدس، 85 00:05:14,000 --> 00:05:19,000 ثم لدينا القدرة، وهو كيف يمكن أن يكون العديد من العناصر في بنية تخزين العناصر. 86 00:05:19,000 --> 00:05:22,000 يجب قدرة تبدأ كشيء أكبر من 1، 87 00:05:22,000 --> 00:05:27,000 ولكن حجم سوف تبدأ ك 0. 88 00:05:27,000 --> 00:05:36,000 الآن، وهناك أساسا ثلاث طرق مختلفة يمكن ان يخطر لك كومة. 89 00:05:36,000 --> 00:05:39,000 حسنا، ربما يكون هناك أكثر من ذلك، ولكن هي الطرق الرئيسيتين 90 00:05:39,000 --> 00:05:43,000 يمكنك تنفيذ ذلك باستخدام مجموعة، أو يمكنك تنفيذ ذلك باستخدام قائمة مرتبطة. 91 00:05:43,000 --> 00:05:48,000 القوائم المرتبطة هي نوع من تافهة لجعل أكوام من. 92 00:05:48,000 --> 00:05:51,000 فمن السهل جدا لجعل كومة باستخدام قوائم مرتبط، 93 00:05:51,000 --> 00:05:55,000 حتى هنا، ونحن في طريقنا لجعل كومة باستخدام المصفوفات، 94 00:05:55,000 --> 00:05:59,000 ثم استخدام المصفوفات، وهناك أيضا اثنين من الطرق التي يمكنك التفكير في الامر. 95 00:05:59,000 --> 00:06:01,000 من قبل، عندما قلت لدينا القدرة على المكدس، 96 00:06:01,000 --> 00:06:04,000 حتى نتمكن من احتواء عنصر في بنية تخزين العناصر. 97 00:06:04,000 --> 00:06:09,000 >> طريقة واحدة يمكن أن يحدث هو بمجرد تصل إلى 10 عناصر، ثم الانتهاء من ذلك. 98 00:06:09,000 --> 00:06:13,000 هل يمكن أن نعرف أن هناك حدا أعلى من 10 أشياء في العالم 99 00:06:13,000 --> 00:06:16,000 عليك أبدا أن لديها أكثر من 10 أشياء على الكدسة، 100 00:06:16,000 --> 00:06:20,000 وفي هذه الحالة هل يمكن أن يكون الحد الأعلى لحجم كومة الخاص بك. 101 00:06:20,000 --> 00:06:23,000 أو هل يمكن أن يكون غير محدود أن الكدسة، 102 00:06:23,000 --> 00:06:27,000 ولكن إذا كنت تفعل مجموعة، وهذا يعني أن في كل مرة كنت أصاب 10 عناصر، 103 00:06:27,000 --> 00:06:29,000 ثم وأنت تسير لدينا ليصل إلى 20 عنصرا، وعندما ضرب 20 عنصرا، 104 00:06:29,000 --> 00:06:33,000 وأنت تسير لدينا لتنمو مجموعة الخاصة بك إلى 30 عناصر أو عناصر 40. 105 00:06:33,000 --> 00:06:37,000 كنت بحاجة الى الذهاب الى زيادة قدرة، وهذا ما نحن بصدد القيام به هنا. 106 00:06:37,000 --> 00:06:40,000 في كل مرة نصل إلى الحد الأقصى لحجم كومة لدينا، 107 00:06:40,000 --> 00:06:46,000 عندما ندفع شيئا آخر على، نحن بحاجة الى الذهاب الى زيادة القدرات. 108 00:06:46,000 --> 00:06:50,000 هنا، لقد أعلنا دفعة ودفعة BOOL (تشار * شارع). 109 00:06:50,000 --> 00:06:54,000 * شار شارع عبارة عن سلسلة أننا دفع إلى المكدس، 110 00:06:54,000 --> 00:06:58,000 ويقول BOOL فقط ما إذا كنا نجحت أو فشلت. 111 00:06:58,000 --> 00:07:00,000 >> كيف يمكننا أن تفشل؟ 112 00:07:00,000 --> 00:07:04,000 ما هو الظرف الوحيد الذي يمكن ان يخطر لك 113 00:07:04,000 --> 00:07:07,000 حيث سنكون في حاجة إلى عودة كاذبة؟ 114 00:07:07,000 --> 00:07:09,000 نعم. 115 00:07:09,000 --> 00:07:12,000 [طالب] إذا كان كاملا ونحن باستخدام تنفيذ يحدها. 116 00:07:12,000 --> 00:07:17,000 نعم، إذا كيف نحدد-أجاب 117 00:07:17,000 --> 00:07:23,000 اذا كان كاملا ونحن باستخدام تنفيذ يحدها. 118 00:07:23,000 --> 00:07:26,000 ثم سوف نعود بالتأكيد كاذبة. 119 00:07:26,000 --> 00:07:31,000 بمجرد أن تصل إلى 10 في مجموعة الأشياء، ونحن لا يمكن احتواء 11، لذلك نحن عودة كاذبة. 120 00:07:31,000 --> 00:07:32,000 ما إذا كان غير محدود على ما تريد؟ نعم. 121 00:07:32,000 --> 00:07:38,000 إذا لم تتمكن من توسيع مجموعة لسبب ما. 122 00:07:38,000 --> 00:07:43,000 نعم، حتى الذاكرة هو مورد محدود، 123 00:07:43,000 --> 00:07:51,000 وفي نهاية المطاف، إذا كنا ابقاء الامور دفع إلى المكدس مرارا وتكرارا، 124 00:07:51,000 --> 00:07:54,000 ونحن في طريقنا لمحاولة تخصيص أكبر مجموعة لتناسب 125 00:07:54,000 --> 00:07:59,000 وسعة أكبر، وmalloc أو أيا كان نستخدمه هو الذهاب الى عودة كاذبة. 126 00:07:59,000 --> 00:08:02,000 حسنا، سوف malloc العودة فارغة. 127 00:08:02,000 --> 00:08:05,000 >> تذكر، في كل مرة واحدة من أي وقت مضى استدعاء malloc، يجب ان تكون التحقق لمعرفة ما إذا كان 128 00:08:05,000 --> 00:08:12,000 ترجع فارغة أو آخر هو أن خصم صحة. 129 00:08:12,000 --> 00:08:17,000 لأننا نريد أن يكون هناك كومة غير محدود، 130 00:08:17,000 --> 00:08:21,000 الحالة الوحيدة ونحن في طريقنا إلى أن العودة هي كاذبة إذا حاولنا 131 00:08:21,000 --> 00:08:26,000 زيادة قدرة وmalloc أو أيا كان إرجاع false. 132 00:08:26,000 --> 00:08:30,000 ثم يأخذ بدون وسائط البوب، 133 00:08:30,000 --> 00:08:37,000 وتقوم بإرجاع السلسلة التي يتم على الجزء العلوي من المكدس. 134 00:08:37,000 --> 00:08:41,000 كان آخرها دفع مهما في بنية تخزين العناصر هو ما يعود البوب، 135 00:08:41,000 --> 00:08:44,000 ويزيل أيضا من المكدس. 136 00:08:44,000 --> 00:08:50,000 وتلاحظ أن تقوم بإرجاع فارغة إذا كان هناك أي شيء على المكدس. 137 00:08:50,000 --> 00:08:53,000 فمن الممكن دائما أن مكدس فارغ. 138 00:08:53,000 --> 00:08:55,000 في جاوة، إذا كنت تستخدم لذلك، أو لغات أخرى، 139 00:08:55,000 --> 00:09:01,000 قد تحاول البوب ​​من المجموعة الفارغة تسبب استثناء أو شيء. 140 00:09:01,000 --> 00:09:09,000 >> ولكن في C، فارغة هو نوع من الكثير من الحالات كيفية التعامل مع هذه المشاكل. 141 00:09:09,000 --> 00:09:13,000 العودة فارغة هو كيف ونحن في طريقنا للدلالة على أن مكدس فارغ. 142 00:09:13,000 --> 00:09:16,000 لقد قدمنا ​​التعليمات البرمجية التي سيتم اختبار وظيفة مكدس الخاص بك، 143 00:09:16,000 --> 00:09:19,000 ودفع تنفيذ البوب. 144 00:09:19,000 --> 00:09:23,000 وهذا لن يكون هناك الكثير من التعليمات البرمجية. 145 00:09:23,000 --> 00:09:40,000 I-الإرادة في الواقع، قبل ان نفعل ذلك، تلميح، تلميح- 146 00:09:40,000 --> 00:09:44,000 إذا كنت لم يطلعوا عليه، malloc ليست وظيفة فقط 147 00:09:44,000 --> 00:09:47,000 أن يخصص الذاكرة على الكومة لك. 148 00:09:47,000 --> 00:09:51,000 هناك عائلة مكونة من وظائف alloc. 149 00:09:51,000 --> 00:09:53,000 الأول هو malloc، والتي كنت تستخدم ل. 150 00:09:53,000 --> 00:09:56,000 ثم هناك calloc، الذي يفعل الشيء نفسه malloc، 151 00:09:56,000 --> 00:09:59,000 ولكن سيكون من الصفر كل شيء بالنسبة لك. 152 00:09:59,000 --> 00:10:04,000 إذا كنت من أي وقت مضى كنت أريد كل شيء لتعيين إلى فارغة بعد mallocing شيء 153 00:10:04,000 --> 00:10:06,000 يجب أن كنت قد استخدمت فقط calloc في المقام الأول بدلا من الكتابة 154 00:10:06,000 --> 00:10:09,000 لحلقة من الصفر إلى كتلة كاملة من الذاكرة. 155 00:10:09,000 --> 00:10:15,000 >> Realloc مثل malloc و لديه الكثير من الحالات الخاصة، 156 00:10:15,000 --> 00:10:19,000 ولكن أساسا ما يفعله هو realloc 157 00:10:19,000 --> 00:10:24,000 يستغرق مؤشر إلى أنه تم بالفعل تخصيص. 158 00:10:24,000 --> 00:10:27,000 Realloc هي وظيفة تريد أن الاهتمام هنا. 159 00:10:27,000 --> 00:10:31,000 يستغرق مؤشر إلى أنه تم بالفعل عاد من malloc. 160 00:10:31,000 --> 00:10:35,000 دعونا نقول لكم أن تطلب من malloc مؤشر من 10 بايت. 161 00:10:35,000 --> 00:10:38,000 في وقت لاحق ثم كنت أدرك كنت تريد 20 بايت، 162 00:10:38,000 --> 00:10:42,000 حتى استدعاء realloc على هذا المؤشر مع 20 بايت، 163 00:10:42,000 --> 00:10:47,000 وسوف realloc نسخ تلقائيا على كل شيء لك. 164 00:10:47,000 --> 00:10:51,000 إذا كنت فقط ودعا malloc مرة أخرى، مثل ولدي كتلة من 10 بايت. 165 00:10:51,000 --> 00:10:53,000 الآن أنا بحاجة إلى كتلة من 20 بايت، 166 00:10:53,000 --> 00:10:58,000 حتى لو كنت malloc 20 بايت، ثم لا بد لي من يدويا نسخ بايت على 10 من أول شيء 167 00:10:58,000 --> 00:11:01,000 في الأمر الثاني ومن ثم فإن أول شيء مجانا. 168 00:11:01,000 --> 00:11:04,000 سوف Realloc التعامل مع هذا لك. 169 00:11:04,000 --> 00:11:11,000 >> لاحظ التوقيع سيكون * الفراغ، 170 00:11:11,000 --> 00:11:15,000 التي تعود مجرد مؤشر إلى كتلة من الذاكرة، 171 00:11:15,000 --> 00:11:17,000 ثم الفراغ * PTR. 172 00:11:17,000 --> 00:11:22,000 يمكنك التفكير في الفراغ * كمؤشر عام. 173 00:11:22,000 --> 00:11:27,000 عموما، أنت لا تتعامل مع الفراغ *، 174 00:11:27,000 --> 00:11:30,000 لكن malloc يتم إرجاع * الفراغ، ثم انها تستخدم فقط لانه مثل 175 00:11:30,000 --> 00:11:34,000 هذه هي في طريقها فعلا لتكون شار *. 176 00:11:34,000 --> 00:11:37,000 * في الفراغ السابقة التي تم إرجاعها بواسطة malloc 177 00:11:37,000 --> 00:11:41,000 يجري الآن لتمريرها إلى realloc، ومن ثم حجم 178 00:11:41,000 --> 00:11:49,000 هو عدد وحدات البايت جديدة تريد تخصيص، لذلك القدرات الجديدة. 179 00:11:49,000 --> 00:11:57,000 سأعطيك بضع دقائق، ويفعل ذلك في فضائنا. 180 00:11:57,000 --> 00:12:02,000 تبدأ مراجعة 1. 181 00:12:16,000 --> 00:12:21,000 سأتوقف عن نأمل لكم بعد ما يكفي من الوقت لتنفيذ الدفع، 182 00:12:21,000 --> 00:12:24,000 ثم سأعطيك استراحة أخرى للقيام البوب. 183 00:12:24,000 --> 00:12:27,000 ولكنها في الحقيقة ليست هذا الرمز كثيرا في كل شيء. 184 00:12:27,000 --> 00:12:35,000 الأكثر متاحة على الارجح توسيع الاشياء، وتوسيع القدرات. 185 00:12:35,000 --> 00:12:39,000 حسنا، لا الضغط الذي يتعين القيام به تماما، 186 00:12:39,000 --> 00:12:47,000 ولكن طالما كنت تشعر أنك على الطريق الصحيح، وهذا جيد. 187 00:12:47,000 --> 00:12:53,000 >> هل لديها أي رمز أنها تشعر بالراحة معي سحب ما يصل؟ 188 00:12:53,000 --> 00:12:59,000 نعم، وأنا، ولكن هل لديها أي رمز أستطيع سحب ما يصل؟ 189 00:12:59,000 --> 00:13:05,000 حسنا، يمكن أن تبدأ، حفظه، كل ما هو؟ 190 00:13:05,000 --> 00:13:09,000 أنسى دائما أن الخطوة. 191 00:13:09,000 --> 00:13:15,000 حسنا، والنظر في الدفع، 192 00:13:15,000 --> 00:13:18,000 تريد أن شرح التعليمات البرمجية؟ 193 00:13:18,000 --> 00:13:24,000 [طالب] أولا وقبل كل شيء، الأول زيادة حجم. 194 00:13:24,000 --> 00:13:28,000 زيادة I اعتقد ربما ينبغي لي أن يكون هذا، على أي حال، وحجم، 195 00:13:28,000 --> 00:13:31,000 وأرى ما اذا كان أقل من القدرات. 196 00:13:31,000 --> 00:13:36,000 وإذا كان أقل من القدرات، وأود أن أضيف إلى الصفيف أن لدينا بالفعل. 197 00:13:36,000 --> 00:13:42,000 وإذا لم تكن كذلك، I مضاعفة القدرة بنسبة 2، 198 00:13:42,000 --> 00:13:50,000 وأنا إعادة تخصيص مجموعة السلاسل إلى شيء بحجم أكبر قدرة الآن. 199 00:13:50,000 --> 00:13:55,000 ثم اذا فشل ذلك، وأنا أقول للمستخدم وعودة كاذبة، 200 00:13:55,000 --> 00:14:04,000 وإذا كان على ما يرام، ثم وضع I السلسلة في نقطة جديدة. 201 00:14:04,000 --> 00:14:07,000 >> [روب B.] أيضا لاحظت أن كنا عامل أحادي المعامل لطيفة هنا 202 00:14:07,000 --> 00:14:09,000 لمضاعفة بنسبة 2. 203 00:14:09,000 --> 00:14:11,000 تذكر، تحول اليسار ودائما ما يكون مضروبا 2. 204 00:14:11,000 --> 00:14:15,000 وينقسم SHIFT الأيمن بنسبة 2 طالما أنك تذكر أنه يعني 205 00:14:15,000 --> 00:14:18,000 القسمة على 2 كما في صحيح مقسوما على 2. 206 00:14:18,000 --> 00:14:20,000 قد اقتطاع (أ) 1 هنا أو هناك. 207 00:14:20,000 --> 00:14:26,000 ولكن التحول الذي تركه 1 ودائما ما يكون مضروبا 2، 208 00:14:26,000 --> 00:14:32,000 إلا إذا كنت تجاوز حدود العدد الصحيح، وبعد ذلك لن يكون. 209 00:14:32,000 --> 00:14:34,000 تعليق الجانب. 210 00:14:34,000 --> 00:14:39,000 أود أن تفعل هذا لن يغير ترميز بأي شكل من الأشكال، 211 00:14:39,000 --> 00:14:48,000 ولكن أود أن تفعل شيئا مثل هذا. 212 00:14:48,000 --> 00:14:51,000 انها في الواقع هو الذهاب الى جعل لفترة أطول قليلا. 213 00:15:04,000 --> 00:15:08,000 ربما لم تكن هذه هي الحالة المثالية لإظهار هذا، 214 00:15:08,000 --> 00:15:14,000 ولكن أود أن الجزء هو داخل هذه الكتل من بين 215 00:15:14,000 --> 00:15:17,000 حسنا، إذا كان هذا يحدث إذا، ثم انا ذاهب الى القيام بشيء ما، 216 00:15:17,000 --> 00:15:19,000 ومن ثم يتم وظيفة. 217 00:15:19,000 --> 00:15:22,000 ولست بحاجة للتمرير ثم عيني على طول الطريق وظيفة 218 00:15:22,000 --> 00:15:25,000 لنرى ماذا سيحدث بعد آخر. 219 00:15:25,000 --> 00:15:27,000 يبدو الأمر وكأن هذا إذا حدث ذلك، ثم أعود للتو. 220 00:15:27,000 --> 00:15:30,000 كما أن لديها مصلحة وأضاف لطيف من كل شيء أبعد من ذلك 221 00:15:30,000 --> 00:15:33,000 والآن تحول اليسار مرة واحدة. 222 00:15:33,000 --> 00:15:40,000 لم أعد بحاجة إلى أي وقت مضى إذا كنت بالقرب من خطوط يبعث على السخرية طويلة، 223 00:15:40,000 --> 00:15:45,000 ثم يمكن تلك 4 بايت مساعدة، وأيضا ما هو أكثر من الزمن، 224 00:15:45,000 --> 00:15:48,000 وطغت أقل إذا كنت تشعر مثل-حسنا، أنا يجب أن نتذكر 225 00:15:48,000 --> 00:15:53,000 أنا حاليا في حلقة بينما داخل لآخر داخل من حلقة For. 226 00:15:53,000 --> 00:15:58,000 في أي مكان يمكنك القيام بذلك العودة فورا، وأنا نوع من مثل. 227 00:15:58,000 --> 00:16:05,000 انها اختيارية تماما وليس من المتوقع بأي شكل من الأشكال. 228 00:16:05,000 --> 00:16:12,000 >> [طالب] ينبغي أن يكون هناك حجم - في حالة فشل؟ 229 00:16:12,000 --> 00:16:19,000 ونحن هنا حالة فشل فشل في realloc، نعم ذلك. 230 00:16:19,000 --> 00:16:22,000 لاحظ كيف في حالة فشل، ويفترض، 231 00:16:22,000 --> 00:16:26,000 إلا إذا كنا الاشياء المجانية في وقت لاحق، ونحن دائما ما تفشل 232 00:16:26,000 --> 00:16:29,000 بغض النظر عن عدد المرات التي نحاول دفع شيء. 233 00:16:29,000 --> 00:16:32,000 اذا واصلنا الضغط، ونحافظ على حجم تزايد، 234 00:16:32,000 --> 00:16:36,000 على الرغم من أننا لا نضع أي شيء إلى المكدس. 235 00:16:36,000 --> 00:16:39,000 عادة نحن لا زيادة حجم حتى 236 00:16:39,000 --> 00:16:43,000 بعد أن نكون قد وضعت بنجاح على المكدس. 237 00:16:43,000 --> 00:16:50,000 ونحن نفعل ذلك، ويقول، إما هنا وهنا. 238 00:16:50,000 --> 00:16:56,000 ثم بدلا من أن تقول s.size ≤ القدرات، انها أقل من القدرات، 239 00:16:56,000 --> 00:17:01,000 فقط لأننا انتقلت حيث كان كل شيء. 240 00:17:01,000 --> 00:17:07,000 >> وتذكر أن المكان الوحيد الذي يمكن أن نعود ربما كاذبة 241 00:17:07,000 --> 00:17:14,000 هنا، حيث عاد realloc فارغة، 242 00:17:14,000 --> 00:17:19,000 وإذا كنت يحدث أن نتذكر الخطأ المعياري، 243 00:17:19,000 --> 00:17:22,000 ربما قد تفكر في هذه الحالة حيث تريد طباعة الخطأ المعياري، 244 00:17:22,000 --> 00:17:26,000 fprintf ذلك STDERR بدلا من طباعة فقط مباشرة إلى خارج القياسية. 245 00:17:26,000 --> 00:17:31,000 مرة أخرى، هذا ليس توقع، ولكن إذا كان خطأ، 246 00:17:31,000 --> 00:17:41,000 اكتب printf، فإنك قد تريد أن تجعل من الطباعة إلى خطأ قياسي بدلا من الخروج القياسية. 247 00:17:41,000 --> 00:17:44,000 >> أي شخص لديه أي شيء آخر أن نلاحظ؟ نعم. 248 00:17:44,000 --> 00:17:47,000 [طالب] هل يمكن أن يذهب أكثر من (غير مسموع)؟ 249 00:17:47,000 --> 00:17:55,000 [روب B.] نعم، binariness الفعلية منه أو فقط ما هو عليه؟ 250 00:17:55,000 --> 00:17:57,000 [طالب] لذلك أنت اضربها 2؟ 251 00:17:57,000 --> 00:17:59,000 [روب B.] نعم، أساسا. 252 00:17:59,000 --> 00:18:11,000 في الأراضي الثنائية، لدينا دائما لدينا مجموعة من الأرقام. 253 00:18:11,000 --> 00:18:22,000 تحول هذا اليسار بمقدار 1 إدراج أساسا هنا في الجانب الأيمن. 254 00:18:22,000 --> 00:18:25,000 عودة إلى ذلك، تذكر فقط أن كل شيء في ثنائي 255 00:18:25,000 --> 00:18:28,000 هو أس 2، لذلك هذا يمثل 2 إلى 0، 256 00:18:28,000 --> 00:18:30,000 هذه 2 إلى 1، 2 إلى هذا 2. 257 00:18:30,000 --> 00:18:33,000 عن طريق إدراج 0 إلى الجانب الأيمن الآن، ونحن فقط تحول كل شيء انتهى. 258 00:18:33,000 --> 00:18:38,000 ما كان ليكون 2 إلى 0 هو الآن 2 إلى 1، يتم 2 إلى 2. 259 00:18:38,000 --> 00:18:41,000 الجانب الأيمن أننا إدراج 260 00:18:41,000 --> 00:18:44,000 يجري بالضرورة أن يكون 0، 261 00:18:44,000 --> 00:18:46,000 الأمر الذي يجعل الشعور. 262 00:18:46,000 --> 00:18:49,000 إذا كنت من أي وقت مضى مضاعفة عدد بنسبة 2، انها ليست الذهاب الى نهاية المطاف ونيف، 263 00:18:49,000 --> 00:18:54,000 لذلك ينبغي على 2 إلى المكان 0 كن 0، 264 00:18:54,000 --> 00:18:59,000 وهذا ما حذر I نحو نصف قبل هو إذا لم يحدث التحول 265 00:18:59,000 --> 00:19:01,000 ما وراء عدد البتات في عدد صحيح، 266 00:19:01,000 --> 00:19:04,000 ثم هذا 1 هل الذهاب الى نهاية المطاف الخروج. 267 00:19:04,000 --> 00:19:10,000 هذا هو مصدر القلق الوحيد إذا كنت يحدث ليكون التعامل مع قدرات كبيرة حقا. 268 00:19:10,000 --> 00:19:15,000 ولكن في تلك المرحلة، ثم كنت تتعامل مع مجموعة من المليارات من الأشياء، 269 00:19:15,000 --> 00:19:25,000 والتي قد لا يصلح في الذاكرة على أي حال. 270 00:19:25,000 --> 00:19:31,000 >> الآن يمكن أن نحصل على موسيقى البوب، التي هي أكثر سهولة. 271 00:19:31,000 --> 00:19:36,000 هل يمكن أن تفعل ذلك إذا كنت تحب يحدث لموسيقى البوب ​​في مجمله مجموعة، 272 00:19:36,000 --> 00:19:38,000 والآن أنت بنصف طاقتها مرة أخرى. 273 00:19:38,000 --> 00:19:42,000 هل يمكن أن realloc لتقليص مقدار الذاكرة لديك، 274 00:19:42,000 --> 00:19:47,000 ولكن لم يكن لديك ما يدعو للقلق حول ذلك، وبالتالي فإن حالة realloc فقط ستكون 275 00:19:47,000 --> 00:19:50,000 تزايد الذاكرة، لم تقلص الذاكرة، 276 00:19:50,000 --> 00:19:59,000 الذي هو الذهاب الى جعل سوبر البوب ​​سهلة. 277 00:19:59,000 --> 00:20:02,000 طوابير الآن، والتي ستكون مثل المداخن، 278 00:20:02,000 --> 00:20:06,000 ولكن يتم عكس الترتيب الذي كنت تأخذ الأمور. 279 00:20:06,000 --> 00:20:10,000 المثال تنميط لقائمة انتظار هو خط، 280 00:20:10,000 --> 00:20:12,000 لذا أعتقد لو كنت الإنجليزية، لكنت أجيبه 281 00:20:12,000 --> 00:20:17,000 مثال تنميط لقائمة انتظار هو قائمة الانتظار. 282 00:20:17,000 --> 00:20:22,000 ذلك مثل الخط، إذا كنت أول شخص في الخط، 283 00:20:22,000 --> 00:20:24,000 كنت تتوقع أن تكون أول شخص من على خط المرمى. 284 00:20:24,000 --> 00:20:31,000 إذا كنت آخر شخص في خط، وأنت تسير أن يكون الشخص الأخير خدمتها. 285 00:20:31,000 --> 00:20:35,000 ندعو هذا النمط FIFO، LIFO في حين كان مكدس النمط. 286 00:20:35,000 --> 00:20:40,000 هذه الكلمات هي حقوق عالمية جدا. 287 00:20:40,000 --> 00:20:46,000 >> مثل المداخن وعلى عكس المصفوفات، قوائم الانتظار عادة لا تسمح بالوصول إلى عناصر في الوسط. 288 00:20:46,000 --> 00:20:50,000 هنا، كومة، لدينا دفعة والبوب. 289 00:20:50,000 --> 00:20:54,000 هنا، ونحن قد يحدث لإدراج بقائمة الانتظار ودعا لهم dequeue. 290 00:20:54,000 --> 00:20:58,000 لقد سمعت أيضا لهم ودعا التحول unshift. 291 00:20:58,000 --> 00:21:02,000 لقد سمعت الناس يقولون دفعة والبوب ​​لتنطبق أيضا على قوائم الانتظار. 292 00:21:02,000 --> 00:21:05,000 لقد سمعت إدراج أو إزالة، 293 00:21:05,000 --> 00:21:11,000 دفع ذلك والبوب، إذا كنت تتحدث عن المداخن، وكنت تدفع ظهرت. 294 00:21:11,000 --> 00:21:16,000 إذا كنت تتحدث عن قوائم الانتظار، هل يمكن اختيار الكلمات التي ترغب في استخدام 295 00:21:16,000 --> 00:21:23,000 لإزالة والإدراج، وليس هناك توافق في الآراء بشأن ما ينبغي أن يسمى. 296 00:21:23,000 --> 00:21:27,000 ولكن هنا، لدينا إدراج بقائمة الانتظار وdequeue. 297 00:21:27,000 --> 00:21:37,000 الآن، يبدو البنية متطابقة تقريبا إلى البنية المكدس. 298 00:21:37,000 --> 00:21:40,000 ولكن علينا أن تتبع الرأس. 299 00:21:40,000 --> 00:21:44,000 واعتقد انه يقول هنا إلى أسفل، ولكن لماذا نحن بحاجة إلى الرأس؟ 300 00:21:53,000 --> 00:21:57,000 النماذج متطابقة أساسا لدفع والبوب. 301 00:21:57,000 --> 00:21:59,000 يمكنك التفكير في الأمر على النحو دفعة والبوب. 302 00:21:59,000 --> 00:22:08,000 والفرق الوحيد هو البوب ​​تعود-بدلا من الماضي، انها تعود أول. 303 00:22:08,000 --> 00:22:12,000 2، 1، 3، 4، أو شيء من هذا. 304 00:22:12,000 --> 00:22:14,000 وهنا البداية. 305 00:22:14,000 --> 00:22:17,000 لدينا قائمة انتظار ممتلئ تماما، ولذلك لا يوجد أربعة عناصر فيه. 306 00:22:17,000 --> 00:22:21,000 نهاية قائمة الانتظار لدينا حاليا 2، 307 00:22:21,000 --> 00:22:24,000 والآن نذهب إلى إدراج شيء آخر. 308 00:22:24,000 --> 00:22:29,000 >> عندما نريد أن إدراج شيء آخر، ما قمنا به لإصدار مكدس 309 00:22:29,000 --> 00:22:36,000 تم تمديده نحن لدينا كتلة من الذاكرة. 310 00:22:36,000 --> 00:22:40,000 ما هي المشكلة في ذلك؟ 311 00:22:40,000 --> 00:22:45,000 [طالب] يمكنك نقل 2. 312 00:22:45,000 --> 00:22:51,000 ما قلت من قبل عن نهاية قائمة الانتظار، 313 00:22:51,000 --> 00:22:57,000 هذا لا معنى له أن نبدأ في 1، 314 00:22:57,000 --> 00:23:01,000 ثم نريد أن dequeue 1، ثم dequeue 3، ثم dequeue 4، 315 00:23:01,000 --> 00:23:05,000 ثم dequeue 2، ثم dequeue هذا واحد. 316 00:23:05,000 --> 00:23:08,000 لا يمكننا استخدام realloc الآن، 317 00:23:08,000 --> 00:23:11,000 أو على أقل تقدير، لديك لاستخدام realloc بطريقة مختلفة. 318 00:23:11,000 --> 00:23:15,000 ولكن يجب عليك ربما لا مجرد استخدام realloc. 319 00:23:15,000 --> 00:23:18,000 كنت ستكون لدينا لنسخ الذاكرة الخاصة بك يدويا. 320 00:23:18,000 --> 00:23:21,000 >> هناك نوعان من المهام لنسخ الذاكرة. 321 00:23:21,000 --> 00:23:25,000 وهناك memcopy memmove. 322 00:23:25,000 --> 00:23:29,000 أنا أقرأ حاليا على صفحات الرجل لمعرفة أي واحد كنت تريد الذهاب الى استخدامها. 323 00:23:29,000 --> 00:23:35,000 حسنا، memcopy، والفرق هو 324 00:23:35,000 --> 00:23:38,000 أن memcopy وmemmove، واحد يعالج القضية بشكل صحيح 325 00:23:38,000 --> 00:23:41,000 أين أنت نسخ إلى المنطقة التي يحدث أن تتداخل المنطقة 326 00:23:41,000 --> 00:23:46,000 كنت نسخ من. 327 00:23:46,000 --> 00:23:50,000 Memcopy لا التعامل معها. Memmove لا. 328 00:23:50,000 --> 00:23:59,000 يمكنك التفكير في المشكلة AS- 329 00:23:59,000 --> 00:24:09,000 دعنا نقول أريد أن نسخ هذا الرجل، 330 00:24:09,000 --> 00:24:13,000 هذه الأربعة لهذا الرجل انتهى. 331 00:24:13,000 --> 00:24:16,000 في النهاية، ما ينبغي أن تبدو وكأنها مجموعة 332 00:24:16,000 --> 00:24:26,000 بعد النسخة 2، 1، 2، 1، 3، 4، ومن ثم بعض الاشياء في نهاية المطاف. 333 00:24:26,000 --> 00:24:29,000 ولكن هذا يعتمد على الترتيب الذي نسخ في الواقع، 334 00:24:29,000 --> 00:24:32,000 لأنه إذا كنا لا نعتبر حقيقة أن المنطقة نحن في نسخ 335 00:24:32,000 --> 00:24:35,000 التداخل واحد ونحن نسخ من، 336 00:24:35,000 --> 00:24:46,000 ثم قد نفعل مثل بداية هنا، نسخ 2 في المكان الذي تريد أن تذهب، 337 00:24:46,000 --> 00:24:52,000 ثم الانتقال لدينا مؤشرات إلى الأمام. 338 00:24:52,000 --> 00:24:56,000 >> الآن ونحن في طريقنا إلى هنا وهنا، والآن نريد أن نسخ 339 00:24:56,000 --> 00:25:04,000 هذا الرجل أكثر من هذا الرجل والتحرك إلى الأمام مؤشرات لدينا. 340 00:25:04,000 --> 00:25:07,000 ما نحن ذاهبون الى نهاية المطاف الحصول على 2، 1، 2، 1، 2، 1 341 00:25:07,000 --> 00:25:10,000 بدلا من 2 الاقتضاء، 1، 2، 1، 3، 4 لأن 342 00:25:10,000 --> 00:25:15,000 تجاهلت 2، 1 في 3 الأصلية، 4. 343 00:25:15,000 --> 00:25:19,000 Memmove يعالج بشكل صحيح أن. 344 00:25:19,000 --> 00:25:23,000 في هذه الحالة، وأساسا دائما مجرد استخدام memmove 345 00:25:23,000 --> 00:25:26,000 لأنه يعالج بشكل صحيح. 346 00:25:26,000 --> 00:25:29,000 فإنه عادة لا تؤدي أي أسوأ من ذلك. 347 00:25:29,000 --> 00:25:32,000 والفكرة هي بدلا من البدء من البداية ونسخ بهذه الطريقة 348 00:25:32,000 --> 00:25:35,000 كما فعلنا هنا فقط، ويبدأ من نهاية ونسخة في، 349 00:25:35,000 --> 00:25:38,000 وفي هذه الحالة، لا يمكن ان يكون مشكلة. 350 00:25:38,000 --> 00:25:40,000 هناك لا يضيع الأداء. 351 00:25:40,000 --> 00:25:47,000 دائما استخدام memmove. تقلق أبدا memcopy. 352 00:25:47,000 --> 00:25:51,000 وحيث ان كنت ستكون لدينا لmemmove بشكل منفصل 353 00:25:51,000 --> 00:26:01,000 الجزء ملفوفة حول من قائمة الانتظار، الخاص بك. 354 00:26:01,000 --> 00:26:04,000 لا تقلق إذا لم تفعل تماما. 355 00:26:04,000 --> 00:26:10,000 هذا هو أكثر صعوبة من، كومة دفعة والبوب. 356 00:26:10,000 --> 00:26:15,000 >> أي شخص يحصل أي رمز نتمكن من العمل مع؟ 357 00:26:15,000 --> 00:26:21,000 حتى لو غير مكتملة تماما؟ 358 00:26:21,000 --> 00:26:23,000 [طالب] نعم، انها غير مكتملة تماما، وإن كان. 359 00:26:23,000 --> 00:26:27,000 غير كاملة تماما على ما يرام ما دمنا-يمكنك حفظ مراجعة؟ 360 00:26:27,000 --> 00:26:32,000 أنسى أنه في كل مرة واحدة. 361 00:26:32,000 --> 00:26:39,000 حسنا، وتجاهل ما يحدث عندما نحتاج لتغيير حجم الأشياء. 362 00:26:39,000 --> 00:26:42,000 تجاهل تماما تغيير الحجم. 363 00:26:42,000 --> 00:26:49,000 شرح هذا الرمز. 364 00:26:49,000 --> 00:26:54,000 أنا أولا وقبل كل فحص إذا كان حجم أقل من النسخة الأولى من كل 365 00:26:54,000 --> 00:27:01,000 ثم بعد ذلك، وأنا إدراج-I + حجم الرأس تأخذ، 366 00:27:01,000 --> 00:27:05,000 وأنا تأكد من أنه يلتف حول قدرة مجموعة، 367 00:27:05,000 --> 00:27:08,000 وأنا أدخل في سلسلة جديدة هذا الموقف. 368 00:27:08,000 --> 00:27:12,000 ثم I زيادة حجم والعودة الحقيقية. 369 00:27:12,000 --> 00:27:22,000 >> [روب B.] هذا هو بالتأكيد واحدة من تلك الحالات التي كنت تريد الذهاب الى تستخدم وزارة الدفاع. 370 00:27:22,000 --> 00:27:25,000 أي نوع من الحالة حيث قمت التفاف حولها، وإذا كنت تعتقد أن التفاف حولها، 371 00:27:25,000 --> 00:27:29,000 يجب أن تكون فورية الفكر وزارة الدفاع. 372 00:27:29,000 --> 00:27:36,000 كما التحسين السريع / يصبح لديك رمز سطر واحد أقصر، 373 00:27:36,000 --> 00:27:42,000 لاحظت أن السطر التالي مباشرة هذا واحد 374 00:27:42,000 --> 00:27:53,000 هو حجم فقط + +، بحيث يمكنك دمج ذلك في هذا الخط، وحجم + +. 375 00:27:53,000 --> 00:27:58,000 إلى هنا الآن، لدينا حالة 376 00:27:58,000 --> 00:28:01,000 حيث لم يكن لدينا ما يكفي من الذاكرة، 377 00:28:01,000 --> 00:28:05,000 لذلك نحن لدينا زيادة القدرة بنسبة 2. 378 00:28:05,000 --> 00:28:09,000 اعتقد انك يمكن أن يكون لها نفس المشكلة هنا، ولكن يمكننا تجاهل عليه الآن، 379 00:28:09,000 --> 00:28:13,000 حيث إذا فشل لك لزيادة قدرتك، 380 00:28:13,000 --> 00:28:18,000 ثم كنت تريد الذهاب الى خفض قدرتك بنسبة 2 مرة أخرى. 381 00:28:18,000 --> 00:28:24,000 ملاحظة أخرى هي قصيرة مثلما يمكنك القيام به + =، 382 00:28:24,000 --> 00:28:30,000 يمكنك أيضا القيام << =. 383 00:28:30,000 --> 00:28:43,000 أي شيء تقريبا يمكن أن تذهب قبل يساوي، = +، | = و =، = <<. 384 00:28:43,000 --> 00:28:52,000 تشار * الجديد هو كتلة الجديد من الذاكرة. 385 00:28:52,000 --> 00:28:55,000 أوه، أكثر من هنا. 386 00:28:55,000 --> 00:29:02,000 >> ماذا يفكر الناس في نوع من كتلة الجديد من الذاكرة؟ 387 00:29:02,000 --> 00:29:06,000 [طالب] وينبغي أن يكون ** شار. 388 00:29:06,000 --> 00:29:12,000 التفكير في العودة إلى البنية دينا هنا حتى، 389 00:29:12,000 --> 00:29:14,000 سلاسل ما نقوم بإعادة توزيع. 390 00:29:14,000 --> 00:29:21,000 ونحن نبذل بأكمله التخزين دينامية جديدة لعناصر في قائمة الانتظار. 391 00:29:21,000 --> 00:29:25,000 ما نحن في طريقنا إلى أن تعيين إلى سلاسل الخاص بك هو ما نقوم mallocing في الوقت الراهن، 392 00:29:25,000 --> 00:29:30,000 وهكذا الجديدة ستكون ** شار. 393 00:29:30,000 --> 00:29:34,000 انها سوف تكون مجموعة من السلاسل. 394 00:29:34,000 --> 00:29:38,000 ثم ما هو الحال في ظلها ونحن في طريقنا للعودة كاذبة؟ 395 00:29:38,000 --> 00:29:41,000 [طالب] ينبغي علينا أن نفعل ل* شار؟ 396 00:29:41,000 --> 00:29:44,000 [روب B. نعم، الكلمة الطيبة. 397 00:29:44,000 --> 00:29:46,000 [طالب] ماذا كان ذلك؟ 398 00:29:46,000 --> 00:29:49,000 [روب B.] أردنا أن نقوم حجم شار * لأننا لم يعد- 399 00:29:49,000 --> 00:29:53,000 هذا من شأنه أن يكون في الواقع مشكلة كبيرة جدا لأن sizeof (تشار) سيكون 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof تشار * سيكون 4، 401 00:29:55,000 --> 00:29:58,000 لذلك الكثير من الأوقات عندما كنت تتعامل مع رجات، 402 00:29:58,000 --> 00:30:01,000 كنت تميل إلى تفلت من العقاب بسبب حجم كثافة العمليات وحجم كثافة العمليات * 403 00:30:01,000 --> 00:30:04,000 على نظام 32 بت سوف تكون نفس الشيء. 404 00:30:04,000 --> 00:30:09,000 ولكن هنا، sizeof (تشار) وsizeof (تشار *) تسير الآن أن يكون نفس الشيء. 405 00:30:09,000 --> 00:30:15,000 >> ما هو الظرف الذي كنا عودة كاذبة؟ 406 00:30:15,000 --> 00:30:17,000 [طالب] جديد فارغ. 407 00:30:17,000 --> 00:30:23,000 نعم، إذا جديدة فارغة، نعود كاذبة، 408 00:30:23,000 --> 00:30:34,000 وانا ذاهب لرمي أسفل هنا، 409 00:30:34,000 --> 00:30:37,000 [طالب] [غير مسموع] 410 00:30:37,000 --> 00:30:39,000 [روب B.] نعم، هذا على ما يرام. 411 00:30:39,000 --> 00:30:46,000 هل يمكن أن تفعل أي قدرة أو 2 مرات التحول القدرة 1 و قم بتعيين فقط عليه هنا أو أيا كان. 412 00:30:46,000 --> 00:30:52,000 سوف نفعل ذلك كما كنا عليه. 413 00:30:52,000 --> 00:30:56,000 القدرة = 1 >>. 414 00:30:56,000 --> 00:31:08,000 وكنت أبدا ستكون لدينا ما يدعو للقلق حول فقدان مكان ال 1 في 415 00:31:08,000 --> 00:31:12,000 لأنك تركت تحولت بحلول 1، لذلك مكان ال 1 هو بالضرورة 0، 416 00:31:12,000 --> 00:31:16,000 تحويل الحق في ذلك في موعد أقصاه 1، وأنت لا تزال جارية ليكون على ما يرام. 417 00:31:16,000 --> 00:31:19,000 [طالب] هل تحتاج إلى القيام بذلك قبل العودة؟ 418 00:31:19,000 --> 00:31:29,000 [روب B.] نعم، هذا يجعل الاطلاق لا معنى له. 419 00:31:29,000 --> 00:31:36,000 >> نفترض الآن ونحن في طريقنا إلى العودة الحقيقية في نهاية المطاف إلى نهاية. 420 00:31:36,000 --> 00:31:39,000 الطريق ونحن في طريقنا للقيام بهذه memmoves، 421 00:31:39,000 --> 00:31:45,000 نحن بحاجة إلى أن نكون حذرين مع كيف نفعل لهم. 422 00:31:45,000 --> 00:31:50,000 هل لديها أي اقتراحات لكيفية القيام بها؟ 423 00:32:17,000 --> 00:32:21,000 وهنا بدايتنا. 424 00:32:21,000 --> 00:32:28,000 حتما، نحن نريد أن تبدأ في بداية مرة أخرى 425 00:32:28,000 --> 00:32:35,000 أشياء نسخة من هناك و، 1، 3، 4، 2. 426 00:32:35,000 --> 00:32:41,000 كيف يمكنك أن تفعل ذلك؟ 427 00:32:41,000 --> 00:32:52,000 أولا، لا بد لي من إلقاء نظرة على الصفحة رجل لmemmove مرة أخرى. 428 00:32:52,000 --> 00:32:57,000 Memmove، ترتيب الحجج المهم دائما. 429 00:32:57,000 --> 00:33:01,000 نريد وجهتنا الأولى والثانية المصدر والثالث الحجم. 430 00:33:01,000 --> 00:33:06,000 هناك الكثير من الوظائف التي عكس المصدر والوجهة. 431 00:33:06,000 --> 00:33:11,000 المقصد، يميل إلى أن يكون مصدر ثابت إلى حد ما. 432 00:33:17,000 --> 00:33:21,000 الخطوة، ما هو العودة؟ 433 00:33:21,000 --> 00:33:27,000 تقوم بإرجاع المؤشر إلى الوجهة، لأي سبب من الأسباب التي قد ترغب. 434 00:33:27,000 --> 00:33:32,000 لا أستطيع قراءتها صور، لكننا نريد للانتقال إلى وجهتنا. 435 00:33:32,000 --> 00:33:35,000 >> ما وجهتنا ستكون؟ 436 00:33:35,000 --> 00:33:37,000 [طالب] جديدة. 437 00:33:37,000 --> 00:33:39,000 [روب B.] نعم، وأين نحن من النسخ؟ 438 00:33:39,000 --> 00:33:43,000 أول شيء هو أننا نسخ هذا 1 و 3 و 4. 439 00:33:43,000 --> 00:33:50,000 ما هو هذا، 1، 3، 4. 440 00:33:50,000 --> 00:33:55,000 ما هو عنوان هذا 1؟ 441 00:33:55,000 --> 00:33:58,000 ما هو عنوان أن 1؟ 442 00:33:58,000 --> 00:34:01,000 [طالب] [غير مسموع] 443 00:34:01,000 --> 00:34:03,000 [روب B.] + رئيس عنوان العنصر الأول. 444 00:34:03,000 --> 00:34:05,000 كيف نحصل على العنصر الأول في الصفيف؟ 445 00:34:05,000 --> 00:34:10,000 [طالب] قائمة الانتظار. 446 00:34:10,000 --> 00:34:15,000 [روب B. نعم، q.strings. 447 00:34:15,000 --> 00:34:20,000 تذكر، هنا، رأسنا هو 1. 448 00:34:20,000 --> 00:34:24,000 الرتق. أنا فقط أعتقد انها سحرية- 449 00:34:24,000 --> 00:34:29,000 هنا، لدينا رئيس هو 1. انا ذاهب الى تغيير لون بلدي أيضا. 450 00:34:29,000 --> 00:34:36,000 وهنا السلاسل. 451 00:34:36,000 --> 00:34:41,000 هذا، يمكن أن نكتب إما كما فعلنا أكثر من هنا 452 00:34:41,000 --> 00:34:43,000 + مع رؤساء q.strings. 453 00:34:43,000 --> 00:34:51,000 هناك الكثير من الناس هنا أيضا وq.strings [رئيس]. 454 00:34:51,000 --> 00:34:55,000 هذا ليس حقا أي أقل كفاءة. 455 00:34:55,000 --> 00:34:58,000 قد تعتقد بأنها تقوم عليه ومن ثم يعتبر إلغاء مرجعية الحصول على عنوان، 456 00:34:58,000 --> 00:35:04,000 لكن المترجم هو الذهاب الى ترجمتها الى ما كان لدينا قبل أي حال، q.strings + الرأس. 457 00:35:04,000 --> 00:35:06,000 وفي كلتا الحالتين كنت ترغب في التفكير في الأمر. 458 00:35:06,000 --> 00:35:11,000 >> وعدد بايت نريد أن نسخ؟ 459 00:35:11,000 --> 00:35:15,000 [طالب] القدرات - الرأس. 460 00:35:15,000 --> 00:35:18,000 القدرة - الرأس. 461 00:35:18,000 --> 00:35:21,000 ومن ثم يمكن أن تكتب دائما مثالا 462 00:35:21,000 --> 00:35:23,000 لمعرفة ما اذا كان هذا صحيح. 463 00:35:23,000 --> 00:35:26,000 [طالب] لا بد من مقسوما على 2 ثم. 464 00:35:26,000 --> 00:35:30,000 نعم، لذلك أعتقد أننا يمكن أن تستخدم الحجم. 465 00:35:30,000 --> 00:35:35,000 لا يزال لدينا حجم كونها- 466 00:35:35,000 --> 00:35:39,000 باستخدام حجم، لدينا حجم يساوي 4. 467 00:35:39,000 --> 00:35:42,000 حجمنا هو 4. رؤوسنا هو 1. 468 00:35:42,000 --> 00:35:46,000 نحن نريد لنسخ هذه العناصر 3. 469 00:35:46,000 --> 00:35:54,000 هذا هو التعقل تأكد من أن حجم - رئيس هو 3 بشكل صحيح. 470 00:35:54,000 --> 00:35:58,000 ويعود هنا، كما قلنا من قبل، 471 00:35:58,000 --> 00:36:00,000 إذا كنا القدرات، فسيتعين علينا اللجوء لتقسيم بنسبة 2 472 00:36:00,000 --> 00:36:04,000 لأننا قد نمت بالفعل قدرتنا، وذلك بدلا، ونحن في طريقنا للاستخدام الحجم. 473 00:36:11,000 --> 00:36:13,000 أن نسخ هذا الجزء. 474 00:36:13,000 --> 00:36:18,000 الآن، ونحن بحاجة لنسخ جزء آخر، الجزء الذي تبقى من البداية. 475 00:36:18,000 --> 00:36:28,000 >> وهذا سوف memmove إلى ما هو الموقف؟ 476 00:36:28,000 --> 00:36:32,000 [طالب] حجم بلس - الرأس. 477 00:36:32,000 --> 00:36:38,000 نعم، لذلك نحن بالفعل قد نسخت من حيث الحجم - بايت الرأس، 478 00:36:38,000 --> 00:36:43,000 وذلك حيث نريد لنسخ بايت المتبقية هو جديد 479 00:36:43,000 --> 00:36:48,000 ومن ثم حجم ناقص بشكل جيد، وعدد وحدات البايت الانتهاء من نسخ أننا بالفعل. 480 00:36:48,000 --> 00:36:52,000 ثم أين نحن من النسخ؟ 481 00:36:52,000 --> 00:36:54,000 [طالب] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [روب B. نعم، q.strings. 483 00:36:56,000 --> 00:37:02,000 يمكن أن نفعل أي وq.strings [0]. 484 00:37:02,000 --> 00:37:05,000 هذا هو أقل شيوعا بكثير من هذا. 485 00:37:05,000 --> 00:37:14,000 إذا كان يحدث لمجرد أن يكون 0، ثم عليك أن نميل إلى النظر إلى q.strings. 486 00:37:14,000 --> 00:37:16,000 حيث ان نسخ من نحن. 487 00:37:16,000 --> 00:37:18,000 كم بايت لا لم يقم نحن لنسخ؟ >> [طالب] 10. 488 00:37:18,000 --> 00:37:20,000 الحق. 489 00:37:20,000 --> 00:37:25,000 [طالب] هل علينا أن تتضاعف 5 - 10 يوقت حجم بايت أو شيء؟ 490 00:37:25,000 --> 00:37:30,000 نعم، لذلك هذا هو بالضبط ما فيها، ونحن نسخ؟ 491 00:37:30,000 --> 00:37:32,000 [طالب] [غير مسموع] 492 00:37:32,000 --> 00:37:34,000 ما هو نوع من الشيء نحن نسخ؟ 493 00:37:34,000 --> 00:37:36,000 [طالب] [غير مسموع] 494 00:37:36,000 --> 00:37:41,000 نعم، لذلك ليالي * شار اننا نسخ، ونحن لا نعرف من أين تأتي تلك من. 495 00:37:41,000 --> 00:37:47,000 حسنا، حيث أنهم لافتا إلى، مثل السلاسل، نحن في نهاية المطاف دفع وضعها على قائمة الانتظار 496 00:37:47,000 --> 00:37:49,000 أو enqueuing على قائمة الانتظار. 497 00:37:49,000 --> 00:37:51,000 حيث تكون هذه تأتي من، ليس لدينا أي فكرة. 498 00:37:51,000 --> 00:37:56,000 نحن بحاجة فقط للحفاظ على تعقب من S * شار أنفسهم. 499 00:37:56,000 --> 00:38:00,000 نحن لا نريد لنسخ المطاطية - بايت الرأس. 500 00:38:00,000 --> 00:38:03,000 نريد أن حجم نسخ - رئيس شار ق *، 501 00:38:03,000 --> 00:38:11,000 لذلك نحن ذاهبون الى مضاعفة ذلك sizeof (تشار *). 502 00:38:11,000 --> 00:38:17,000 نفس الى هنا، رئيس * sizeof (تشار *). 503 00:38:17,000 --> 00:38:24,000 >> [طالب] وماذا عن (غير مسموع)؟ 504 00:38:24,000 --> 00:38:26,000 هذا الحق هنا؟ 505 00:38:26,000 --> 00:38:28,000 [طالب] لا، دون أن حجم - الرأس. 506 00:38:28,000 --> 00:38:30,000 [روب B.] هذا الحق هنا؟ 507 00:38:30,000 --> 00:38:32,000 مؤشر الحساب. 508 00:38:32,000 --> 00:38:35,000 كيف الحسابية المؤشر هو الذهاب إلى العمل هو 509 00:38:35,000 --> 00:38:40,000 تتكاثر تلقائيا حسب حجم من النوع الذي نتعامل معه. 510 00:38:40,000 --> 00:38:46,000 تماما مثل هنا، جديدة + (حجم - الرأس) 511 00:38:46,000 --> 00:38:56,000 ما يعادل بالضبط و[حجم - رئيس] جديدة 512 00:38:56,000 --> 00:39:00,000 حتى نتوقع أن للعمل بشكل صحيح، 513 00:39:00,000 --> 00:39:04,000 لأنه إذا نتعامل مع مجموعة الباحث، ثم لم نفعل ذلك من قبل مؤشر INT- 514 00:39:04,000 --> 00:39:07,000 أو إذا كان حجم من 5 وتريد العنصر 4، ثم نحن في مؤشر 515 00:39:07,000 --> 00:39:10,000 الباحث مجموعة [4]. 516 00:39:10,000 --> 00:39:14,000 أنت مش-[4] * حجم كثافة العمليات. 517 00:39:14,000 --> 00:39:21,000 الذي يعالج تلقائيا، وهذه الحالة 518 00:39:21,000 --> 00:39:29,000 ما يعادل حرفيا، وبالتالي فإن شريحة الجملة 519 00:39:29,000 --> 00:39:34,000 هو مجرد الذهاب لتحويلها إلى هذا بمجرد تجميع. 520 00:39:34,000 --> 00:39:38,000 هذا شيء عليك أن تكون حذرا من أن 521 00:39:38,000 --> 00:39:42,000 عند إضافة حجم - رئيس 522 00:39:42,000 --> 00:39:45,000 الذي تضيفه لا بايت واحد. 523 00:39:45,000 --> 00:39:53,000 كنت تقوم بإضافة حرف واحد *، والتي يمكن أن تكون واحدة بايت أو أيا كان. 524 00:39:53,000 --> 00:39:56,000 >> أسئلة أخرى؟ 525 00:39:56,000 --> 00:40:04,000 حسنا، dequeue ستكون أسهل. 526 00:40:04,000 --> 00:40:11,000 سأعطيك دقيقة لتنفيذها. 527 00:40:11,000 --> 00:40:18,000 أوه، وأعتقد أن هذا هو نفس الوضع حيث 528 00:40:18,000 --> 00:40:21,000 ما حالة إدراج بقائمة الانتظار، إذا نحن enqueuing فارغة، 529 00:40:21,000 --> 00:40:24,000 ربما نريد أن التعامل معها، وربما لم نفعل ذلك. 530 00:40:24,000 --> 00:40:27,000 ونحن لن نفعل ذلك مرة أخرى هنا، ولكن نفس الحالة مكدس لدينا. 531 00:40:27,000 --> 00:40:34,000 إذا كان لنا أن إدراج بقائمة الانتظار فارغة، ونحن قد ترغب في تجاهل ذلك. 532 00:40:34,000 --> 00:40:40,000 أي شخص يحصل بعض التعليمات البرمجية أستطيع سحب ما يصل؟ 533 00:40:40,000 --> 00:40:45,000 [طالب] أنا فقط dequeue. 534 00:40:45,000 --> 00:40:56,000 الإصدار 2 هو أن-بخير. 535 00:40:56,000 --> 00:40:59,000 تريد شرح؟ 536 00:40:59,000 --> 00:41:01,000 [طالب] أولا، يجب التأكد من أن هناك شيئا في قائمة الانتظار 537 00:41:01,000 --> 00:41:07,000 وأن حجم تتراجع بمقدار 1. 538 00:41:07,000 --> 00:41:11,000 ما عليك القيام به ذلك، وبعد ذلك يمكنك العودة الرأس 539 00:41:11,000 --> 00:41:13,000 ثم قم بتحريك الرأس بنسبة 1. 540 00:41:13,000 --> 00:41:19,000 حسنا، لذلك هناك حالة الزاوية لدينا للنظر فيها. نعم. 541 00:41:19,000 --> 00:41:24,000 [طالب] إذا رأسك هو في العنصر الأخير، 542 00:41:24,000 --> 00:41:26,000 ثم كنت لا تريد رئيس للإشارة خارج الصفيف. 543 00:41:26,000 --> 00:41:29,000 >> نعم، ذلك في أقرب وقت الرأس يضرب نهاية مجموعتنا، 544 00:41:29,000 --> 00:41:35,000 عندما كنا dequeue، ينبغي كتكوت رؤوسنا إلى 0. 545 00:41:35,000 --> 00:41:40,000 للأسف، لا يمكننا أن نفعل ذلك في خطوة واحدة. 546 00:41:40,000 --> 00:41:44,000 أعتقد أن الطريقة التي كنت ربما هو إصلاح 547 00:41:44,000 --> 00:41:52,000 هذا وستكون * شار، ما نقوم العائدين، 548 00:41:52,000 --> 00:41:55,000 أيا كان الاسم متغير يريد أن يكون. 549 00:41:55,000 --> 00:42:02,000 ثم نريد أن وزارة الدفاع من قبل رئيس قدرتنا 550 00:42:02,000 --> 00:42:10,000 وأرجع ثم العودة. 551 00:42:10,000 --> 00:42:14,000 وهناك الكثير من الناس هنا لأنها قد تفعل 552 00:42:14,000 --> 00:42:19,000 هذا هو الحال من رؤية الناس، اختر مربع الطباعة تفعل لو رئيس 553 00:42:19,000 --> 00:42:29,000 أكبر من القدرات، والقيام الرأس - القدرات. 554 00:42:29,000 --> 00:42:36,000 وأن يعمل فقط حول ما هو وزارة الدفاع. 555 00:42:36,000 --> 00:42:41,000 قدرة وزارة الدفاع هو رئيس = أنظف بكثير 556 00:42:41,000 --> 00:42:51,000 لالتفاف حول رأس مما لو أكبر من قدرة رئيس - القدرات. 557 00:42:51,000 --> 00:42:56,000 >> الأسئلة؟ 558 00:42:56,000 --> 00:43:02,000 حسنا، وآخر شيء نحن لم يقم هو لدينا قائمة المرتبطة. 559 00:43:02,000 --> 00:43:07,000 قد تستخدم لبعض من السلوك قائمة مرتبطة إذا لم 560 00:43:07,000 --> 00:43:11,000 ربط القوائم في الجداول التجزئة، إذا فعلتم جدول التجزئة. 561 00:43:11,000 --> 00:43:15,000 وإنني أوصي بشدة القيام جدول التجزئة. 562 00:43:15,000 --> 00:43:17,000 قد كنت قد فعلت بالفعل يحاكم، 563 00:43:17,000 --> 00:43:23,000 لكنها تحاول هي أكثر صعوبة. 564 00:43:23,000 --> 00:43:27,000 من الناحية النظرية، وانهم مقارب أفضل. 565 00:43:27,000 --> 00:43:30,000 ولكن مجرد إلقاء نظرة على لوحة كبيرة، 566 00:43:30,000 --> 00:43:35,000 ويحاول أبدا أن تفعل أفضل، وأنها تأخذ المزيد من الذاكرة. 567 00:43:35,000 --> 00:43:43,000 كل شيء عن يحاول ينتهي به الأمر أسوأ لمزيد من العمل. 568 00:43:43,000 --> 00:43:49,000 هذا ما حل ديفيد مالان هو دائما 569 00:43:49,000 --> 00:43:56,000 هل هو دائما الحل المشاركات يحاكم له، ودعونا نرى أين هو حاليا. 570 00:43:56,000 --> 00:44:00,000 ماذا كان تحت ديفيد J؟ 571 00:44:00,000 --> 00:44:06,000 انه رقم 18، بحيث ليست سيئة بشكل رهيب، 572 00:44:06,000 --> 00:44:09,000 والتي ستكون واحدة من أفضل يحاول يمكن ان يخطر لك 573 00:44:09,000 --> 00:44:17,000 أو واحدة من أفضل يحاول من يحاكم. 574 00:44:17,000 --> 00:44:23,000 أليس الحل حتى بلده الأصلي؟ 575 00:44:23,000 --> 00:44:29,000 أشعر حلول يحاكم تميل إلى أن تكون أكثر في هذا النطاق لاستخدام RAM. 576 00:44:29,000 --> 00:44:33,000 >> النزول إلى الأعلى جدا، واستخدام ذاكرة الوصول العشوائي هو في خانة واحدة. 577 00:44:33,000 --> 00:44:36,000 تنخفض نحو الأسفل، ثم تبدأ في رؤية يحاول 578 00:44:36,000 --> 00:44:41,000 حيث تحصل ضخمة تماما استخدام RAM، 579 00:44:41,000 --> 00:44:45,000 ويحاول أكثر صعوبة. 580 00:44:45,000 --> 00:44:53,000 ليس تماما يستحق كل هذا العناء ولكن تجربة تعليمية إذا لم واحد. 581 00:44:53,000 --> 00:44:56,000 وآخر شيء هو لدينا قائمة مرتبط، 582 00:44:56,000 --> 00:45:04,000 وهذه الأمور الثلاثة، مداخن، طوابير، وقوائم مرتبط، 583 00:45:04,000 --> 00:45:09,000 أي شيء من أي وقت مضى كنت تفعل في المستقبل في علوم الكمبيوتر 584 00:45:09,000 --> 00:45:12,000 سوف نفترض لديك الإلمام بهذه الأمور. 585 00:45:12,000 --> 00:45:19,000 أنها مجرد الأساسية من أجل كل شيء. 586 00:45:19,000 --> 00:45:25,000 >> ربط القوائم، وهنا لدينا قائمة منفردة مرتبطة ستكون تنفيذنا. 587 00:45:25,000 --> 00:45:34,000 ماذا يعني ربط منفردة بدلا من ربطها بشكل مضاعف؟ نعم. 588 00:45:34,000 --> 00:45:37,000 [طالب] ويشير فقط إلى مؤشر المقبل بدلا من المؤشرات، 589 00:45:37,000 --> 00:45:39,000 مثل واحد قبله واحدا بعد ذلك. 590 00:45:39,000 --> 00:45:44,000 نعم، وذلك في تنسيق الصورة، ماذا أفعل للتو؟ 591 00:45:44,000 --> 00:45:48,000 لقد اثنين من الأشياء. لدي صورة وصورة. 592 00:45:48,000 --> 00:45:51,000 في شكل صور، لدينا منفردة القوائم المرتبطة، 593 00:45:51,000 --> 00:45:57,000 حتما، لدينا نوع من مؤشر إلى رئيس قائمتنا، 594 00:45:57,000 --> 00:46:02,000 ثم ضمن القائمة، لدينا مؤشرات فقط، 595 00:46:02,000 --> 00:46:05,000 وربما يشير هذا إلى قيمة خالية. 596 00:46:05,000 --> 00:46:08,000 انها سوف تكون نموذجية من الرسم على قائمة منفردة مرتبطة. 597 00:46:08,000 --> 00:46:14,000 قائمة مرتبطة على نحو مضاعف، يمكنك العودة إلى الوراء. 598 00:46:14,000 --> 00:46:19,000 إذا أعطي لك أي عقدة في القائمة، ثم يمكنك الحصول بالضرورة على 599 00:46:19,000 --> 00:46:23,000 أي عقدة أخرى في القائمة إذا كان قائمة مرتبطة على نحو مضاعف. 600 00:46:23,000 --> 00:46:27,000 ولكن إذا كنت تحصل على عقدة الثالث في قائمة وانها قائمة مرتبطة منفردة، 601 00:46:27,000 --> 00:46:30,000 بأي حال من الأحوال من أي وقت مضى كنت تريد الذهاب للوصول الى العقد الأول والثاني. 602 00:46:30,000 --> 00:46:34,000 وهناك فوائد والمضار، واحدة واحدة واضحة 603 00:46:34,000 --> 00:46:42,000 وتأخذ المزيد من حجمها، وعليك أن تتبع هذه الأشياء حيث تشير الآن. 604 00:46:42,000 --> 00:46:49,000 لكننا نهتم فقط مرتبطة منفردة. 605 00:46:49,000 --> 00:46:53,000 >> وهناك أشياء قليلة ونحن في طريقنا لدينا لتنفيذها. 606 00:46:53,000 --> 00:47:00,000 عقدة البنية typedef الخاص، وكثافة العمليات الأول: البنية عقدة * القادمة؛ العقدة. 607 00:47:00,000 --> 00:47:09,000 وينبغي أن أحرق typedef في عقولكم. 608 00:47:09,000 --> 00:47:14,000 يجب أن يكون مثل القصير 1 إعطاء typedef من عقدة قائمة مرتبطة، 609 00:47:14,000 --> 00:47:18,000 ويجب أن تكون قادرة على خربشات على الفور أن لأسفل 610 00:47:18,000 --> 00:47:22,000 دون حتى التفكير فيه. 611 00:47:22,000 --> 00:47:27,000 اعتقد الزوجان على بعض الأسئلة، لماذا نحن بحاجة البنية هنا؟ 612 00:47:27,000 --> 00:47:32,000 لماذا لا نقول * العقدة؟ 613 00:47:32,000 --> 00:47:35,000 [طالب] [غير مسموع] 614 00:47:35,000 --> 00:47:38,000 نعم. 615 00:47:38,000 --> 00:47:44,000 الشيء الوحيد الذي يحدد عقدة كشيء 616 00:47:44,000 --> 00:47:47,000 هو typedef نفسها. 617 00:47:47,000 --> 00:47:55,000 ولكن اعتبارا من هذه النقطة، عندما نكون نوع من تحليل البنية من خلال هذا التعريف العقدة، 618 00:47:55,000 --> 00:48:01,000 نحن لم ننته بعد typedef لدينا، منذ ذلك typedef لم ينته، 619 00:48:01,000 --> 00:48:05,000 عقدة غير موجود. 620 00:48:05,000 --> 00:48:12,000 ولكن البنية لا عقدة، وهذه العقدة هنا، 621 00:48:12,000 --> 00:48:14,000 هذا ويمكن أيضا أن يسمى أي شيء آخر. 622 00:48:14,000 --> 00:48:16,000 يمكن أن يسمى هذا ن. 623 00:48:16,000 --> 00:48:19,000 يمكن أن يسمى ذلك مرتبط العقدة القائمة. 624 00:48:19,000 --> 00:48:21,000 يمكن أن يطلق عليه أي شيء. 625 00:48:21,000 --> 00:48:26,000 ولكن هذه العقدة البنية يحتاج إلى أن يطلق عليه نفس الشيء هذه العقدة البنية. 626 00:48:26,000 --> 00:48:29,000 ما تسمونه هذا قد يكون هنا أيضا، 627 00:48:29,000 --> 00:48:32,000 وبحيث يجيب أيضا نقطة الثاني من السؤال 628 00:48:32,000 --> 00:48:37,000 وهذا هو السبب واحد في الكثير من المرات عندما ترى البنيات وtypedefs من البنيات، 629 00:48:37,000 --> 00:48:42,000 سترى البنيات مجهول حيث سترى فقط البنية typedef، 630 00:48:42,000 --> 00:48:47,000 تنفيذ القاموس، بنية، أو أيا كان. 631 00:48:47,000 --> 00:48:51,000 >> لماذا نحتاج هنا أن أقول عقدة؟ 632 00:48:51,000 --> 00:48:54,000 لماذا لا يكون من البنية مجهول؟ 633 00:48:54,000 --> 00:48:56,000 انها تقريبا نفس الإجابة. 634 00:48:56,000 --> 00:48:58,000 [طالب] تحتاج إلى الرجوع إليه في البنية. 635 00:48:58,000 --> 00:49:04,000 نعم، داخل البنية، تحتاج إلى الرجوع إلى البنية نفسها. 636 00:49:04,000 --> 00:49:10,000 إذا كنت لا تعطي البنية اسم، إذا انها البنية مجهول، لا يمكنك الرجوع إليه. 637 00:49:10,000 --> 00:49:17,000 وأخيرا وليس آخرا، يجب أن تكون هذه واضحة إلى حد ما جميع، 638 00:49:17,000 --> 00:49:20,000 وينبغي أن تساعدك على تحقيق إذا كنت أكتب هذا لأسفل 639 00:49:20,000 --> 00:49:24,000 أن كنت تريد ان تفعل شيئا خاطئا إذا هذا النوع من الأشياء لا معنى لها. 640 00:49:24,000 --> 00:49:28,000 أخيرا وليس آخرا، لماذا يجب أن تكون هذه البنية عقدة *؟ 641 00:49:28,000 --> 00:49:34,000 لماذا لا يمكن أن يكون مجرد البنية عقدة في المرة القادمة؟ 642 00:49:34,000 --> 00:49:37,000 [طالب] مؤشر إلى البنية المقبل. 643 00:49:37,000 --> 00:49:39,000 وهذا حتما ما نريد. 644 00:49:39,000 --> 00:49:42,000 يمكن أن يكون السبب في ذلك أبدا عقدة البنية القادمة؟ 645 00:49:42,000 --> 00:49:50,000 لماذا يجب أن تكون البنية عقدة * في المرة القادمة؟ نعم. 646 00:49:50,000 --> 00:49:53,000 [طالب] انها مثل حلقة لا نهائية. 647 00:49:53,000 --> 00:49:55,000 نعم. 648 00:49:55,000 --> 00:49:57,000 [طالب] وسيكون كل واحدة. 649 00:49:57,000 --> 00:50:02,000 نعم، مجرد التفكير في الطريقة التي ستفعل حجم أو شيء. 650 00:50:02,000 --> 00:50:08,000 حجم البنية هي في الأساس + أو - بعض نمط هنا أو هناك. 651 00:50:08,000 --> 00:50:15,000 انه سيكون أساسا ليكون مجموع أحجام من الأشياء في البنية. 652 00:50:15,000 --> 00:50:18,000 هذا الحق هنا، لم يتغير أي شيء، وحجم سيكون سهلا. 653 00:50:18,000 --> 00:50:24,000 حجم العقدة البنية ستكون حجم حجم + ط المقبل. 654 00:50:24,000 --> 00:50:27,000 حجم أنا سوف يكون 4. حجم المقبل ستكون 4. 655 00:50:27,000 --> 00:50:30,000 حجم العقدة البنية ستكون 8. 656 00:50:30,000 --> 00:50:34,000 إذا كنا لا نملك *، التفكير في sizeof، 657 00:50:34,000 --> 00:50:37,000 ثم sizeof (ط) ستكون 4. 658 00:50:37,000 --> 00:50:43,000 حجم العقدة البنية المقبل سيكون حجم ط + حجم العقدة البنية المقبل 659 00:50:43,000 --> 00:50:46,000 + + حجم حجم العقدة الأولى من البنية المقبل. 660 00:50:46,000 --> 00:50:55,000 فإنه يكون العودية لا حصر له من العقد. 661 00:50:55,000 --> 00:51:00,000 هذا هو السبب في هذا هو كيف تسير الامور يجب أن تكون. 662 00:51:00,000 --> 00:51:03,000 >> مرة أخرى، بالتأكيد أن استظهر، 663 00:51:03,000 --> 00:51:06,000 أو على الأقل فهم يكفي أنه يمكنك أن تكون قادرة على 664 00:51:06,000 --> 00:51:12,000 السبب من خلال ما يجب أن تبدو. 665 00:51:12,000 --> 00:51:14,000 الأشياء التي كنت تريد الذهاب الى تنفيذها. 666 00:51:14,000 --> 00:51:18,000 إذا طول القائمة، 667 00:51:18,000 --> 00:51:21,000 هل يمكن أن يغش والحفاظ حول 668 00:51:21,000 --> 00:51:24,000 طول العالمية أو شيء ما، لكننا لن نفعل ذلك. 669 00:51:24,000 --> 00:51:28,000 ونحن في طريقنا لحساب طول القائمة. 670 00:51:28,000 --> 00:51:34,000 لدينا يحتوي، لذلك هذا هو في الأساس مثل البحث، 671 00:51:34,000 --> 00:51:41,000 لذلك لدينا قائمة من الأعداد الصحيحة المرتبطة لمعرفة ما إذا كان هذا صحيحا في القائمة المرتبطة. 672 00:51:41,000 --> 00:51:44,000 Prepend هو الذهاب الى إدراج في بداية القائمة. 673 00:51:44,000 --> 00:51:46,000 الإلحاقي هو الذهاب الى إدراج في نهاية المطاف. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted سوف تضاف الى موقف مصنفة في القائمة. 675 00:51:53,000 --> 00:52:01,000 نوع من Insert_sorted يفترض أنك لم تستخدم قط prepend أو إلحاق بطرق سيئة. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted عندما كنت تنفيذ insert_sorted- 677 00:52:09,000 --> 00:52:13,000 دعونا نقول لدينا قائمتنا المرتبطة. 678 00:52:13,000 --> 00:52:18,000 هذا ما يبدو حاليا مثل، 2، 4، 5. 679 00:52:18,000 --> 00:52:24,000 أريد أن إدراج 3، لذلك طالما يتم فرز القائمة بالفعل في حد ذاته، 680 00:52:24,000 --> 00:52:27,000 فإنه من السهل أن تجد ينتمي حيث 3. 681 00:52:27,000 --> 00:52:29,000 أبدأ في 2. 682 00:52:29,000 --> 00:52:32,000 حسنا، 3 أكبر من 2، لذلك أريد أن الاستمرار. 683 00:52:32,000 --> 00:52:35,000 أوه، 4 هو كبير جدا، لذلك أنا أعرف 3 ستذهب في الفترة ما بين 2 و 4، 684 00:52:35,000 --> 00:52:39,000 ولدي مؤشرات لإصلاح وجميع الاشياء التي. 685 00:52:39,000 --> 00:52:43,000 ولكن إذا لم نستخدم بدقة insert_sorted، 686 00:52:43,000 --> 00:52:50,000 مثل دعنا نقول فقط أنا prepend 6، 687 00:52:50,000 --> 00:52:55,000 ثم قائمتي المرتبطة سيصبح هذا. 688 00:52:55,000 --> 00:53:01,000 يجعل لا معنى له الآن، وذلك لinsert_sorted، يمكنك مجرد افتراض 689 00:53:01,000 --> 00:53:04,000 أن يتم فرز القائمة، على الرغم من وجود عمليات 690 00:53:04,000 --> 00:53:09,000 والتي يمكن أن تسبب لأنه لا يمكن فرزها، وهذا كل شيء. 691 00:53:09,000 --> 00:53:20,000 إيجاد مفيدة إدخالها حتى تلك هي الأشياء الرئيسية وأنت تسير لدينا لتنفيذها. 692 00:53:20,000 --> 00:53:24,000 >> في الوقت الحالي، يستغرق ذلك دقيقة للقيام طول ويحتوي، 693 00:53:24,000 --> 00:53:30,000 وينبغي لهذه أن تكون سريعة نسبيا. 694 00:53:41,000 --> 00:53:48,000 تقترب الساعة الختام، بحيث يتمكن أي شخص لديه أي شيء لمدة أو يحتوي على؟ 695 00:53:48,000 --> 00:53:50,000 انهم ذاهبون لتكون متطابقة تقريبا. 696 00:53:50,000 --> 00:53:57,000 [طالب] طول. 697 00:53:57,000 --> 00:54:01,000 دعونا نرى، مراجعة. 698 00:54:01,000 --> 00:54:04,000 حسنا. 699 00:54:12,000 --> 00:54:15,000 تريد شرح؟ 700 00:54:15,000 --> 00:54:21,000 [طالب] I مجرد خلق عقدة وتهيئة مؤشر على الأول، وهو متغير لدينا العالمية، 701 00:54:21,000 --> 00:54:27,000 وبعد ذلك تحقق لمعرفة ما اذا كان فارغة لذلك أنا لا تحصل على خطأ SEG والعودة 0 إذا كان هذا هو الحال. 702 00:54:27,000 --> 00:54:34,000 خلاف ذلك، وأنا من خلال حلقة، تتبع داخل عدد صحيح 703 00:54:34,000 --> 00:54:38,000 كم مرة كنت الوصول إلى I العنصر التالي من قائمة 704 00:54:38,000 --> 00:54:43,000 والزيادة في العملية نفسها أيضا الوصول إلى هذا العنصر الفعلي، 705 00:54:43,000 --> 00:54:47,000 وبعد ذلك جعل باستمرار تحقق لمعرفة ما اذا كان باطلا، 706 00:54:47,000 --> 00:54:56,000 وإذا كان فارغة، ثم إحباط وإرجاع فقط عدد من العناصر كنت الوصول إليها. 707 00:54:56,000 --> 00:55:01,000 >> [روب B.] هل لديها أي تعليقات على أي شيء؟ 708 00:55:01,000 --> 00:55:06,000 هذا يبدو من الحكمة صحة غرامة. 709 00:55:06,000 --> 00:55:10,000 [طالب] لا أعتقد أن كنت في حاجة إلى عقدة == فارغة. 710 00:55:10,000 --> 00:55:13,000 نعم، حتى إذا عقدة == 0 العودة فارغة. 711 00:55:13,000 --> 00:55:18,000 ولكن إذا عقدة == فارغة ثم وهذا أوه، هناك قضية صحة. 712 00:55:18,000 --> 00:55:23,000 كان مجرد العودة كنت أنا، ولكنها ليست في نطاق الوقت الحالي. 713 00:55:23,000 --> 00:55:30,000 كل ما تحتاجه الباحث الأول، لذلك أنا 0 =. 714 00:55:30,000 --> 00:55:34,000 ولكن إذا عقدة فارغة، ثم أنا ما زالت مستمرة ليكون 0، 715 00:55:34,000 --> 00:55:39,000 ونحن في طريقنا للعودة 0، لذلك هذا هو الحال متطابقة. 716 00:55:39,000 --> 00:55:48,000 شيء آخر مشترك هو الحفاظ على الإعلان 717 00:55:48,000 --> 00:55:51,000 من داخل عقدة من لحلقة. 718 00:55:51,000 --> 00:55:54,000 يمكن القول أوه، لا. 719 00:55:54,000 --> 00:55:56,000 دعونا يبقيه لأن هذا. 720 00:55:56,000 --> 00:55:59,000 وأود أن وضع الباحث ربما ط = 0 هنا، 721 00:55:59,000 --> 00:56:05,000 ثم عقدة عقدة * = الأولى في هنا. 722 00:56:05,000 --> 00:56:11,000 وربما هذا هو الكيفية التخلص من هذا الآن. 723 00:56:11,000 --> 00:56:14,000 وربما هذا هو كيف كنت قد كتبت عليه. 724 00:56:14,000 --> 00:56:21,000 هل يمكن أيضا النظر إليها، مثل هذا. 725 00:56:21,000 --> 00:56:25,000 هذا للهيكل حلقة هنا 726 00:56:25,000 --> 00:56:30,000 يجب أن تكون تقريبا الطبيعية لكم كما لكثافة العمليات ط = 0 727 00:56:30,000 --> 00:56:33,000 أنا أقل من طول الصفيف ط + +. 728 00:56:33,000 --> 00:56:38,000 إذا هذه هي الطريقة التي iterate عبر صفيف، هذه هي الطريقة التي iterate عبر قائمة مرتبطة. 729 00:56:38,000 --> 00:56:45,000 >> هذا ينبغي أن يكون طبيعة ثانية في مرحلة ما. 730 00:56:45,000 --> 00:56:50,000 مع أخذ ذلك في الاعتبار، وهذا سيكون تقريبا نفس الشيء. 731 00:56:50,000 --> 00:56:57,000 كنت تريد الذهاب الى تكرار عبر قائمة مرتبطة. 732 00:56:57,000 --> 00:57:02,000 إذا كانت العقدة ليست لدي فكرة ما يسمى القيمة. 733 00:57:02,000 --> 00:57:04,000 أنا عقدة. 734 00:57:04,000 --> 00:57:15,000 إذا كانت القيمة في تلك العقدة = ط العودة الحقيقية، وهذا كل شيء. 735 00:57:15,000 --> 00:57:18,000 تلاحظ أن الطريقة الوحيدة التي يمكننا العودة من أي وقت مضى كاذبة 736 00:57:18,000 --> 00:57:23,000 هو إذا كنا iterate عبر القائمة بأكملها مرتبطة أبدا والعودة الحقيقية، 737 00:57:23,000 --> 00:57:29,000 أن ذلك دعونا هذا ما يفعله. 738 00:57:29,000 --> 00:57:36,000 باعتبارها الجانب علما، أننا ربما لن تحصل على إلحاق أو prepend. 739 00:57:36,000 --> 00:57:39,000 >> مشاركة ملاحظة سريعة. 740 00:57:39,000 --> 00:57:52,000 إذا كنت ترى الكلمة ثابت، لذلك دعونا نقول ثابت الباحث العد = 0، 741 00:57:52,000 --> 00:57:56,000 ثم اننا نعول + +، يمكن ان يخطر لك في الأساس من أنها متغير عمومي، 742 00:57:56,000 --> 00:58:00,000 على الرغم من انني وقال هذا ليس فقط كيف ونحن في طريقنا لتنفيذ الطول. 743 00:58:00,000 --> 00:58:06,000 أنا أفعل ذلك هنا، والعد ثم + +. 744 00:58:06,000 --> 00:58:11,000 أي الطريقة التي يمكن أن تدخل في عقدة قائمتنا مرتبط نحن تزايد عدد دينا. 745 00:58:11,000 --> 00:58:15,000 والقصد من هذه الكلمة هو ما يعني ثابت. 746 00:58:15,000 --> 00:58:20,000 إذا كان لي فقط العد = 0 الباحث أن يكون متغير عمومي العادية القديمة. 747 00:58:20,000 --> 00:58:25,000 ما ثابت وسائل العد الباحث هو أنه متغير عمومي لهذا الملف. 748 00:58:25,000 --> 00:58:28,000 فإنه من المستحيل بالنسبة لبعض الملفات الأخرى، 749 00:58:28,000 --> 00:58:34,000 أحب التفكير في pset 5، إذا كنت قد بدأت. 750 00:58:34,000 --> 00:58:39,000 لديك كل speller.c، وكان لديك dictionary.c، 751 00:58:39,000 --> 00:58:42,000 وإذا قمت بتعريف مجرد شيء العالمية، ثم أي شيء في speller.c 752 00:58:42,000 --> 00:58:45,000 ويمكن الوصول إليها في dictionary.c والعكس بالعكس. 753 00:58:45,000 --> 00:58:48,000 المتغيرات العالمية يمكن الوصول إليها بواسطة أي ملف ج.، 754 00:58:48,000 --> 00:58:54,000 ولكن المتغيرات ثابتة يمكن الوصول إليها فقط من داخل الملف نفسه، 755 00:58:54,000 --> 00:59:01,000 حتى داخل المدقق الإملائي أو داخل dictionary.c، 756 00:59:01,000 --> 00:59:06,000 هذا هو نوع من الطريقة التي أود أن تعريف متغير بلدي لحجم مجموعة بلدي 757 00:59:06,000 --> 00:59:10,000 أو حجم رقم هاتفي من الكلمات في القاموس. 758 00:59:10,000 --> 00:59:15,000 منذ أن كنت لا تريد أن تعريف متغير العالمية أن أي شخص لديه حق الوصول إلى، 759 00:59:15,000 --> 00:59:18,000 أنا فقط يهتمون حقا لأغراض بلدي. 760 00:59:18,000 --> 00:59:21,000 >> الشيء الجيد في هذا هو أيضا اسم الاصطدام كله الاشياء. 761 00:59:21,000 --> 00:59:27,000 إذا كانت بعض الملفات الأخرى يحاول استخدام متغير عمومي يسمى العد، تسير الأمور جدا، خطأ جدا، 762 00:59:27,000 --> 00:59:33,000 ولذلك فإن هذا يبقي لطيف الأشياء الآمنة، والوحيد الذي يمكن الوصول إليه، 763 00:59:33,000 --> 00:59:38,000 ويمكن لأي مستخدم آخر، وإذا كان شخص آخر يعلن متغير عمومي يسمى العد 764 00:59:38,000 --> 00:59:43,000 بعد ذلك سوف لا تتداخل مع متغير ثابت يسمى العد الخاص بك. 765 00:59:43,000 --> 00:59:47,000 هذا ما هو ثابت. بل هو متغير الملف العالمي. 766 00:59:47,000 --> 00:59:52,000 >> أسئلة عن أي شيء؟ 767 00:59:52,000 --> 00:59:59,000 كل مجموعة. وداعا. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]