1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [الأسبوع 6] 2 00:00:02,000 --> 00:00:04,000 [ديفيد J. مالان] [جامعة هارفارد] 3 00:00:04,000 --> 00:00:08,000 [هذا CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> هذا هو CS50، وهذا هو بداية الأسبوع 6، 5 00:00:12,000 --> 00:00:16,000 حتى بضع أدوات جديدة متاحة الآن بالنسبة لك للاستفادة من، 6 00:00:16,000 --> 00:00:19,000 يسمى الأول منها CS50 نمط. 7 00:00:19,000 --> 00:00:22,000 الاحتمالات هي إذا كنت مثلي أو أي من الزملاء التدريس، 8 00:00:22,000 --> 00:00:26,000 ربما كنت قد رأيت برنامج يعكس أسلوبه يبدو شيئا قليلا من هذا القبيل. 9 00:00:26,000 --> 00:00:30,000 ربما كنت بدء خفض بعض الزوايا في وقت متأخر من الليل، أو عليك التعامل معها في وقت لاحق، 10 00:00:30,000 --> 00:00:32,000 وبعد ذلك TF أو CA يأتي أكثر خلال ساعات الدوام. 11 00:00:32,000 --> 00:00:34,000 ثم انه من الصعب بالنسبة لنا للقراءة. 12 00:00:34,000 --> 00:00:38,000 حسنا، هذا الرمز صحيحة من حيث التركيب، وتجميع، وسوف، وسوف تشغيل بالفعل. 13 00:00:38,000 --> 00:00:40,000 ولكن هذا بالتأكيد ليس 5 لأسلوب. 14 00:00:40,000 --> 00:00:45,000 >> ولكن الآن، إذا ذهبنا إلى هذا الدليل هنا، 15 00:00:45,000 --> 00:00:48,000 وتلاحظ أن لدي conditions2.c- 16 00:00:48,000 --> 00:00:55,000 وأنا تشغيل هذا الأمر جديد، style50، على هذا conditions2.c الملف، أدخل، 17 00:00:55,000 --> 00:00:57,000 لاحظت هذا ما أبلغت لي أنه كان بأسلوب منمق. 18 00:00:57,000 --> 00:01:00,000 لاحظت Gedit أنه تم تغيير الملف على القرص، 19 00:01:00,000 --> 00:01:08,000 وإذا كنت فوق تحديث، والآن كل المشاكل الآلي الخاص بك. 20 00:01:08,000 --> 00:01:15,000 [تصفيق] 21 00:01:15,000 --> 00:01:17,000 هذا واحد من الأشياء فعلنا في نهاية هذا الاسبوع. 22 00:01:17,000 --> 00:01:20,000 ندرك أنه من الكمال لأن هناك بعض التعليمات البرمجية 23 00:01:20,000 --> 00:01:23,000 أنه ببساطة لن تكون قادرة على أسلب تماما، 24 00:01:23,000 --> 00:01:26,000 ولكن تحقيق هذا هو الآن أداة يمكنك الاستفادة من 25 00:01:26,000 --> 00:01:33,000 إلا إذا كان لترتيب بعض من الأقواس ومجعد أكثر errantly وضع وما شابه ذلك. 26 00:01:33,000 --> 00:01:36,000 >> ولكن أكثر إلحاحا الآن CS50 تحقق. 27 00:01:36,000 --> 00:01:39,000 مع CS50 تحقق، يمكنك تنفيذ الاختبارات في الواقع نفس صحة 28 00:01:39,000 --> 00:01:42,000 على التعليمات البرمجية الخاصة بك أن الزملاء التدريس قادرة على. 29 00:01:42,000 --> 00:01:44,000 هذا هو أداة سطر الأوامر التي تأتي الآن في الأجهزة 30 00:01:44,000 --> 00:01:46,000 بمجرد قيام update50 وفقا 31 00:01:46,000 --> 00:01:49,000 pset 4 مواصفات، واستخدامه أساسا من هذا القبيل. 32 00:01:49,000 --> 00:01:51,000 تشغيل check50 الأمر. 33 00:01:51,000 --> 00:01:56,000 ثم يمكنك تمرير في وسيطة سطر الأوامر، أو بصورة أعم يعرف باسم التبديل أو العلم و. 34 00:01:56,000 --> 00:01:58,000 عموما، وتسمى الأشياء التي لديها مفتاح الواصلات 35 00:01:58,000 --> 00:02:02,000 إلى أمر برنامج الخط، ما يحدد ج 36 00:02:02,000 --> 00:02:04,000 والاختبارات التي تريد تشغيلها. 37 00:02:04,000 --> 00:02:07,000 >> يتم تحديد الاختبارات التي تريد تشغيلها بشكل فريد من هذه السلسلة، 38 00:02:07,000 --> 00:02:10,000 2012/pset4/resize. 39 00:02:10,000 --> 00:02:13,000 وبعبارة أخرى، هذا مجرد سلسلة فريدة من نوعها ولكن التعسفي 40 00:02:13,000 --> 00:02:18,000 التي نستخدمها لتحديد فريد اختبارات صحة و4 pset. 41 00:02:18,000 --> 00:02:21,000 ثم قمت بتحديد قائمة الفضائية فصل من الملفات التي تريد تحميلها 42 00:02:21,000 --> 00:02:24,000 لCS50 تحقق للتحليل. 43 00:02:24,000 --> 00:02:29,000 على سبيل المثال، إذا ذهبت إلى بلدي الحل هنا لresize.c- 44 00:02:29,000 --> 00:02:31,000 اسمحوا لي أن تفتح أكبر محطة نافذة 45 00:02:31,000 --> 00:02:42,000 وأنا المضي قدما وتشغيل دعنا نقول check50-C 2012/pset4/resize، 46 00:02:42,000 --> 00:02:46,000 وبعد ذلك المضي قدما وتحديد أسماء الملفات، 47 00:02:46,000 --> 00:02:49,000 resize.c، ثم ضرب أدخل، فإنه يضغط، 48 00:02:49,000 --> 00:02:53,000 ذلك تحميل، فإنه يتحقق، وأنا فشلت تماما في مجمله مجموعة من الاختبارات. 49 00:02:53,000 --> 00:02:59,000 واحد باللون الأحمر في أعلى اليسار ويقول ان resize.c BMP موجود. 50 00:02:59,000 --> 00:03:01,000 كان ذلك الاختبار. هو أن السؤال الذي طلب منها ذلك. 51 00:03:01,000 --> 00:03:04,000 وانها غير سعيدة لأن الجواب غير صحيح. 52 00:03:04,000 --> 00:03:08,000 النص أدناه بيضاء تقول المتوقع bmp.h في الوجود، وهذا هو ببساطة خطأي. 53 00:03:08,000 --> 00:03:11,000 لقد نسيت لتحميله، لذلك لست بحاجة لتحميل كل الملفات، 54 00:03:11,000 --> 00:03:14,000 resize.c وbmp.h. 55 00:03:14,000 --> 00:03:17,000 ولكن لاحظ الآن كافة الاختبارات الأخرى هي باللون الأصفر لأنها لا تعمل، 56 00:03:17,000 --> 00:03:21,000 وهكذا وجه مبتسم رأسيا لانه سعيد ولا حزين، 57 00:03:21,000 --> 00:03:25,000 ولكن لدينا لمعالجة هذه المسألة في الحمراء قبل تلك الشيكات الأخرى سيتم تشغيل. 58 00:03:25,000 --> 00:03:27,000 >> اسمحوا لي أن إصلاح هذه. 59 00:03:27,000 --> 00:03:30,000 اسمحوا لي التصغير ثم أعد تشغيل هذا، وهذه المرة مع bmp.h أيضا 60 00:03:30,000 --> 00:03:34,000 على سطر الأوامر، أدخل، والآن إذا سارت الامور بشكل جيد، 61 00:03:34,000 --> 00:03:38,000 انه سيكون للتحقق ومن ثم العودة نتيجة ل-عقد نفسا الخاص بك 62 00:03:38,000 --> 00:03:42,000 جميع الخضراء، وهو ما يعني أنا على ما يرام حقا على pset 4 حتى الآن. 63 00:03:42,000 --> 00:03:44,000 يمكنك ان ترى ويستنتج من نص وصفي هنا 64 00:03:44,000 --> 00:03:47,000 بالضبط ما هو عليه تم اختبار. 65 00:03:47,000 --> 00:03:49,000 اختبار علينا أولا لا وجود الملفات؟ 66 00:03:49,000 --> 00:03:51,000 ثم تم اختبار الترجمة resize.c لا؟ 67 00:03:51,000 --> 00:03:58,000 اختبار فإننا لا لا تغيير حجم BMP-1X1 بكسل عندما ن، عامل تغيير الحجم، هو 1. 68 00:03:58,000 --> 00:04:01,000 الآن، إذا كان لديك أي فكرة عما هو ن، سوف يغوص بمجرد pset 4، 69 00:04:01,000 --> 00:04:04,000 ولكن هذا هو مجرد التعقل تحقق للتأكد من أنك لا تغيير حجم 70 00:04:04,000 --> 00:04:08,000 صورة على الإطلاق إذا كان عامل تغيير الحجم هو 1. 71 00:04:08,000 --> 00:04:14,000 إذا، على النقيض من ذلك، فإنه تغيير حجم بكسل 1X1 إلى BMP بكسل 1X1 2X2 بشكل صحيح إلى 72 00:04:14,000 --> 00:04:19,000 عندما n هو 2، ثم على نحو مماثل، تشكل الألغام وفقا لذلك. 73 00:04:19,000 --> 00:04:22,000 >> باختصار، هذا هو المقصود ل، واحد، واتخاذ عبور الأصابع 74 00:04:22,000 --> 00:04:25,000 من المعادلة الحق قبل أن تقدم pset الخاص بك. 75 00:04:25,000 --> 00:04:28,000 وسوف تعرف بالضبط ما TF الخاص بك وسوف نعرف قريبا 76 00:04:28,000 --> 00:04:30,000 عندما تذهب عن تقديم بعض هذه المجموعات المشكلة، 77 00:04:30,000 --> 00:04:34,000 وأيضا الدافع التربوية في الحقيقة لوضع 78 00:04:34,000 --> 00:04:37,000 الفرصة أمامك بحيث عندما تعلم مسبقا 79 00:04:37,000 --> 00:04:39,000 أن هناك أخطاء في التعليمات البرمجية والاختبارات التي لا يتم تمريرها، 80 00:04:39,000 --> 00:04:43,000 يمكنك وضع في وقت أكثر فعالية في خط الهجوم من أجل حل هذه المشاكل 81 00:04:43,000 --> 00:04:45,000 بدلا من فقدان النقاط، والحصول على التغذية المرتدة من TF الخاص بك، 82 00:04:45,000 --> 00:04:48,000 ثم انتقل، "آه،" وكأنني يجب أن برزت إلى ذلك. 83 00:04:48,000 --> 00:04:50,000 الآن على الأقل هناك أداة لمساعدتك في الحصول على ذلك. 84 00:04:50,000 --> 00:04:52,000 انها لن نشير إلى حيث هو علة، ولكن سوف اقول لكم 85 00:04:52,000 --> 00:04:54,000 ما هي أعراض منها. 86 00:04:54,000 --> 00:04:57,000 >> ندرك الآن أن الاختبارات الطبية غير يست شاملة بالضرورة. 87 00:04:57,000 --> 00:04:59,000 فقط لأنك تحصل على كامل الشاشة من الوجوه المبتسمة الخضراء 88 00:04:59,000 --> 00:05:02,000 لا يعني التعليمات البرمجية على ما يرام، ولكن لا يعني ذلك 89 00:05:02,000 --> 00:05:06,000 الذي مضى عليه بعض الاختبارات التي يحددها المواصفات. 90 00:05:06,000 --> 00:05:08,000 في بعض الأحيان ونحن لن تفرج الشيكات. 91 00:05:08,000 --> 00:05:10,000 على سبيل المثال، المجرم، واحدة من جوانب pset 4، 92 00:05:10,000 --> 00:05:15,000 هو نوع من خيبة الأمل إذا كنا تعطيك 93 00:05:15,000 --> 00:05:18,000 الجواب على ما هو عليه، وهناك عدد من الطرق للكشف عن 94 00:05:18,000 --> 00:05:21,000 من هو الشخص في أن الضوضاء الحمراء. 95 00:05:21,000 --> 00:05:24,000 فإن تحديد المواصفات دائما في المستقبل للفصاعدا 5 pset 96 00:05:24,000 --> 00:05:26,000 ما يتحقق وجود لك. 97 00:05:26,000 --> 00:05:28,000 ستلاحظ هناك هذا URL الأبيض في الأسفل. 98 00:05:28,000 --> 00:05:30,000 في الوقت الراهن، وهذا هو الإخراج فقط التشخيص. 99 00:05:30,000 --> 00:05:33,000 إذا قمت بزيارة هذا العنوان، وستحصل على مجموعة كاملة من الرسائل، مجنون خفي 100 00:05:33,000 --> 00:05:36,000 ان كنت موضع ترحيب لننظر من خلال، ولكن في الغالب لموظفي 101 00:05:36,000 --> 00:05:41,000 حتى نتمكن من تشخيص وتصحيح الخلل في check50 نفسها. 102 00:05:41,000 --> 00:05:46,000 >> دون اللغط، دعونا ننتقل إلى حيث توقفنا. 103 00:05:46,000 --> 00:05:48,000 CS50 مكتبة اتخذنا من المسلمات لبضعة أسابيع، 104 00:05:48,000 --> 00:05:52,000 ولكن بعد ذلك في الأسبوع الماضي، بدأنا تقشير مرة أخرى واحدة من طبقات من ذلك. 105 00:05:52,000 --> 00:05:55,000 بدأنا نضع جانبا سلسلة لصالح ما بدلا من ذلك؟ 106 00:05:55,000 --> 00:05:57,000 [الطلاب] شار. 107 00:05:57,000 --> 00:05:59,000 * شار، الذي كان شار * كل هذا الوقت، 108 00:05:59,000 --> 00:06:03,000 ولكن الآن ليس لدينا التظاهر أنه من نوع بيانات سلسلة الفعلية. 109 00:06:03,000 --> 00:06:06,000 بدلا من ذلك، انها كانت مرادفا من نوع ما ل* شار، 110 00:06:06,000 --> 00:06:09,000 وسلسلة هو سلسلة من الأحرف، 111 00:06:09,000 --> 00:06:14,000 فلماذا لا يكون من المنطقي أن تمثل السلاسل كما شار * ق؟ 112 00:06:14,000 --> 00:06:20,000 * ما هي وظيفة شار تمثل في سياق هذا المفهوم من سلسلة؟ 113 00:06:20,000 --> 00:06:23,000 نعم. >> [طالب] الحرف الأول. 114 00:06:23,000 --> 00:06:25,000 جيد، الحرف الأول، ولكن ليس تماما الحرف الأول. 115 00:06:25,000 --> 00:06:27,000 انها-[طلاب] العنوان. 116 00:06:27,000 --> 00:06:29,000 جيد، عنوان الحرف الأول. 117 00:06:29,000 --> 00:06:33,000 كل ما هو ضروري لتمثيل سلسلة في الذاكرة للكمبيوتر 118 00:06:33,000 --> 00:06:36,000 هو مجرد عنوان فريد من البايت الأول جدا. 119 00:06:36,000 --> 00:06:38,000 أنت لا تملك حتى أن تعرف كم من الوقت هو 120 00:06:38,000 --> 00:06:42,000 لأن كيف يمكنك هذا الرقم بشكل حيوي؟ 121 00:06:42,000 --> 00:06:44,000 [طالب] طول السلسلة. 122 00:06:44,000 --> 00:06:48,000 يمكنك استدعاء طول السلسلة، ممتازة، ولكن كيف العمل طول السلسلة؟ 123 00:06:48,000 --> 00:06:50,000 ماذا يفعل؟ نعم. 124 00:06:50,000 --> 00:06:52,000 [طالب] إستمر ​​حتى تحصل على حرف فارغة. 125 00:06:52,000 --> 00:06:54,000 نعم، بالضبط، فإنه يكرر فقط مع لحلقة، في حين حلقة، 126 00:06:54,000 --> 00:06:57,000 أيا كان من * الى النهاية، والنهاية يتم تمثيل 127 00:06:57,000 --> 00:07:01,000 بواسطة \ 0، الحرف يسمى NUL، NUL، 128 00:07:01,000 --> 00:07:05,000 وينبغي عدم الخلط مع NULL، وهو مؤشر، 129 00:07:05,000 --> 00:07:07,000 والتي تأتي في المحادثة مرة أخرى اليوم. 130 00:07:07,000 --> 00:07:11,000 >> مقشر عدنا طبقة من GetInt، ومن ثم اتخذنا نظرة على GetString، 131 00:07:11,000 --> 00:07:14,000 ويذكر أن كلا من هذه الوظائف، أو حقا، 132 00:07:14,000 --> 00:07:18,000 GetString، وكان استخدام وظيفة معينة 133 00:07:18,000 --> 00:07:21,000 تحليل الواقع، وهذا هو، وقراءة أو تحليل، ومدخلات المستخدم. 134 00:07:21,000 --> 00:07:25,000 وماذا كان ذلك وظيفة جديدة؟ 135 00:07:25,000 --> 00:07:27,000 Scanf أو sscanf. يتعلق الأمر في الواقع في النكهات مختلفة قليلة. 136 00:07:27,000 --> 00:07:31,000 هناك scanf، وهناك sscanf، وهناك fscanf. 137 00:07:31,000 --> 00:07:35,000 في الوقت الراهن، على الرغم من، دعونا نركز على واحد أكثر سهولة مصورة، 138 00:07:35,000 --> 00:07:38,000 واسمحوا لي أن تمضي قدما وفتح في الجهاز 139 00:07:38,000 --> 00:07:41,000 ملف مثل هذا، scanf1.c. 140 00:07:41,000 --> 00:07:43,000 هذا هو برنامج سوبر بسيطة، 141 00:07:43,000 --> 00:07:46,000 ولكن هذا لا شيء بعد أن قمنا لم تفعل 142 00:07:46,000 --> 00:07:48,000 دون مساعدة من مكتبة CS50. 143 00:07:48,000 --> 00:07:51,000 هذا يحصل على الباحث من مستخدم. كيف يعمل؟ 144 00:07:51,000 --> 00:07:53,000 حسنا، في السطر 16 هناك، 145 00:07:53,000 --> 00:07:56,000 تلاحظ أن نعلن الأشعة الباحث ودعا، وعند هذه النقطة في القصة، 146 00:07:56,000 --> 00:07:58,000 ما هي قيمة س؟ 147 00:07:58,000 --> 00:08:00,000 [رد الطالب غير مسموع] 148 00:08:00,000 --> 00:08:02,000 [ديفيد M.] الحق، من يدري، ربما بعض القيمة القمامة، وذلك في 17، نقول فقط للمستخدم 149 00:08:02,000 --> 00:08:06,000 أعطني عدد، من فضلك، والخطوة 18 هي المكان الذي تحصل عليه للاهتمام. 150 00:08:06,000 --> 00:08:11,000 Scanf يبدو أن الاقتراض فكرة من printf لأنه يستخدم هذه الرموز تنسيق تهمك. 151 00:08:11,000 --> 00:08:13,000 د٪ هو بالطبع رقم عشري. 152 00:08:13,000 --> 00:08:21,000 ولكن لماذا أنا في تمرير & X X بدلا من مجرد؟ 153 00:08:21,000 --> 00:08:24,000 السابق هو الصحيح. نعم. 154 00:08:24,000 --> 00:08:26,000 [رد الطالب غير مسموع] 155 00:08:26,000 --> 00:08:31,000 بالضبط، إذا كان الهدف من هذا البرنامج، مثل وظيفة GetInt نفسها، 156 00:08:31,000 --> 00:08:34,000 هو الحصول على كثافة العمليات يمكن للمستخدم من أمرر وظائف 157 00:08:34,000 --> 00:08:38,000 جميع المتغيرات أريد، ولكن إذا كنت لم تمر عليهم من قبل المرجعية 158 00:08:38,000 --> 00:08:41,000 أو حسب العنوان أو عن طريق المؤشر، جميع مرادفا لأغراض اليوم، 159 00:08:41,000 --> 00:08:46,000 ثم أن وظيفة ليس لديها القدرة على تغيير محتويات هذا المتغير. 160 00:08:46,000 --> 00:08:49,000 هذا من شأنه أن تمر في نسخة تماما مثل الإصدار عربات التي تجرها الدواب من مبادلة 161 00:08:49,000 --> 00:08:51,000 أنه قد تحدثنا عن بضع مرات حتى الآن. 162 00:08:51,000 --> 00:08:54,000 >> ولكن بدلا من ذلك، عن طريق القيام & X، وأنا حرفيا في تمرير ما؟ 163 00:08:54,000 --> 00:08:57,000 [طالب] >> عنوان. عنوان X. 164 00:08:57,000 --> 00:09:01,000 انها تشبه رسم خريطة للدالة يسمى scanf وقوله هنا، 165 00:09:01,000 --> 00:09:04,000 هذه هي الاتجاهات إلى قطعة من الذاكرة في الكمبيوتر 166 00:09:04,000 --> 00:09:07,000 التي يمكن أن تذهب تخزين عدد صحيح بعض فيها. 167 00:09:07,000 --> 00:09:10,000 من أجل sscanf القيام به الآن أن 168 00:09:10,000 --> 00:09:13,000 ما المشغل، ما قطعة من جملة الحال لديك لاستخدام 169 00:09:13,000 --> 00:09:19,000 على الرغم من أننا لا نستطيع أن نرى ذلك لأن شخص آخر كتب هذه الوظيفة؟ 170 00:09:19,000 --> 00:09:21,000 وبعبارة أخرى - ما هذا؟ 171 00:09:21,000 --> 00:09:23,000 [طالب] X القراءة. 172 00:09:23,000 --> 00:09:27,000 هناك سيكون بعض القراءة، ولكن فقط فيما يتعلق X هنا. 173 00:09:27,000 --> 00:09:30,000 إذا كان يتم تمرير scanf عنوان X، 174 00:09:30,000 --> 00:09:35,000 بناء جملة، لا بد ما في مكان ما في الوجود المشغل 175 00:09:35,000 --> 00:09:38,000 داخل تنفيذ scanf بحيث scanf 176 00:09:38,000 --> 00:09:42,000 يمكن أن يكتب في الواقع عددا من 2 إلى هذا العنوان؟ 177 00:09:42,000 --> 00:09:44,000 نعم، لذلك *. 178 00:09:44,000 --> 00:09:47,000 * أذكر أن لدينا هو المشغل إلغاء مرجعية، وهو ما يعني أساسا ذهاب إلى هناك. 179 00:09:47,000 --> 00:09:50,000 >> بمجرد أن تم تسليم لك عنوان، كما هو الحال هنا، 180 00:09:50,000 --> 00:09:53,000 وربما لو نظرنا في الواقع scanf حول مصدره رمز 181 00:09:53,000 --> 00:09:59,000 * تقوم X أو ما يعادلها للذهاب إلى هذا العنوان بالفعل وضعت بعض القيمة هناك. 182 00:09:59,000 --> 00:10:02,000 الآن، أما عن كيفية scanf يحصل على مدخلات من لوحة المفاتيح، 183 00:10:02,000 --> 00:10:04,000 سنقوم موجة من أيدينا لهذا اليوم. 184 00:10:04,000 --> 00:10:07,000 مجرد افتراض أن نظام التشغيل يسمح للحديث sscanf 185 00:10:07,000 --> 00:10:11,000 لوحة المفاتيح للمستخدم، ولكن في هذه المرحلة الآن في خط 19، 186 00:10:11,000 --> 00:10:14,000 عندما كنا ببساطة طباعة X، يبدو أن هذا هو الحال 187 00:10:14,000 --> 00:10:17,000 وقد وضع هذا scanf والباحث في العاشر. 188 00:10:17,000 --> 00:10:19,000 هذا هو بالضبط كيف يعمل scanf، وأذكر الأسبوع الماضي 189 00:10:19,000 --> 00:10:25,000 هذه هي الطريقة بالضبط GetString وGetInt وأهله من وظائف أخرى 190 00:10:25,000 --> 00:10:28,000 يعمل في نهاية المطاف، ولكن مع تباين طفيف مثل sscanf، 191 00:10:28,000 --> 00:10:31,000 مما يعني مسح سلسلة بدلا من لوحة المفاتيح. 192 00:10:31,000 --> 00:10:33,000 ولكن دعونا نلقي نظرة على الفرق قليلا من هذا. 193 00:10:33,000 --> 00:10:37,000 في scanf2، I فعليا حتى ثمل. 194 00:10:37,000 --> 00:10:42,000 ما هو الخطأ، وأنا سوف إخفاء التعليق الذي يفسر بقدر- 195 00:10:42,000 --> 00:10:47,000 ما هو الخطأ في هذا البرنامج، الإصدار 2؟ 196 00:10:47,000 --> 00:10:55,000 تكون التقنية ممكن هذا الوقت. 197 00:10:55,000 --> 00:10:57,000 أنها تبدو جيدة جدا. 198 00:10:57,000 --> 00:11:03,000 انها بادئة لطيف، ولكن، 199 00:11:03,000 --> 00:11:07,000 حسنا، كيف تسمح لتقليم حول ذلك وصولا الى أقصر الأسئلة؟ 200 00:11:07,000 --> 00:11:17,000 السطر 16. ما هو السطر 16 دقيقة باللغة الإنجليزية تفعل ولكن التقنية؟ 201 00:11:17,000 --> 00:11:20,000 الحصول على القليل حرج. نعم، مايكل. 202 00:11:20,000 --> 00:11:25,000 [طالب] انها لافتا إلى الحرف الأول من السلسلة. 203 00:11:25,000 --> 00:11:27,000 >> حسنا، على مقربة. اسمحوا لي أن قرص قليلا. 204 00:11:27,000 --> 00:11:33,000 مشيرا إلى الحرف الأول من السلسلة، معلنا كنت مخزن مؤقت متغير يسمى 205 00:11:33,000 --> 00:11:36,000 والتي تشير إلى العنوان الأول من سلسلة، 206 00:11:36,000 --> 00:11:39,000 أو بالأحرى، فإن ذلك يشير بشكل أكثر تحديدا إلى شار. 207 00:11:39,000 --> 00:11:42,000 لاحظت انها ليست في الواقع في أي مكان مشيرا لأنه ليس هناك عامل التعيين. 208 00:11:42,000 --> 00:11:46,000 ليس هناك علامة المساواة، لذلك كل ما نقوم به هو تخصيص المخزن المؤقت متغير يسمى. 209 00:11:46,000 --> 00:11:49,000 يحدث أن يكون 32 بت لأنها مؤشر، 210 00:11:49,000 --> 00:11:52,000 ومحتويات المخزن المؤقت في نهاية المطاف يفترض 211 00:11:52,000 --> 00:11:57,000 سوف تحتوي على عنوان إحدى شار، لكنه الآن، ماذا تحتوي العازلة؟ 212 00:11:57,000 --> 00:11:59,000 فقط بعض همية، من يدري، بعض القمامة القيمة، 213 00:11:59,000 --> 00:12:03,000 لأننا لم تهيئة بشكل صريح، لذلك ينبغي لنا أن نفترض أي شيء. 214 00:12:03,000 --> 00:12:06,000 حسنا، حتى الآن السطر 17 IS-ماذا تفعل السطر 17؟ 215 00:12:06,000 --> 00:12:08,000 ربما من شأنها أن هذا الأمر الحارة. 216 00:12:08,000 --> 00:12:10,000 فإنه يطبع سلسلة، أليس كذلك؟ 217 00:12:10,000 --> 00:12:12,000 فإنه يطبع سلسلة من فضلك. 218 00:12:12,000 --> 00:12:15,000 >> خط 18 هو نوع من المألوف الآن في رأينا أن مجرد تباين هذه 219 00:12:15,000 --> 00:12:18,000 ولكن مع رمز شكل مختلف، وذلك في خط 18، 220 00:12:18,000 --> 00:12:23,000 نحن نقول scanf هنا هو عنوان قطعة من الذاكرة. 221 00:12:23,000 --> 00:12:27,000 أريدك أن حلقة في سلسلة ما يذهب إليه٪ S، 222 00:12:27,000 --> 00:12:32,000 ولكن المشكلة هي أننا لم تفعل بضعة أشياء هنا. 223 00:12:32,000 --> 00:12:35,000 ما هو واحدة من المشاكل؟ 224 00:12:35,000 --> 00:12:38,000 [طالب] ويحاول إلغاء مرجعية مؤشر فارغة. 225 00:12:38,000 --> 00:12:41,000 جيد، مؤشرات خالية أو غير معروفة فقط خلاف ذلك. 226 00:12:41,000 --> 00:12:45,000 كنت تسليم scanf عنوان، ولكن قلت قبل لحظة فقط 227 00:12:45,000 --> 00:12:49,000 أن هذا العنوان هو بعض القيمة القمامة لأننا لم فعلا تعيين إلى أي شيء، 228 00:12:49,000 --> 00:12:53,000 وهكذا كنت أقول scanf تذهب بشكل فعال وضعت سلسلة هنا، 229 00:12:53,000 --> 00:12:56,000 لكننا لا نعرف أين هو هنا بعد، 230 00:12:56,000 --> 00:12:59,000 لذلك نحن في الواقع لم يخصص الذاكرة لالعازلة. 231 00:12:59,000 --> 00:13:03,000 وعلاوة على ذلك، ما أنت أيضا لا يقولون حتى scanf؟ 232 00:13:03,000 --> 00:13:06,000 ان هذا كان جزءا من الذاكرة، وأنه لم يكن قيمة القمامة، 233 00:13:06,000 --> 00:13:09,000 ولكن كنت لا تزال لا يقول شيئا مهما scanf. 234 00:13:09,000 --> 00:13:12,000 [طالب] أين هو عليه في الواقع، والعطف. 235 00:13:12,000 --> 00:13:15,000 العطف، لذلك في هذه الحالة، لا بأس. 236 00:13:15,000 --> 00:13:18,000 لأنه أعلن بالفعل العازلة كمؤشر 237 00:13:18,000 --> 00:13:22,000 مع قطعة من * لغوي، ونحن لسنا بحاجة لاستخدام العطف 238 00:13:22,000 --> 00:13:25,000 لأنه بالفعل عنوان، ولكن أعتقد أنني سمعت هنا. 239 00:13:25,000 --> 00:13:27,000 [طالب] كيف كبير هو؟ 240 00:13:27,000 --> 00:13:29,000 جيد، نحن لا نقول scanf كيف كبيرة هذا المخزن المؤقت، 241 00:13:29,000 --> 00:13:32,000 وهو ما يعني حتى لو كانت العازلة مؤشر، 242 00:13:32,000 --> 00:13:35,000 نحن نقول scanf، وطرح سلسلة هنا، 243 00:13:35,000 --> 00:13:38,000 ولكن هنا يمكن أن يكون 2 بايت، فإنه يمكن أن يكون 10 بايت، يمكن أن يكون ميغا بايت. 244 00:13:38,000 --> 00:13:41,000 Scanf ليس لديه فكرة، ولأن هذا هو جزء من الذاكرة 245 00:13:41,000 --> 00:13:43,000 يفترض، انها ليست سلسلة حتى الآن. 246 00:13:43,000 --> 00:13:48,000 انها فقط سلسلة بمجرد كتابة الأحرف و0 \ لأن جزءا من الذاكرة. 247 00:13:48,000 --> 00:13:51,000 الآن انها مجرد قطعة من بعض الذاكرة. 248 00:13:51,000 --> 00:13:55,000 سوف Scanf لا تعرف متى يتوقف عن الكتابة إلى هذا العنوان. 249 00:13:55,000 --> 00:13:59,000 >> إذا كنت أذكر بعض الأمثلة في الماضي حيث كتبت على لوحة المفاتيح بشكل عشوائي 250 00:13:59,000 --> 00:14:03,000 في محاولة لتجاوز المخزن مؤقت، وتحدثنا عن ذلك يوم الجمعة بالضبط. 251 00:14:03,000 --> 00:14:07,000 إذا عدو يضخ نحو ما في البرنامج كلمة أكبر بكثير 252 00:14:07,000 --> 00:14:10,000 أو الجملة أو العبارة ثم كنت أتوقع يمكنك تجاوز 253 00:14:10,000 --> 00:14:13,000 قطعة من الذاكرة، والتي يمكن أن يكون لها عواقب سيئة، 254 00:14:13,000 --> 00:14:15,000 مثل الاستيلاء على كامل البرنامج نفسه. 255 00:14:15,000 --> 00:14:17,000 نحن بحاجة إلى إصلاح هذه بطريقة أو بأخرى. 256 00:14:17,000 --> 00:14:20,000 اسمحوا لي أن التصغير والخوض في الإصدار 3 من هذا البرنامج. 257 00:14:20,000 --> 00:14:22,000 هذا أفضل قليلا. 258 00:14:22,000 --> 00:14:24,000 في هذا الإصدار، لاحظ الفرق. 259 00:14:24,000 --> 00:14:27,000 في السطر 16، وأنا مرة أخرى معلنا مخزن مؤقت متغير يسمى، 260 00:14:27,000 --> 00:14:29,000 ولكن ما هو عليه الآن؟ 261 00:14:29,000 --> 00:14:33,000 انها مجموعة من 16 حرف. 262 00:14:33,000 --> 00:14:36,000 هذا أمر جيد لأن هذا يعني أستطيع أن أقول الآن scanf 263 00:14:36,000 --> 00:14:39,000 هنا هو جزء من الذاكرة الفعلية. 264 00:14:39,000 --> 00:14:42,000 يمكنك التفكير تقريبا من صفائف بأنها مؤشرات الآن، 265 00:14:42,000 --> 00:14:44,000 على الرغم من أنها لم تكن في الواقع ما يعادل. 266 00:14:44,000 --> 00:14:47,000 وأنها سوف تتصرف بشكل مختلف في سياقات مختلفة. 267 00:14:47,000 --> 00:14:50,000 ولكن من المؤكد أن يتم الرجوع العازلة 268 00:14:50,000 --> 00:14:53,000 16 حرف متجاورة لأن هذا هو ما صفيف 269 00:14:53,000 --> 00:14:55,000 وكان لبضعة أسابيع الآن. 270 00:14:55,000 --> 00:14:59,000 >> هنا، أنا أقول scanf وهنا قطعة من الذاكرة. 271 00:14:59,000 --> 00:15:01,000 هذه المرة، انها فعلا قطعة من الذاكرة، 272 00:15:01,000 --> 00:15:07,000 ولكن لماذا هذا البرنامج مازال استغلال؟ 273 00:15:07,000 --> 00:15:11,000 ما هو الخطأ لا تزال؟ 274 00:15:11,000 --> 00:15:14,000 قلت أعطني 16 بايت ولكن- 275 00:15:14,000 --> 00:15:16,000 [طالب] ماذا لو اكتب في أكثر من 16؟ 276 00:15:16,000 --> 00:15:20,000 بالضبط، ما إذا كان المستخدم في أنواع الأحرف 17 حرفا أو 1700؟ 277 00:15:20,000 --> 00:15:23,000 في الواقع، دعونا نرى اذا كنا نستطيع لا يتعثر هذا الخطأ الآن. 278 00:15:23,000 --> 00:15:25,000 انها افضل ولكن الكمال لا. 279 00:15:25,000 --> 00:15:28,000 اسمحوا لي أن تمضي قدما وجعل تشغيل scanf3 لتجميع هذا البرنامج. 280 00:15:28,000 --> 00:15:34,000 اسمحوا لي أن تشغيل scanf3، سلسلة من فضلك: مرحبا، ويبدو أننا على ما يرام. 281 00:15:34,000 --> 00:15:37,000 اسمحوا لي أن أحاول واحدة أطول قليلا، مرحبا هناك. 282 00:15:37,000 --> 00:15:42,000 حسنا، دعونا نفعل مرحبا هناك كيف حالك اليوم، أدخل. 283 00:15:42,000 --> 00:15:54,000 الحصول على نوع من الحظ هنا، دعنا نقول مرحبا كيف حالك هناك. 284 00:15:54,000 --> 00:15:56,000 اللعنة. 285 00:15:56,000 --> 00:16:03,000 حسنا، حتى وصلنا محظوظ. دعونا نرى ما اذا كنا نستطيع حل هذه لا. 286 00:16:03,000 --> 00:16:06,000 لا، انها لن اسمحوا لي نسخه. 287 00:16:06,000 --> 00:16:09,000 دعونا نحاول هذا مرة أخرى. 288 00:16:09,000 --> 00:16:12,000 كل الحق، والوقوف من قبل. 289 00:16:12,000 --> 00:16:20,000 سنرى كم من الوقت يمكنني أن أدعي أن التركيز أثناء القيام لا يزال هذا. 290 00:16:20,000 --> 00:16:23,000 اللعنة. أن من المناسب بدلا من ذلك، في الواقع. 291 00:16:23,000 --> 00:16:26,000 هناك نذهب. 292 00:16:26,000 --> 00:16:30,000 جعل نقطة. 293 00:16:30,000 --> 00:16:34,000 >> هذا، على الرغم من أنه هو إحراج أيضا، كما أنها واحدة من مصادر الارتباك الكبير 294 00:16:34,000 --> 00:16:38,000 عند كتابة البرامج التي لها البق لأنها تعبر عن نفسها 295 00:16:38,000 --> 00:16:40,000 مرة واحدة فقط في حين في بعض الأحيان. 296 00:16:40,000 --> 00:16:43,000 الحقيقة هي أنه حتى إذا ما تم كسر الشفرة تماما، 297 00:16:43,000 --> 00:16:46,000 قد لا يمكن كسرها إلا تماما مرة واحدة في حين 298 00:16:46,000 --> 00:16:49,000 لأن في بعض الأحيان، أساسا ما يحدث هو يخصص نظام التشغيل 299 00:16:49,000 --> 00:16:52,000 ذاكرة أكثر قليلا مما كنت تحتاج بالفعل لأي سبب من الأسباب، 300 00:16:52,000 --> 00:16:57,000 وذلك لا أحد آخر يستخدم الذاكرة مباشرة بعد قطعة الخاص بك من 16 حرفا، 301 00:16:57,000 --> 00:17:01,000 إذا كان الأمر كذلك تذهب إلى 17، 18، 19، أيا كان، انها ليست مثل هذه الصفقة الكبيرة. 302 00:17:01,000 --> 00:17:04,000 الآن، الكمبيوتر، حتى لو كان لا تحطم في تلك المرحلة، 303 00:17:04,000 --> 00:17:09,000 قد تستخدم في نهاية المطاف عدد بايت 17 أو 18 أو 19 لشيء آخر، 304 00:17:09,000 --> 00:17:14,000 في التي تشير البيانات التي وضعت هناك، ولو بشكل مفرط طويلة، 305 00:17:14,000 --> 00:17:18,000 هو الذهاب الى الحصول على الكتابة يحتمل من قبل بعض وظيفة أخرى. 306 00:17:18,000 --> 00:17:21,000 انها لن بالضرورة أن تظل سليمة، 307 00:17:21,000 --> 00:17:23,000 لكنه لن يؤدي بالضرورة إلى خطأ SEG. 308 00:17:23,000 --> 00:17:26,000 لكن في هذه الحالة، وأنا قدمت أخيرا أحرف كافية 309 00:17:26,000 --> 00:17:29,000 أنني تجاوزت أساسا بلدي الجزء من الذاكرة، وبام، 310 00:17:29,000 --> 00:17:33,000 وقال نظام التشغيل، "عذرا، هذا ليس جيدا خطأ تجزئة." 311 00:17:33,000 --> 00:17:38,000 >> والآن دعونا نرى إذا ما بقي هنا في بلدي دليل، 312 00:17:38,000 --> 00:17:40,000 تلاحظ أن لدي هذا الملف هنا، الأساسية. 313 00:17:40,000 --> 00:17:42,000 لاحظ استدعاء مرة أخرى هذا تفريغ الأساسية. 314 00:17:42,000 --> 00:17:46,000 انها في الأساس ملف الذي يحتوي على المحتوى من الذاكرة البرنامج الخاص بك 315 00:17:46,000 --> 00:17:48,000 عند النقطة التي تحطمت، 316 00:17:48,000 --> 00:17:51,000 وفقط في محاولة مثال قليلا هنا اسمحوا لي ان اذهب هنا 317 00:17:51,000 --> 00:17:57,000 وجدب على تشغيل scanf3 ثم تحديد وسيطة ثالث يسمى الأساسية، 318 00:17:57,000 --> 00:18:01,000 وتلاحظ هنا أن أسرد إذا التعليمات البرمجية، 319 00:18:01,000 --> 00:18:06,000 سوف نكون قادرين على النحو المعتاد مع GDB لبدء المشي من خلال هذا البرنامج، 320 00:18:06,000 --> 00:18:10,000 ويمكنني تشغيله وسرعان ما الكر كما هو الحال مع الأمر خطوة في GDB- 321 00:18:10,000 --> 00:18:13,000 بمجرد ضرب I خط عربات التي تجرها الدواب يحتمل بعد كتابة في سلسلة ضخمة، 322 00:18:13,000 --> 00:18:16,000 سأكون قادرا على تحديد فعلا هنا. 323 00:18:16,000 --> 00:18:19,000 المزيد عن هذا، على الرغم من في القسم من حيث مقالب الأساسية 324 00:18:19,000 --> 00:18:22,000 وما شابه ذلك بحيث يمكنك في الواقع كزة حول الداخل من تفريغ الأساسية 325 00:18:22,000 --> 00:18:27,000 وانظر على ما خط فشل البرنامج لك. 326 00:18:27,000 --> 00:18:32,000 أي أسئلة بعد ذلك على مؤشرات وعلى عناوين؟ 327 00:18:32,000 --> 00:18:36,000 لأن اليوم فصاعدا، ونحن في طريقنا للبدء في اتخاذ أمرا مفروغا منه أن هذه الأشياء موجودة 328 00:18:36,000 --> 00:18:40,000 ونحن نعرف بالضبط ما هي عليه. 329 00:18:40,000 --> 00:18:42,000 نعم. 330 00:18:42,000 --> 00:18:46,000 >> [طالب] كيف ذلك لم يكن لديك لوضع العلامة بجانب بعض 331 00:18:46,000 --> 00:18:48,000 سؤال جيد. 332 00:18:48,000 --> 00:18:51,000 فكيف لم يكن لدي لوضع العلامة بجانب صفيف حرف كما فعلت سابقا 333 00:18:51,000 --> 00:18:53,000 مع معظم الأمثلة لدينا؟ 334 00:18:53,000 --> 00:18:55,000 الجواب القصير هو صفائف قليلا الخاصة. 335 00:18:55,000 --> 00:18:59,000 يمكنك التفكير تقريبا العازلة بأنها في الواقع عنوان، 336 00:18:59,000 --> 00:19:03,000 ويحدث ذلك فقط أن يكون عليه الحال أن تدوين قوس مربع 337 00:19:03,000 --> 00:19:06,000 هو الراحة حتى نتمكن من الخوض في قوس 0، قوس 1، 338 00:19:06,000 --> 00:19:10,000 قوس 2، دون الحاجة إلى استخدام التدوين *. 339 00:19:10,000 --> 00:19:13,000 أن قليلا من كذبة بيضاء لأن المصفوفات والمؤشرات 340 00:19:13,000 --> 00:19:17,000 هي، في الواقع، مختلفة قليلا، ولكن في كثير من الأحيان ولكن ليس يمكن أن يكون دائما تستخدم بالتبادل. 341 00:19:17,000 --> 00:19:21,000 وباختصار، عندما وظيفة يتوقع مؤشر إلى قطعة من الذاكرة، 342 00:19:21,000 --> 00:19:24,000 يمكنك تمرير إما أن عنوان التي تم إرجاعها بواسطة malloc، 343 00:19:24,000 --> 00:19:29,000 وسنرى مرة أخرى malloc قبل فترة طويلة، أو يمكنك نقله اسم صفيف. 344 00:19:29,000 --> 00:19:32,000 لم يكن لديك للقيام العطف مع المصفوفات لأنها بالفعل 345 00:19:32,000 --> 00:19:34,000 مثل عناوين أساسا. 346 00:19:34,000 --> 00:19:36,000 هذا هو الاستثناء الوحيد. 347 00:19:36,000 --> 00:19:39,000 المعقوفتين جعلها خاصة. 348 00:19:39,000 --> 00:19:41,000 >> هل يمكن وضع العلامة التالية إلى المخزن المؤقت؟ 349 00:19:41,000 --> 00:19:43,000 لا في هذه الحالة. 350 00:19:43,000 --> 00:19:46,000 ومن شأن ذلك أن لا يعمل لأنه، مرة أخرى، من هذه الحالة الزاوية 351 00:19:46,000 --> 00:19:49,000 حيث صفائف ليست في الواقع تماما عناوين. 352 00:19:49,000 --> 00:19:54,000 ولكن سوف نأتي مرة أخرى إلى ربما قبل ذلك بوقت طويل مع أمثلة أخرى. 353 00:19:54,000 --> 00:19:56,000 دعونا نحاول حل مشكلة هنا. 354 00:19:56,000 --> 00:20:00,000 لدينا بنية بيانات التي كنا تستخدم لبعض الوقت والمعروفة باسم صفيف. 355 00:20:00,000 --> 00:20:02,000 مثال على ذلك، وهذا ما كان لدينا فقط. 356 00:20:02,000 --> 00:20:04,000 ولكن لديك بعض الإيجابيات صفائف وسلبيات. 357 00:20:04,000 --> 00:20:06,000 لماذا هي صفائف لطيفة؟ 358 00:20:06,000 --> 00:20:11,000 ما هو الشيء الوحيد الذي ترغب إلى حد ترغب صفائف نبذة عن المصفوفات؟ 359 00:20:11,000 --> 00:20:13,000 ما هو ملائم عنهم؟ ما هو مقنع؟ 360 00:20:13,000 --> 00:20:18,000 لماذا لم نقدم لهم في المقام الأول؟ 361 00:20:18,000 --> 00:20:20,000 نعم. 362 00:20:20,000 --> 00:20:27,000 [طالب] ويمكن تخزين الكثير من البيانات، وليس لديك لاستخدام الشيء بأكمله. 363 00:20:27,000 --> 00:20:29,000 يمكنك استخدام المقطع. 364 00:20:29,000 --> 00:20:32,000 جيدة، مع مجموعة يمكنك تخزين الكثير من البيانات، 365 00:20:32,000 --> 00:20:35,000 وليس لديك بالضرورة لاستخدام كل ذلك، لذلك كنت overallocate يمكن، 366 00:20:35,000 --> 00:20:39,000 والتي قد تكون مريحة إذا كنت لا تعرف مسبقا كم من شيء يمكن توقعه. 367 00:20:39,000 --> 00:20:41,000 >> GetString هو مثال ممتاز. 368 00:20:41,000 --> 00:20:44,000 GetString، وكتب من قبلنا، لا يوجد لديه فكرة عن عدد أحرف يمكن توقعه، 369 00:20:44,000 --> 00:20:48,000 وبالتالي فإن حقيقة أننا يمكن تخصيص قطع من الذاكرة القريبة جيدة. 370 00:20:48,000 --> 00:20:51,000 صفائف أيضا حل مشكلة رأينا قبل بضعة أسابيع الآن 371 00:20:51,000 --> 00:20:54,000 حيث يبدأ التعليمات البرمجية لنقل إلى شيء سيئة جدا مصممة. 372 00:20:54,000 --> 00:20:57,000 أذكر أنني إنشاء هيكل الطالب دعا ديفيد، 373 00:20:57,000 --> 00:21:00,000 وكان بعد ذلك أن الواقع بديلا، على الرغم من 374 00:21:00,000 --> 00:21:04,000 إلى وجود اسم متغير يسمى وآخر متغير يسمى، كما أعتقد، المنزل، 375 00:21:04,000 --> 00:21:08,000 ومتغير آخر يسمى ID لأنه في هذه القصة أردت أن أعرض ثم شيء آخر 376 00:21:08,000 --> 00:21:11,000 مثل روب في البرنامج، حتى ذلك الحين قررت الانتظار لمدة دقيقة، 377 00:21:11,000 --> 00:21:13,000 ولست بحاجة لإعادة تسمية هذه المتغيرات. 378 00:21:13,000 --> 00:21:16,000 دعونا ندعو الألغام NAME1، ID1، house1. 379 00:21:16,000 --> 00:21:20,000 دعونا ندعو لروب NAME2، house2، ID2. 380 00:21:20,000 --> 00:21:22,000 ولكن الانتظار لمدة دقيقة ثم، ماذا عن تومي؟ 381 00:21:22,000 --> 00:21:24,000 ثم كان لدينا ثلاثة متغيرات. 382 00:21:24,000 --> 00:21:27,000 قدمنا ​​شخص آخر، أربع مجموعات من المتغيرات. 383 00:21:27,000 --> 00:21:30,000 بدأ العالم للحصول فوضى بسرعة كبيرة، 384 00:21:30,000 --> 00:21:33,000 قدم لذلك نحن البنيات، وما هو مقنعة عن البنية؟ 385 00:21:33,000 --> 00:21:39,000 ما هي وظيفة البنية C تسمح لك أن تفعل؟ 386 00:21:39,000 --> 00:21:42,000 انها حقا محرجا اليوم. 387 00:21:42,000 --> 00:21:44,000 ماذا؟ >> [استجابة الطالب غير مسموع] 388 00:21:44,000 --> 00:21:47,000 نعم، على وجه التحديد، typedef يسمح لك لخلق نوع بيانات جديدة، 389 00:21:47,000 --> 00:21:51,000 والبنية، والبنية الكلمة، ويسمح لك لتغليف 390 00:21:51,000 --> 00:21:54,000 من الناحية المفاهيمية المتعلقة قطعة من البيانات معا 391 00:21:54,000 --> 00:21:56,000 وندعو لهم شيء من هذا القبيل بعد ذلك طالب. 392 00:21:56,000 --> 00:21:58,000 >> كان ذلك جيدا لأنه الآن يمكننا تصميم نموذج 393 00:21:58,000 --> 00:22:03,000 نوع أكثر من ذلك بكثير من حيث المفهوم يتفق مفهوم الطالب في متغير 394 00:22:03,000 --> 00:22:07,000 بدلا من الاضطرار بشكل تعسفي واحدة لسلسلة واحدة عن هوية، وهكذا دواليك. 395 00:22:07,000 --> 00:22:10,000 صفائف لطيفة لأنها تسمح لنا لبدء تنظيف لدينا قانون. 396 00:22:10,000 --> 00:22:13,000 ولكن ما هو الجانب السلبي من الآن مجموعة؟ 397 00:22:13,000 --> 00:22:15,000 ماذا يمكنك أن تفعل؟ نعم. 398 00:22:15,000 --> 00:22:17,000 [طالب] عليك أن تعرف كيف انها كبيرة. 399 00:22:17,000 --> 00:22:19,000 عليك أن تعرف كيف انها كبيرة، لذلك نوع من الألم. 400 00:22:19,000 --> 00:22:21,000 تلك التي كنت من ذوي الخبرة يعرفون أن البرمجة السابقة في الكثير من اللغات، 401 00:22:21,000 --> 00:22:24,000 مثل جافا، يمكنك أن تطلب جزءا من الذاكرة، وتحديدا مجموعة، 402 00:22:24,000 --> 00:22:28,000 كيف حالك كبيرة، مع طول، والملكية، إذا جاز التعبير، وهذا حقا مريحة. 403 00:22:28,000 --> 00:22:32,000 في C، لا يمكنك حتى الدعوة الى التوابع strlen على مجموعة عامة 404 00:22:32,000 --> 00:22:35,000 لأن التوابع strlen، كما تدل الكلمة، هو فقط للسلاسل، 405 00:22:35,000 --> 00:22:39,000 ويمكنك معرفة طول سلسلة بسبب هذه الاتفاقية الإنسان 406 00:22:39,000 --> 00:22:43,000 وجود 0 \، ولكن صفيف، أكثر بشكل عام، هو مجرد جزء من الذاكرة. 407 00:22:43,000 --> 00:22:46,000 اذا كان مجموعة من رجات، وهناك لن يكون هناك طابع خاص 408 00:22:46,000 --> 00:22:48,000 في نهاية انتظاركم. 409 00:22:48,000 --> 00:22:50,000 عليك أن تتذكر طول صفيف. 410 00:22:50,000 --> 00:22:54,000 تربى آخر الجانب السلبي من مجموعة الرئيسي في GetString نفسها. 411 00:22:54,000 --> 00:22:59,000 ما هو الجانب السلبي من آخر مجموعة؟ 412 00:22:59,000 --> 00:23:01,000 يا سيدي، فقط أنت وأنا اليوم. 413 00:23:01,000 --> 00:23:04,000 [رد الطالب غير مسموع] >> وهذا ما؟ 414 00:23:04,000 --> 00:23:06,000 انها اعلنت انها على المكدس. 415 00:23:06,000 --> 00:23:09,000 حسنا، أعلن على المكدس. لماذا لا تحب ذلك؟ 416 00:23:09,000 --> 00:23:13,000 [طالب] لأن يحصل إعادة استخدامها. 417 00:23:13,000 --> 00:23:15,000 يحصل إعادة استخدامها. 418 00:23:15,000 --> 00:23:18,000 حسنا، إذا كنت تستخدم مجموعة تخصيص الذاكرة، 419 00:23:18,000 --> 00:23:21,000 لا يمكنك، على سبيل المثال، إعادته لأنه على المكدس. 420 00:23:21,000 --> 00:23:23,000 حسنا، هذا وضع غير مؤات. 421 00:23:23,000 --> 00:23:25,000 وماذا عن الآخر مع مجموعة؟ 422 00:23:25,000 --> 00:23:28,000 بمجرد إحالته، كنت نوع من مشدود إذا كنت بحاجة إلى مساحة أكبر 423 00:23:28,000 --> 00:23:30,000 من ذلك مجموعة لديها. 424 00:23:30,000 --> 00:23:34,000 >> ثم عرض علينا، استدعاء، malloc، الذي أعطانا القدرة على تخصيص حيوي الذاكرة. 425 00:23:34,000 --> 00:23:37,000 ولكن ماذا لو حاولنا عالم مختلف تماما؟ 426 00:23:37,000 --> 00:23:40,000 ماذا لو أردنا أن يحل بعض هذه المشاكل 427 00:23:40,000 --> 00:23:45,000 لذلك نحن بدلا-بلدي انخفض القلم نائما هنا، 428 00:23:45,000 --> 00:23:51,000 ماذا لو كنا نريد لخلق بدلا أساسا عالم لم يعد مثل هذا؟ 429 00:23:51,000 --> 00:23:56,000 هذا هو الصفيف، وبطبيعة الحال، هذا النوع من تدهور وبمجرد أن تصل إلى نهاية الصفيف، 430 00:23:56,000 --> 00:24:00,000 وأنا الآن لم يعد لدينا مساحة للآخر صحيحا أو حرف آخر. 431 00:24:00,000 --> 00:24:03,000 ماذا لو أننا نوع من استباقي يقول حسنا، لماذا لا يتم الاسترخاء 432 00:24:03,000 --> 00:24:07,000 هذا الشرط أن كل هذه أجزاء من الذاكرة متجاورة تكون العودة إلى الوراء، 433 00:24:07,000 --> 00:24:10,000 ولماذا لا، وعندما أحتاج إلى الباحث أو حرف A، 434 00:24:10,000 --> 00:24:12,000 مجرد اعطاء لي مساحة للواحد منهم؟ 435 00:24:12,000 --> 00:24:14,000 وعندما كنت في حاجة أخرى، أعطني مساحة أخرى، 436 00:24:14,000 --> 00:24:16,000 وعندما كنت في حاجة أخرى، أعطني مساحة أخرى. 437 00:24:16,000 --> 00:24:19,000 ميزة الذي هو الآن أنه إذا شخص آخر 438 00:24:19,000 --> 00:24:21,000 يأخذ الذاكرة أكثر من هنا، ليست صفقة كبيرة. 439 00:24:21,000 --> 00:24:25,000 أنا سآخذ هذا جزء من الذاكرة الإضافية هنا ثم هذا واحد. 440 00:24:25,000 --> 00:24:28,000 >> الآن، الصيد الوحيد هنا هو أن هذا يشعر تقريبا مثل ولدي 441 00:24:28,000 --> 00:24:30,000 في مجمله مجموعة من المتغيرات المختلفة. 442 00:24:30,000 --> 00:24:33,000 هذا يبدو وكأنه خمسة متغيرات التي قد تكون مختلفة. 443 00:24:33,000 --> 00:24:36,000 ولكن ماذا لو أننا سرقة فكرة من السلاسل 444 00:24:36,000 --> 00:24:41,000 حيث نربط بطريقة ما هذه الأشياء معا من الناحية النظرية، وماذا لو فعلت هذا؟ 445 00:24:41,000 --> 00:24:44,000 هذا هو بلدي سهم سيئة للغاية مرسومة. 446 00:24:44,000 --> 00:24:46,000 ولكن لنفترض أن كل من هذه القطع من الذاكرة 447 00:24:46,000 --> 00:24:52,000 وأشار إلى أخرى، وهذا الرجل الذي ليس لديه أخ لحقه، 448 00:24:52,000 --> 00:24:54,000 لا يوجد لديه مثل هذه الأسهم. 449 00:24:54,000 --> 00:24:56,000 هذا هو في الواقع ما يسمى قائمة مرتبطة. 450 00:24:56,000 --> 00:25:00,000 هذا هو بنية البيانات الجديدة التي تسمح لنا بتخصيص قطعة من الذاكرة، 451 00:25:00,000 --> 00:25:03,000 ثم آخر، ثم آخر، ثم آخر، في أي وقت نريد 452 00:25:03,000 --> 00:25:07,000 خلال البرنامج، وعلينا أن نتذكر أن أنهم جميعا على نحو ما ذات صلة 453 00:25:07,000 --> 00:25:11,000 بواسطة تسلسل حرفيا فعل بعضهم البعض، ونحن هنا بالصور التي مع سهم. 454 00:25:11,000 --> 00:25:15,000 ولكن في التعليمات البرمجية، ما هي الآلية التي يمكن أن عبر الاتصال بطريقة أو بأخرى، 455 00:25:15,000 --> 00:25:20,000 تقريبا مثل خدش واحد قطعة قطعة إلى أخرى؟ 456 00:25:20,000 --> 00:25:22,000 يمكننا استخدام مؤشر، أليس كذلك؟ 457 00:25:22,000 --> 00:25:25,000 لأن حقا السهم الذي يجري من ساحة أعلى اليسار، 458 00:25:25,000 --> 00:25:31,000 يمكن هذا الرجل هنا لهذا واحد، تحتوي على داخل هذه الساحة 459 00:25:31,000 --> 00:25:34,000 وليس فقط بعض رجات، وليس فقط بعض شار، ولكن ما إذا كنت فعلا المخصصة 460 00:25:34,000 --> 00:25:37,000 ومساحة صغيرة إضافية بحيث الآن، 461 00:25:37,000 --> 00:25:41,000 كل من بلدي قطع من الذاكرة، حتى وإن كان هذا هو الذهاب الى التكاليف لي، 462 00:25:41,000 --> 00:25:45,000 يبدو الآن أكثر قليلا مستطيل حيث واحدة من قطع من الذاكرة 463 00:25:45,000 --> 00:25:47,000 يستخدم لعدد، مثل الرقم 1، 464 00:25:47,000 --> 00:25:50,000 ثم إذا كان هذا الرجل يخزن عدد 2، 465 00:25:50,000 --> 00:25:52,000 يتم استخدام هذه قطعة أخرى من الذاكرة لسهم، 466 00:25:52,000 --> 00:25:54,000 أو على نحو أكثر تحديدا، مؤشر. 467 00:25:54,000 --> 00:25:59,000 وأفترض تخزين رقم 3 أكثر من هنا بينما أنا استخدم هذا للإشارة إلى أن الرجل، 468 00:25:59,000 --> 00:26:02,000 والآن هذا الرجل، دعونا نفترض أريد سوى ثلاث قطع مثل هذه الذاكرة. 469 00:26:02,000 --> 00:26:05,000 أنا رسم خط من خلال ذلك، مشيرا إلى فارغة. 470 00:26:05,000 --> 00:26:07,000 لا يوجد أي حرف إضافية. 471 00:26:07,000 --> 00:26:10,000 >> في الواقع، هذه هي الطريقة التي يمكن أن تذهب نحو تنفيذ 472 00:26:10,000 --> 00:26:12,000 وهو ما يسمى قائمة مرتبطة. 473 00:26:12,000 --> 00:26:18,000 قائمة مرتبطة هو بنية البيانات الجديدة، وانها نقطة انطلاق نحو 474 00:26:18,000 --> 00:26:21,000 هياكل البيانات مربي الحيوانات بكثير التي تبدأ في حل المشاكل 475 00:26:21,000 --> 00:26:23,000 على غرار الفيسبوك من نوع المشاكل ومشاكل من نوع جوجل 476 00:26:23,000 --> 00:26:26,000 حيث لديك مجموعات البيانات الضخمة، وأنه لم يعد يقطع عليه 477 00:26:26,000 --> 00:26:29,000 كل شيء متاخم لتخزين واستخدام شيء من هذا القبيل ابحث عن الخطية 478 00:26:29,000 --> 00:26:31,000 أو شيء من هذا حتى مثل البحث الثنائي. 479 00:26:31,000 --> 00:26:33,000 تريد أفضل أوقات التشغيل. 480 00:26:33,000 --> 00:26:37,000 في الواقع، واحدة من الكؤوس المقدسة المقدسة سوف نتحدث عن هذا في وقت لاحق الاسبوع او الاسبوع القادم 481 00:26:37,000 --> 00:26:41,000 هو خوارزمية التي تشغل وقت ثابت. 482 00:26:41,000 --> 00:26:44,000 وبعبارة أخرى، فإنه يأخذ دائما نفس المقدار من الوقت بغض النظر عن 483 00:26:44,000 --> 00:26:47,000 كيف كبيرة الإدخال، والتي من شأنها أن تكون في الواقع مقنعة، 484 00:26:47,000 --> 00:26:49,000 بل وأكثر من شيء لوغاريتمي. 485 00:26:49,000 --> 00:26:51,000 ما هو هذا على الشاشة هنا؟ 486 00:26:51,000 --> 00:26:55,000 كل من المستطيلات هو بالضبط ما وجهت فقط باليد. 487 00:26:55,000 --> 00:26:59,000 ولكن الشيء على طول الطريق على اليسار هو متغير خاص. 488 00:26:59,000 --> 00:27:02,000 انها سوف تكون مؤشر واحد لأن مسكتك 1 489 00:27:02,000 --> 00:27:04,000 مع قائمة مرتبطة، وتسمى هذه الأشياء، 490 00:27:04,000 --> 00:27:09,000 هو أن لديك للتشبث واحدة من نهاية القائمة المرتبطة. 491 00:27:09,000 --> 00:27:13,000 >> تماما مثل مع سلسلة، عليك أن تعرف عنوان شار الأولى. 492 00:27:13,000 --> 00:27:15,000 نفس الصفقة لقوائم المرتبطة. 493 00:27:15,000 --> 00:27:19,000 عليك أن تعرف عنوان قطعة الأولى من الذاكرة 494 00:27:19,000 --> 00:27:25,000 لأن من هناك، يمكنك الوصول إلى كل واحد الآخر. 495 00:27:25,000 --> 00:27:27,000 الجانب السلبي. 496 00:27:27,000 --> 00:27:30,000 ما هو الثمن نحن اشتري هذه براعة وجود حيوي 497 00:27:30,000 --> 00:27:34,000 لا بأس به هيكل البيانات أنه إذا نحن بحاجة من أي وقت مضى المزيد من الذاكرة، ودفع غرامة، 498 00:27:34,000 --> 00:27:37,000 تخصيص قطعة واحدة فقط أكثر ورسم المؤشر من 499 00:27:37,000 --> 00:27:39,000 القديم إلى الجديد من ذيل القائمة؟ 500 00:27:39,000 --> 00:27:41,000 نعم. 501 00:27:41,000 --> 00:27:43,000 [طالب] ويأخذ مساحة حوالي ضعف ذلك بكثير. 502 00:27:43,000 --> 00:27:45,000 فإنه يأخذ مساحة ضعف ما، لذلك هذا هو بالتأكيد الجانب السلبي، وهذا رأيناه 503 00:27:45,000 --> 00:27:48,000 المفاضلة بين قبل الزمان والمكان والمرونة 504 00:27:48,000 --> 00:27:51,000 حيث حتى الآن، لا نحتاج إلى 32 بت لكل من هذه الأرقام. 505 00:27:51,000 --> 00:27:57,000 نحن حقا بحاجة 64، 32 لعدد 32 لوالمؤشر. 506 00:27:57,000 --> 00:27:59,000 ولكن مهلا، لقد 2 غيغابايت من ذاكرة الوصول العشوائي. 507 00:27:59,000 --> 00:28:02,000 إضافة آخر 32 بت هنا وهنا لا يبدو كبيرا في التوصل الى اتفاق. 508 00:28:02,000 --> 00:28:05,000 ولكن لمجموعات البيانات الكبيرة، فإنه يضيف ما يصل الى الكثير بالتأكيد حرفيا مرتين. 509 00:28:05,000 --> 00:28:09,000 ما هو الجانب السلبي آخر الآن، أو ما لا ميزة تخلينا، 510 00:28:09,000 --> 00:28:12,000 إذا كان لنا أن تمثل قوائم من الأشياء مع قائمة مرتبطة وليس مجموعة؟ 511 00:28:12,000 --> 00:28:14,000 [طالب] لا يمكنك اجتياز إلى الخلف. 512 00:28:14,000 --> 00:28:16,000 لا يمكنك اجتياز الى الوراء، لذلك كنت نوع من مشدود إذا كنت المشي 513 00:28:16,000 --> 00:28:19,000 من اليسار إلى اليمين باستخدام حلقة For أو حلقة في حين 514 00:28:19,000 --> 00:28:21,000 ثم كنت أدرك، "أوه، أنا أريد أن أعود إلى بداية القائمة." 515 00:28:21,000 --> 00:28:26,000 لا يمكنك لأن هذه المؤشرات تذهب فقط من اليسار إلى اليمين كما تبين الأسهم. 516 00:28:26,000 --> 00:28:29,000 >> الآن، هل يمكن أن تذكر في بداية القائمة مع متغير آخر، 517 00:28:29,000 --> 00:28:31,000 ولكن هذا التعقيد أن نأخذ في الاعتبار. 518 00:28:31,000 --> 00:28:35,000 صفيف، بغض النظر عن مدى تذهب، يمكنك أن تفعل دائما ناقص، ناقص، ناقص، ناقص 519 00:28:35,000 --> 00:28:37,000 والعودة من أين جئت. 520 00:28:37,000 --> 00:28:40,000 ما هو الجانب السلبي هنا آخر؟ نعم. 521 00:28:40,000 --> 00:28:43,000 [سؤال الطالب غير مسموع] 522 00:28:43,000 --> 00:28:47,000 هل يمكن، لذلك كنت قد اقترحت في الواقع مجرد هيكل بيانات تسمى قائمة مرتبطة على نحو مضاعف، 523 00:28:47,000 --> 00:28:50,000 وبالفعل، وكنت إضافة آخر مؤشر إلى كل من هذه المستطيلات 524 00:28:50,000 --> 00:28:53,000 الذي يذهب في الاتجاه الآخر، الجانب العلوي منها 525 00:28:53,000 --> 00:28:55,000 الآن يمكنك اجتياز ذهابا وإيابا، 526 00:28:55,000 --> 00:28:59,000 الجانب السلبي منها الآن كنت تستخدم ثلاث مرات قدر الذاكرة كما كنا 527 00:28:59,000 --> 00:29:04,000 وأضاف أيضا من حيث التعقيد من قانون عليك أن تكتب للحصول على ذلك الحق. 528 00:29:04,000 --> 00:29:08,000 ولكن هذه هي ربما جميع المفاضلات معقولة جدا، وإذا كان عكس ما هو أهم. 529 00:29:08,000 --> 00:29:10,000 نعم. 530 00:29:10,000 --> 00:29:12,000 [طالب] أنت أيضا لا يمكن أن يكون على قائمة 2D المرتبطة. 531 00:29:12,000 --> 00:29:16,000 جيد، لا يمكنك حقا قائمة 2D المرتبطة. 532 00:29:16,000 --> 00:29:18,000 يمكن لك. انها ليست سهلة كما تقريبا صفيف. 533 00:29:18,000 --> 00:29:21,000 مثل صفيف، لديك قوس فتح، قوس مغلق، قوس فتح، إغلاق قوس، 534 00:29:21,000 --> 00:29:23,000 وتحصل بعض هيكل 2-الأبعاد. 535 00:29:23,000 --> 00:29:26,000 هل يمكن تنفيذ قائمة 2-الأبعاد مرتبطة 536 00:29:26,000 --> 00:29:29,000 إذا كان لديك الوظيفة الإضافية كما كنت اقترحت-مؤشر ثالث لكل من هذه الأشياء، 537 00:29:29,000 --> 00:29:34,000 وإذا كنت تفكر في آخر قائمة القادمة في لكم نمط 3D 538 00:29:34,000 --> 00:29:40,000 من الشاشة لنا جميعا، والذي هو مجرد سلسلة من نوع ما. 539 00:29:40,000 --> 00:29:45,000 يمكننا أن نفعل ذلك، ولكنها ليست بهذه البساطة كتابة قوس فتح، قوس مربع. نعم. 540 00:29:45,000 --> 00:29:48,000 [سؤال الطالب غير مسموع] 541 00:29:48,000 --> 00:29:50,000 جيدة، لذلك هذا هو كيكر الحقيقي. 542 00:29:50,000 --> 00:29:54,000 >> هذه الخوارزميات التي كانت لدينا أكثر من موهون، مثل أوه، البحث الثنائية، 543 00:29:54,000 --> 00:29:57,000 يمكنك البحث مجموعة من الأرقام على لوحة 544 00:29:57,000 --> 00:30:01,000 أو دليل الهاتف حتى بسرعة أكبر بكثير إذا كنت تستخدم فرق تسد 545 00:30:01,000 --> 00:30:05,000 وتتطلب خوارزمية البحث الثنائي، ولكن البحث الثنائية افتراضين. 546 00:30:05,000 --> 00:30:09,000 واحد، التي تم فرز البيانات. 547 00:30:09,000 --> 00:30:11,000 الآن، يمكننا الحفاظ على هذا يفترض فرزها، 548 00:30:11,000 --> 00:30:14,000 ولذلك ربما يكون هذا ليس مصدر قلق، ولكن يفترض أيضا البحث الثنائية 549 00:30:14,000 --> 00:30:18,000 أن كان لديك الوصول العشوائي إلى قائمة الأرقام، 550 00:30:18,000 --> 00:30:21,000 ومجموعة يسمح لك أن يكون الوصول العشوائي، والوصول العشوائي، 551 00:30:21,000 --> 00:30:24,000 يعني إذا كنت تحصل صفيف، كم من الوقت يستغرق لك 552 00:30:24,000 --> 00:30:26,000 للوصول الى شريحة 0؟ 553 00:30:26,000 --> 00:30:29,000 عملية واحدة، يمكنك استخدام فقط [0]، وكنت هناك. 554 00:30:29,000 --> 00:30:33,000 كم من الوقت يستغرق الخطوات للوصول الى الموقع 10؟ 555 00:30:33,000 --> 00:30:36,000 خطوة واحدة، تذهب فقط ل[10] وكنت هناك. 556 00:30:36,000 --> 00:30:40,000 على النقيض من ذلك، كيف تحصل على العدد الصحيح 10 في قائمة مرتبطة؟ 557 00:30:40,000 --> 00:30:42,000 عليك أن تبدأ في بداية لأنك تذكر فقط 558 00:30:42,000 --> 00:30:45,000 ويجري تذكرت بداية قائمة مرتبطة، تماما مثل سلسلة 559 00:30:45,000 --> 00:30:48,000 من عنوان شار الأولى، وكثافة العمليات لتجد أن 10 560 00:30:48,000 --> 00:30:53,000 أو ذلك الحرف 10th في سلسلة، لديك للبحث في كل شيء لعنة. 561 00:30:53,000 --> 00:30:55,000 >> مرة أخرى، نحن لا حل كل مشاكلنا. 562 00:30:55,000 --> 00:31:00,000 إننا نقدم جديدة، ولكن ذلك يعتمد حقا على ما كنت تحاول تصميم ل. 563 00:31:00,000 --> 00:31:04,000 من حيث تنفيذ هذا، يمكننا استعارة فكرة من هذا الهيكل الطلاب. 564 00:31:04,000 --> 00:31:07,000 بناء الجملة هي مشابهة جدا، إلا الآن، والفكرة هي قليلا أكثر تجريدا 565 00:31:07,000 --> 00:31:09,000 من المنزل واسم ورقم. 566 00:31:09,000 --> 00:31:13,000 ولكن أقترح أن أننا يمكن أن يكون بنية بيانات في C 567 00:31:13,000 --> 00:31:17,000 الذي يسمى عقدة، والكلمة الأخيرة على الشريحة يوحي، 568 00:31:17,000 --> 00:31:21,000 داخل عقدة، وعقدة هو مجرد وعاء عامة في علوم الكمبيوتر. 569 00:31:21,000 --> 00:31:25,000 انها تعادل عادة على أنها دائرة أو مربع أو مستطيل كما فعلناه. 570 00:31:25,000 --> 00:31:27,000 وفي هذا بنية البيانات، لدينا كثافة العمليات، ن، 571 00:31:27,000 --> 00:31:29,000 ذلك أن عدد أريد أن تخزين. 572 00:31:29,000 --> 00:31:36,000 ولكن ما هو هذا الخط الثاني، البنية عقدة * في المرة القادمة؟ 573 00:31:36,000 --> 00:31:40,000 لماذا هذا صحيح، أو ما هو الدور الذي يلعبه هذا الشيء، 574 00:31:40,000 --> 00:31:42,000 على الرغم من انها قليلا خفي للوهلة الأولى؟ 575 00:31:42,000 --> 00:31:44,000 نعم. 576 00:31:44,000 --> 00:31:46,000 [رد الطالب غير مسموع] 577 00:31:46,000 --> 00:31:50,000 بالضبط، لذلك هذا النوع من الغنائم * أنه مؤشر من نوع ما. 578 00:31:50,000 --> 00:31:53,000 اسم هذا المؤشر القادمة بشكل تعسفي، 579 00:31:53,000 --> 00:32:00,000 ولكن يمكن أن يكون أي شيء كنا نسميها نحن نريد، ولكن ماذا يعني هذا المؤشر إلى نقطة؟ 580 00:32:00,000 --> 00:32:03,000 [طالب] عقدة أخرى. >> بالضبط، فإنه يشير إلى عقدة أخرى من هذا القبيل. 581 00:32:03,000 --> 00:32:05,000 >> الآن، وهذا هو نوع من الفضول من C. 582 00:32:05,000 --> 00:32:09,000 يذكر أن للقراءة من قبل أحد كبار C مترجم إلى الأسفل، اليسار إلى اليمين، 583 00:32:09,000 --> 00:32:13,000 وهو ما يعني إذا، هذا هو مختلفة قليلا عن ما فعلناه مع الطالب. 584 00:32:13,000 --> 00:32:16,000 عندما كنا تعريف الطالب، ونحن في الواقع لم يضع كلمة هناك. 585 00:32:16,000 --> 00:32:18,000 وقالت typedef فقط. 586 00:32:18,000 --> 00:32:20,000 ثم كان لدينا اسم الباحث معرف سلسلة،، سلسلة المنزل، 587 00:32:20,000 --> 00:32:23,000 ومن ثم طالب في الجزء السفلي من البنية. 588 00:32:23,000 --> 00:32:26,000 هذا الإعلان هو مختلف قليلا لأنه، 589 00:32:26,000 --> 00:32:28,000 مرة أخرى، مترجم C قليلا البكم. 590 00:32:28,000 --> 00:32:30,000 انها لن يؤدي الا الى قراءة أعلى إلى أسفل، 591 00:32:30,000 --> 00:32:33,000 إذا كان الأمر كذلك وصولها إلى خط 2 هنا 592 00:32:33,000 --> 00:32:37,000 حيث أعلن المقبل، ويرى أنه، أوه، ها هي متغير يسمى المقبل. 593 00:32:37,000 --> 00:32:39,000 انها مؤشر إلى البنية عقدة. 594 00:32:39,000 --> 00:32:42,000 المترجم هو الذهاب الى تحقيق ما هو عقدة البنية؟ 595 00:32:42,000 --> 00:32:44,000 لم اسمع ابدا من هذا الشيء من قبل، 596 00:32:44,000 --> 00:32:47,000 لأنه قد العقدة لا تظهر إلا كلمة 597 00:32:47,000 --> 00:32:49,000 حتى القاع، حتى لا يكون هناك هذا التكرار. 598 00:32:49,000 --> 00:32:53,000 لديك لتقوله هنا العقدة البنية، والتي يمكنك تقصير ثم في وقت لاحق 599 00:32:53,000 --> 00:32:56,000 بفضل typedef إلى هنا، ولكن هل هذا بسبب 600 00:32:56,000 --> 00:33:02,000 نحن الرجوع إلى هيكل نفسه داخل الهيكل. 601 00:33:02,000 --> 00:33:05,000 هذا هو مسكتك أحد هناك. 602 00:33:05,000 --> 00:33:07,000 >> بعض المشاكل للاهتمام سوف تنشأ. 603 00:33:07,000 --> 00:33:09,000 لدينا قائمة من الأرقام. كيف يمكننا إدراجها في ذلك؟ 604 00:33:09,000 --> 00:33:11,000 كيف يمكننا البحث عنها؟ كيف يمكننا حذف منه؟ 605 00:33:11,000 --> 00:33:13,000 خاصة الآن أن لدينا لإدارة كل من هذه المؤشرات. 606 00:33:13,000 --> 00:33:15,000 فكرت المؤشرات كانت نوع من الانحناء العقل 607 00:33:15,000 --> 00:33:17,000 عندما كان لديك واحد منهم مجرد محاولة لقراءة الباحث لذلك. 608 00:33:17,000 --> 00:33:20,000 الآن لدينا لمعالجة يستحق قائمة بأكمله. 609 00:33:20,000 --> 00:33:22,000 لماذا لا نأخذ لدينا 5 دقائق استراحة هنا، ومن ثم سوف نأتي 610 00:33:22,000 --> 00:33:34,000 بعض الناس حتى على خشبة المسرح لذلك تماما. 611 00:33:34,000 --> 00:33:36,000 >> C هو متعة أكثر من ذلك بكثير عندما يكون تصرف بها. 612 00:33:36,000 --> 00:33:39,000 والذين يحبون أن يكون حرفيا الأول؟ 613 00:33:39,000 --> 00:33:41,000 حسنا، وتأتي على ما يصل. كنت الأول. 614 00:33:41,000 --> 00:33:44,000 والذي أحب أن أكون 9؟ حسنا، 9. 615 00:33:44,000 --> 00:33:46,000 ماذا عن 9؟ 17؟ 616 00:33:46,000 --> 00:33:51,000 A زمرة قليلا هنا. 22 و 26 في هذا الصف. 617 00:33:51,000 --> 00:33:53,000 ثم ماذا عن شخص ما يجري هناك وأشار في. 618 00:33:53,000 --> 00:33:57,000 كنت 34. حسنا، 34، وتأتي على ما يصل. 619 00:33:57,000 --> 00:33:59,000 الأول هو هناك. حسنا، كل أربعة من يا رفاق. 620 00:33:59,000 --> 00:34:01,000 والذين لم نقول لمدة 9؟ 621 00:34:01,000 --> 00:34:04,000 الذي هو 9 لدينا؟ 622 00:34:04,000 --> 00:34:07,000 الذي يريد حقا أن تكون 9؟ حسنا، هيا، هو 9. 623 00:34:07,000 --> 00:34:10,000 هنا نذهب. 624 00:34:10,000 --> 00:34:13,000 34، سوف نلتقي كنت هناك. 625 00:34:13,000 --> 00:34:17,000 الجزء الأول هو جعل أنفسكم ننظر من هذا القبيل. 626 00:34:17,000 --> 00:34:21,000 26، 22، 17، جيدة. 627 00:34:21,000 --> 00:34:25,000 إذا كنت تستطيع الوقوف قبالة إلى الجانب، لأننا ذاهبون الى malloc كنت في لحظة. 628 00:34:25,000 --> 00:34:29,000 >> جيد، جيد. 629 00:34:29,000 --> 00:34:32,000 حسنا، ممتاز، لذلك دعونا نسأل بضعة أسئلة هنا. 630 00:34:32,000 --> 00:34:34,000 وفعلا، ما هو اسمك؟ >> أنيتا. 631 00:34:34,000 --> 00:34:37,000 أنيتا، حسنا، هيا أكثر من هنا. 632 00:34:37,000 --> 00:34:41,000 أنيتا سوف تساعدنا نوع من حل سؤال واحد بسيط إلى حد ما في الأولى، 633 00:34:41,000 --> 00:34:44,000 وهو كيف تجد ما إذا كان أو لم يكن هو قيمة في القائمة؟ 634 00:34:44,000 --> 00:34:48,000 الآن، لاحظ أن الأولى، الممثلة هنا لوكاس، 635 00:34:48,000 --> 00:34:52,000 هي مختلفة قليلا، وهكذا قطعة من الورق له هو جانبية عمدا 636 00:34:52,000 --> 00:34:55,000 لأنه ليس طويل القامة جدا كما ولا تتناول، حسب العديد من معاهدات الاستثمار الثنائية، 637 00:34:55,000 --> 00:34:58,000 على الرغم من الناحية الفنية لديه نفس الحجم من الورق تناوب فقط. 638 00:34:58,000 --> 00:35:01,000 لكنه مختلف قليلا في أنه فقط 32 بت لمؤشر، 639 00:35:01,000 --> 00:35:05,000 وجميع هؤلاء الرجال 64 بت، نصفها هو عدد نصفها هو مؤشر. 640 00:35:05,000 --> 00:35:08,000 ولكن لم يتم تصوير المؤشر، لذلك إذا يا رفاق يمكن برعونة إلى حد ما 641 00:35:08,000 --> 00:35:12,000 استخدام اليد اليسرى للإشارة إلى الشخص إلى جانبك. 642 00:35:12,000 --> 00:35:14,000 وكنت رقم 34. ما هو اسمك؟ 643 00:35:14,000 --> 00:35:16,000 آري. 644 00:35:16,000 --> 00:35:19,000 آري، في الواقع كذلك، فاضغط الورقة التي في يدك اليمنى، واليد اليسرى يذهب مباشرة إلى الأسفل. 645 00:35:19,000 --> 00:35:21,000 أنت ممثل فارغة على اليمين. 646 00:35:21,000 --> 00:35:24,000 >> الآن لدينا صور الإنسان هو متسقة للغاية. 647 00:35:24,000 --> 00:35:26,000 هذا هو في الواقع كيف مؤشرات العمل. 648 00:35:26,000 --> 00:35:29,000 وإذا كنت تستطيع قطب قليلا بهذه الطريقة لذلك أنا لست في طريقك. 649 00:35:29,000 --> 00:35:34,000 أنيتا هنا، تجد لي عدد 22، 650 00:35:34,000 --> 00:35:40,000 ولكن تفترض القيد من البشر لا يمسك قطعة من الورق، 651 00:35:40,000 --> 00:35:43,000 ولكن هذا هو قائمة، وأنك لا تملك إلا لوكاس لتبدأ 652 00:35:43,000 --> 00:35:46,000 لأنه هو حرفيا المؤشر الأول. 653 00:35:46,000 --> 00:35:51,000 افترض أنك نفسك هي المؤشر، وحتى يكون لديك أيضا القدرة على الإشارة إلى شيء. 654 00:35:51,000 --> 00:35:56,000 لماذا لا تبدأ بالإشارة إلى ما بالضبط لوكاس يشير في؟ 655 00:35:56,000 --> 00:35:58,000 جيدة، واسمحوا لي أن تسن من ذلك أكثر من هنا. 656 00:35:58,000 --> 00:36:04,000 لمجرد النقاش، اسمحوا لي سحب ما يصل إلى صفحة فارغة هنا. 657 00:36:04,000 --> 00:36:06,000 كيف تتهجى اسمك؟ >> أنيتا. 658 00:36:06,000 --> 00:36:08,000 حسنا، أنيتا. 659 00:36:08,000 --> 00:36:18,000 دعنا نقول عقدة * = أنيتا لوكاس. 660 00:36:18,000 --> 00:36:22,000 حسنا، لا ينبغي لنا أن ندعو لكم لوكاس. ينبغي لنا أن ندعو لكم الأولى. 661 00:36:22,000 --> 00:36:25,000 لماذا هذا في الواقع يتفق مع الواقع هنا؟ 662 00:36:25,000 --> 00:36:27,000 واحد، أولا موجود مسبقا. 663 00:36:27,000 --> 00:36:30,000 وقد تم تخصيص مكان ما يفترض أولا حتى هنا. 664 00:36:30,000 --> 00:36:35,000 * العقدة الأولى، وانها تم تخصيص قائمة على نحو ما. 665 00:36:35,000 --> 00:36:37,000 أنا لا أعرف كيف حدث ذلك. حدث ذلك من قبل الطبقة بدأت. 666 00:36:37,000 --> 00:36:40,000 تم إنشاء هذه القائمة مرتبطة من البشر. 667 00:36:40,000 --> 00:36:44,000 والآن في هذه المرحلة من القصة، هذا يحدث كل شيء على ما يبدو في وقت لاحق في الفيسبوك- 668 00:36:44,000 --> 00:36:49,000 في هذه المرحلة من القصة، تمت تهيئة أنيتا لتكون مساوية لأول، 669 00:36:49,000 --> 00:36:51,000 وهذا لا يعني أن نقاط أنيتا في لوكاس. 670 00:36:51,000 --> 00:36:53,000 بدلا من ذلك، فإنها تشير إلى ما يشير في 671 00:36:53,000 --> 00:36:57,000 لأن نفس العنوان وهذا من داخل 32 بت لوكاس - 1، 2، 3 - 672 00:36:57,000 --> 00:37:01,000 الآن داخل أيضا 32 بت أنيتا - 1، 2، 3. 673 00:37:01,000 --> 00:37:05,000 >> الآن العثور على 22. كيف يمكنك أن تذهب نحو القيام بذلك؟ 674 00:37:05,000 --> 00:37:07,000 ما هذه النقطة؟ >> لأيا كان. 675 00:37:07,000 --> 00:37:11,000 إشارة إلى ما، لذلك يذهب إلى الأمام والعمل بها أفضل ما يمكنك هنا. 676 00:37:11,000 --> 00:37:15,000 جيد، جيد، والآن كنت لافتا في، ما هو اسمك مع 22؟ 677 00:37:15,000 --> 00:37:18,000 رامون. >> رامون، رامون لذلك هو عقد بزيادة 22. 678 00:37:18,000 --> 00:37:20,000 كنت قد فعلت الآن الاختيار. 679 00:37:20,000 --> 00:37:24,000 لا رامون == 22، وإذا كان الأمر كذلك، على سبيل المثال، يمكننا العودة الحقيقية. 680 00:37:24,000 --> 00:37:26,000 اسمحوا لي، في حين هؤلاء الرجال نقف هنا بعض الشيء مؤلم، 681 00:37:26,000 --> 00:37:32,000 اسمحوا لي أن تفعل شيئا بسرعة مثل BOOL العثور عليها. 682 00:37:32,000 --> 00:37:37,000 انا ذاهب الى المضي قدما ويقول (عقدة * قائمة، وكثافة العمليات ن). 683 00:37:37,000 --> 00:37:39,000 سأعود مع الحق يا رفاق. أنا فقط لكتابة بعض التعليمات البرمجية. 684 00:37:39,000 --> 00:37:45,000 والآن انا ذاهب الى المضي قدما ونفعل ذلك، عقدة * قائمة = أنيتا. 685 00:37:45,000 --> 00:37:51,000 وانا ذاهب الى المضي قدما ويقول في حين أن (أنيتا! = NULL). 686 00:37:51,000 --> 00:37:57,000 >> استعارة هنا هو الحصول على القليل امتدت، ولكن في حين أن (أنيتا! = NULL)، ماذا أريد أن أفعل؟ 687 00:37:57,000 --> 00:38:03,000 انا بحاجة الى بعض طريق الرجوع 688 00:38:03,000 --> 00:38:05,000 العدد الصحيح الذي يشير في أنيتا. 689 00:38:05,000 --> 00:38:08,000 في الماضي، عندما كان لدينا الهياكل، والتي هي عقدة، 690 00:38:08,000 --> 00:38:11,000 استخدمنا نقطة تدوين، وكنا نقول شيء من هذا القبيل 691 00:38:11,000 --> 00:38:15,000 anita.n، ولكن المشكلة هنا هي أن أنيتا ليس البنية في حد ذاتها. 692 00:38:15,000 --> 00:38:17,000 ما هي؟ 693 00:38:17,000 --> 00:38:21,000 انها مؤشر، حقا ذلك، إذا كنا نريد لاستخدام هذه النقطة، تدوين 694 00:38:21,000 --> 00:38:23,000 وهذا هو الذهاب الى نظرة عمدا قليلا خفي- 695 00:38:23,000 --> 00:38:28,000 علينا أن نفعل شيئا مثل الذهاب الى جهة اليسار مهما كانت أنيتا يشير في 696 00:38:28,000 --> 00:38:31,000 وثم الحصول على حقل يسمى ن. 697 00:38:31,000 --> 00:38:35,000 أنيتا هو مؤشر، ولكن ما هو * أنيتا؟ 698 00:38:35,000 --> 00:38:38,000 ما رأيكم عندما تذهب إلى ما أنيتا يشير في؟ 699 00:38:38,000 --> 00:38:42,000 A البنية، عقدة، عقدة والتذكير،، لديها حقل يسمى N 700 00:38:42,000 --> 00:38:47,000 لأنه، أذكر، هذه الحقول 2، و n المقبل، 701 00:38:47,000 --> 00:38:50,000 أن رأينا قبل لحظة هنا. 702 00:38:50,000 --> 00:38:53,000 >> لتقليد الواقع هذا في التعليمات البرمجية، 703 00:38:53,000 --> 00:39:02,000 يمكننا القيام بذلك والقول ما اذا كان ((* أنيتا). == ن ن)، ن أنني أبحث عنه. 704 00:39:02,000 --> 00:39:04,000 تلاحظ أن صدر وظيفة في عدد يهمني. 705 00:39:04,000 --> 00:39:10,000 بعد ذلك يمكنني أن نمضي قدما ونفعل شيئا مثل العودة الحقيقية. 706 00:39:10,000 --> 00:39:12,000 آخر، إذا كان هذا ليس هو الحال، ماذا أريد أن أفعل؟ 707 00:39:12,000 --> 00:39:19,000 كيف يمكنني ترجمة لرمز ما فعل حدسي أنيتا ذلك عن طريق المشي خلال قائمة؟ 708 00:39:19,000 --> 00:39:26,000 ماذا علي أن أفعل هنا لمحاكاة أنيتا اتخاذ هذه الخطوة إلى اليسار، هذه الخطوة إلى اليسار؟ 709 00:39:26,000 --> 00:39:28,000 [رد الطالب غير مسموع] >> ما هذا؟ 710 00:39:28,000 --> 00:39:30,000 [رد الطالب غير مسموع] 711 00:39:30,000 --> 00:39:34,000 جيدة، ليست فكرة سيئة، ولكن في الماضي، عندما كنا قد فعلت ذلك، لقد فعلنا أنيتا + + 712 00:39:34,000 --> 00:39:37,000 لأن ذلك من شأنه أن يضيف الرقم 1 إلى أنيتا، 713 00:39:37,000 --> 00:39:40,000 الأمر الذي يشير عادة في الشخص التالي، مثل رامون، 714 00:39:40,000 --> 00:39:44,000 أو الشخص التالي له، أو بجانبه شخص على طول الطريق. 715 00:39:44,000 --> 00:39:49,000 ولكن هذا ليس جيدا جدا هنا، لأن ما هذا الشيء لا تبدو في الذاكرة؟ 716 00:39:49,000 --> 00:39:54,000 لا ذلك. لدينا لتعطيل ذلك. 717 00:39:54,000 --> 00:40:00,000 يبدو مثل هذا في الذاكرة، ورغم أنني كنت تعادل 1 و 2 و 3 على مقربة من بعضها البعض، 718 00:40:00,000 --> 00:40:03,000 إذا كنا حقا محاكاة هذا CAN-يا رفاق، في حين لا يزال في افتا نفس الأشخاص، 719 00:40:03,000 --> 00:40:07,000 يمكن البعض منكم اتخاذ خطوة إلى الوراء عشوائية، البعض منكم خطوة إلى الأمام عشوائية؟ 720 00:40:07,000 --> 00:40:10,000 >> هذه الفوضى لا تزال قائمة مرتبط، 721 00:40:10,000 --> 00:40:13,000 ولكن يمكن أن يكون هؤلاء الرجال في أي مكان في الذاكرة، 722 00:40:13,000 --> 00:40:15,000 حتى أنيتا + + لن تعمل لماذا؟ 723 00:40:15,000 --> 00:40:19,000 ما هو على الموقع أنيتا + +؟ 724 00:40:19,000 --> 00:40:21,000 من يدري. 725 00:40:21,000 --> 00:40:24,000 انها بعض قيمة أخرى مجرد أن ذلك يحدث أن يكون موسط 726 00:40:24,000 --> 00:40:28,000 من بين جميع هذه العقد عن طريق الصدفة لأننا لا تستخدم صفيف. 727 00:40:28,000 --> 00:40:30,000 خصصنا لكل من هذه العقد بشكل فردي. 728 00:40:30,000 --> 00:40:32,000 حسنا، إذا يا رفاق يمكن تنظيف أنفسكم النسخ الاحتياطي. 729 00:40:32,000 --> 00:40:37,000 اسمحوا لي أن أقترح أن أنيتا أنيتا بدلا من +، ونحن نفعل بدلا + يحصل- 730 00:40:37,000 --> 00:40:42,000 حسنا، لماذا لا نذهب إلى ما أنيتا يشير في وثم القيام بها في المرة القادمة؟ 731 00:40:42,000 --> 00:40:45,000 وبعبارة أخرى، نذهب إلى رامون، الذي هو عقد عدد 22، 732 00:40:45,000 --> 00:40:51,000 وبعد ذلك. التالي كما لو أنيتا سيتم نسخ مؤشر يده اليسرى. 733 00:40:51,000 --> 00:40:54,000 ولكن قالت إنها لا تذهب أبعد من رامون لأننا وجدنا 22. 734 00:40:54,000 --> 00:40:56,000 ولكن ذلك سيكون على هذه الفكرة. الآن، وهذا هو فوضى فظيعة الله. 735 00:40:56,000 --> 00:40:59,000 بصراحة، لا أحد من أي وقت مضى تذكر هذه الجملة، ولله الحمد كان الأمر كذلك، 736 00:40:59,000 --> 00:41:04,000 انها في الواقع قليلا المتعمد أوه، كنت لا ترى في الواقع ما كتبت. 737 00:41:04,000 --> 00:41:08,000 وهذا سيكون أكثر إقناعا لو تفضلتم. فويلا! 738 00:41:08,000 --> 00:41:10,000 >> وراء الكواليس، وكنت حل مشكلة بهذه الطريقة. 739 00:41:10,000 --> 00:41:14,000 أنيتا، لاتخاذ هذه الخطوة إلى اليسار، 740 00:41:14,000 --> 00:41:18,000 أولا، نحن لا تذهب إلى العنوان الذي يشير في أنيتا 741 00:41:18,000 --> 00:41:23,000 وقالت انها سوف تجد فيها ليس فقط ن، والتي بحثنا فقط لغرض المقارنة، 742 00:41:23,000 --> 00:41:25,000 ولكن سوف تجد أيضا بجوار - في هذه الحالة، 743 00:41:25,000 --> 00:41:28,000 ومن جهة اليسار رامون مشيرا إلى عقدة التالي في القائمة. 744 00:41:28,000 --> 00:41:32,000 ولكن هذه هي الفوضى الله فظيعة الذي أشرت إليه في وقت سابق، 745 00:41:32,000 --> 00:41:34,000 ولكن تبين C يتيح لنا هذا تبسيط. 746 00:41:34,000 --> 00:41:40,000 بدلا من كتابة (* أنيتا)، يمكننا بدلا من ذلك مجرد كتابة أنيتا-> ن، 747 00:41:40,000 --> 00:41:45,000 وانها نفس الشيء بالضبط وظيفيا، ولكن الكثير أكثر سهولة، 748 00:41:45,000 --> 00:41:48,000 وانها الكثير أكثر اتساقا مع الصورة التي كنا الرسم 749 00:41:48,000 --> 00:41:50,000 كل هذا الوقت باستخدام السهام. 750 00:41:50,000 --> 00:41:57,000 >> وأخيرا، ماذا علينا أن نفعل في نهاية هذا البرنامج؟ 751 00:41:57,000 --> 00:42:00,000 هناك سطر واحد من التعليمات البرمجية المتبقية. 752 00:42:00,000 --> 00:42:02,000 العودة ماذا؟ 753 00:42:02,000 --> 00:42:05,000 كاذبة، لأنه إذا كنا من خلال الحصول على كامل بينما حلقة 754 00:42:05,000 --> 00:42:10,000 وأنيتا هو، في الواقع، فارغة، وهذا يعني أنها ذهبت على طول الطريق إلى نهاية القائمة 755 00:42:10,000 --> 00:42:12,000 حيث كانت لافتا في، ما هو اسم الخاص بك مرة أخرى؟ 756 00:42:12,000 --> 00:42:15,000 آري. >> أري في اليد اليسرى، والتي هي فارغة. 757 00:42:15,000 --> 00:42:18,000 أنيتا الآن فارغة، وأنا أدرك أنك مجرد الوقوف هنا برعونة في طي النسيان 758 00:42:18,000 --> 00:42:21,000 لأنني ذاهب من هنا على المونولوج، 759 00:42:21,000 --> 00:42:23,000 ولكن سوف نشرك بك مرة أخرى في لحظة واحدة. 760 00:42:23,000 --> 00:42:27,000 أنيتا فارغة عند هذه النقطة في القصة، وبالتالي فإن إنهاء حلقة في حين، 761 00:42:27,000 --> 00:42:30,000 وعلينا أن عودة كاذبة لأنه إذا حصلت كل وسيلة لاري في مؤشر فارغة 762 00:42:30,000 --> 00:42:34,000 ثم لم يكن هناك عدد بأنها سعت في القائمة. 763 00:42:34,000 --> 00:42:39,000 يمكننا بتنظيف هذا أيضا، ولكن هذا هو تطبيق جيد جدا ثم 764 00:42:39,000 --> 00:42:43,000 وظيفة اجتياز، وإيجاد وظيفة للحصول على قائمة مرتبطة. 765 00:42:43,000 --> 00:42:48,000 ما زال البحث الخطية، ولكنها ليست بهذه البساطة + + مؤشر 766 00:42:48,000 --> 00:42:52,000 أو + + متغير لأن أنا الآن لا يمكننا تخمين 767 00:42:52,000 --> 00:42:54,000 حيث كل من هذه العقد هي في الذاكرة. 768 00:42:54,000 --> 00:42:57,000 علينا أن نتبع حرفيا درب من فتات الخبز أو بشكل أكثر تحديدا، 769 00:42:57,000 --> 00:43:00,000 مؤشرات، ليقطع الطريق من عقدة إلى أخرى. 770 00:43:00,000 --> 00:43:02,000 >> الآن دعونا نحاول واحد آخر. أنيتا، هل تريد أن تأتي إلى هنا؟ 771 00:43:02,000 --> 00:43:06,000 لماذا لا يتم المضي قدما في تخصيص شخص واحد آخر من الجمهور؟ 772 00:43:06,000 --> 00:43:08,000 Malloc، ما اسمك؟ >> ريبيكا. 773 00:43:08,000 --> 00:43:10,000 ريبيكا. وقد malloced ريبيكا من الجمهور، 774 00:43:10,000 --> 00:43:13,000 وأنها الآن تخزين عدد 55. 775 00:43:13,000 --> 00:43:17,000 والهدف في متناول اليد الآن لأنيتا لإدراج 776 00:43:17,000 --> 00:43:22,000 ريبيكا في قائمة مرتبطة هنا في مكانها المناسب. 777 00:43:22,000 --> 00:43:24,000 تعال هنا للحظة. 778 00:43:24,000 --> 00:43:28,000 لقد فعلت شيئا من هذا القبيل. 779 00:43:28,000 --> 00:43:32,000 وقد فعلت * العقدة. وما هو اسم الخاص بك مرة أخرى؟ 780 00:43:32,000 --> 00:43:34,000 ريبيكا. >> ريبيكا، حسنا. 781 00:43:34,000 --> 00:43:41,000 ريبيكا يحصل malloc (sizeof (عقدة)). 782 00:43:41,000 --> 00:43:44,000 تماما مثل خصصنا أشياء مثل الطلاب وwhatnot في الماضي، 783 00:43:44,000 --> 00:43:46,000 نحن بحاجة إلى حجم العقدة، حتى الآن ريبيكا 784 00:43:46,000 --> 00:43:49,000 يتم الإشارة إلى ما؟ 785 00:43:49,000 --> 00:43:52,000 ريبيكا حقلين داخل بلدها، واحدة منها هو 55. 786 00:43:52,000 --> 00:43:55,000 دعونا نفعل ما، ريبيكا-> = 55. 787 00:43:55,000 --> 00:44:00,000 ولكن بعد ذلك ريبيكا-> التالي ينبغي أن تشبه في الوقت الحالي، يدها هو نوع من يدري؟ 788 00:44:00,000 --> 00:44:03,000 انها لافتا في بعض القيمة القمامة، لذلك لماذا لا لحسن التدبير 789 00:44:03,000 --> 00:44:07,000 نحن على الأقل القيام بذلك بحيث اليد اليسرى الآن في جانبها. 790 00:44:07,000 --> 00:44:09,000 أنيتا الآن، أعتبر من هنا. 791 00:44:09,000 --> 00:44:11,000 لديك بعد أن تم تخصيص ريبيكا. 792 00:44:11,000 --> 00:44:20,000 والمضي قدما في العثور على مكان يجب وضع ريبيكا. 793 00:44:20,000 --> 00:44:25,000 جيد، جيد جدا. 794 00:44:25,000 --> 00:44:28,000 حسنا، جيد، والآن نحن بحاجة لكم لتوفير قليلا من اتجاه، 795 00:44:28,000 --> 00:44:30,000 حتى لقد وصلت إلى آري. 796 00:44:30,000 --> 00:44:33,000 يده اليسرى فارغة، ولكن ريبيكا ينتمي بوضوح إلى اليمين، 797 00:44:33,000 --> 00:44:36,000 فكيف علينا أن تغيير هذه القائمة مرتبطة 798 00:44:36,000 --> 00:44:38,000 من أجل إدراج ريبيكا في المكان المناسب؟ 799 00:44:38,000 --> 00:44:42,000 إذا كنت يمكن أن تتحرك حرفيا أيدي الناس في جميع أنحاء اليسرى حسب الحاجة، 800 00:44:42,000 --> 00:44:48,000 سنقوم حل المشكلة بهذه الطريقة. 801 00:44:48,000 --> 00:44:52,000 حسنا، جيد، وفي الوقت نفسه، ومن ناحية اليسار ريبيكا الآن إلى جانبها. 802 00:44:52,000 --> 00:44:54,000 >> كان من السهل جدا. 803 00:44:54,000 --> 00:44:57,000 دعونا نحاول القيام به تخصيص-we're تقريبا، 20. 804 00:44:57,000 --> 00:44:59,000 حسنا، وتأتي على ما يصل. 805 00:44:59,000 --> 00:45:04,000 وقد تم تخصيص 20، لذلك اسمحوا لي المضي قدما وأقول مرة أخرى هنا 806 00:45:04,000 --> 00:45:07,000 لقد فعلنا فقط عقدة سعد *. 807 00:45:07,000 --> 00:45:11,000 لدينا malloc (sizeof (عقدة)). 808 00:45:11,000 --> 00:45:16,000 ثم نفعل نفس بناء الجملة بالضبط كما فعلنا من قبل لمدة 20، 809 00:45:16,000 --> 00:45:20,000 وسوف أفعل بعد ذلك = NULL، والآن الامر متروك أنيتا 810 00:45:20,000 --> 00:45:23,000 لإدراج لكم في قائمة مرتبطة، إذا كنت يمكن أن يلعب هذا الدور بالضبط نفس. 811 00:45:23,000 --> 00:45:30,000 تنفيذ. 812 00:45:30,000 --> 00:45:32,000 حسنا، جيد. 813 00:45:32,000 --> 00:45:38,000 أعتقد الآن بعناية قبل بدء التحرك أيدي اليسار حولها. 814 00:45:38,000 --> 00:45:46,000 كنت حتى الآن حصلت على دور الأكثر حساسية اليوم. 815 00:45:46,000 --> 00:45:59,000 يجب أن يتم نقل اليد التي الأول؟ 816 00:45:59,000 --> 00:46:02,000 حسنا، انتظر، أسمع بعض لم يتم. 817 00:46:02,000 --> 00:46:07,000 اذا كان بعض الناس يحبون بأدب للمساعدة في حل وضع حرج هنا. 818 00:46:07,000 --> 00:46:11,000 يجب أن يتم تحديث اليد اليسرى التي ربما الأول؟ نعم. 819 00:46:11,000 --> 00:46:13,000 [طالب] لسعد. 820 00:46:13,000 --> 00:46:15,000 حسنا، لسعد، لماذا، على الرغم من؟ 821 00:46:15,000 --> 00:46:17,000 [رد الطالب غير مسموع] 822 00:46:17,000 --> 00:46:19,000 جيد، لأنه إذا ما انتقلنا-اسمك؟ >> مارشال. 823 00:46:19,000 --> 00:46:22,000 مارشال، واذا كنا تحريك يده أول ما نزل إلى فارغة، 824 00:46:22,000 --> 00:46:25,000 الآن وقد اليتامى نحن حرفيا أربعة أشخاص في هذه القائمة 825 00:46:25,000 --> 00:46:29,000 لأنه كان الشيء الوحيد افتا في رامون والجميع إلى اليسار، 826 00:46:29,000 --> 00:46:31,000 تحديث بحيث كان أول مؤشر سيء. 827 00:46:31,000 --> 00:46:33,000 دعونا التراجع عن ذلك. 828 00:46:33,000 --> 00:46:37,000 جيدة، والآن المضي قدما وتحريك اليد اليسرى المناسبة لافتا في رامون. 829 00:46:37,000 --> 00:46:39,000 هذا يشعر زائدة قليلا. 830 00:46:39,000 --> 00:46:41,000 الآن هناك شخصين لافتا في رامون، ولكن هذا شيء طيب 831 00:46:41,000 --> 00:46:43,000 لأنه الآن وإلا كيف يمكننا تحديث قائمة؟ 832 00:46:43,000 --> 00:46:48,000 ومن جهة أخرى ما لديه للانتقال؟ 833 00:46:48,000 --> 00:46:53,000 ممتازة، والآن فقدنا أي ذاكرة؟ 834 00:46:53,000 --> 00:46:57,000 لا، جيدة جدا، دعونا نرى ما اذا كنا نستطيع كسر هذا لا مرة أخرى. 835 00:46:57,000 --> 00:47:00,000 >> Mallocing للمرة الأخيرة، عدد 5. 836 00:47:00,000 --> 00:47:04,000 على طول الطريق في الظهر، هيا. 837 00:47:04,000 --> 00:47:08,000 انها مثيرة للغاية. 838 00:47:08,000 --> 00:47:15,000 [تصفيق] 839 00:47:15,000 --> 00:47:17,000 ما هو اسمك؟ >> رون. 840 00:47:17,000 --> 00:47:19,000 رون، حسنا، وmalloced لكم ورقم 5. 841 00:47:19,000 --> 00:47:23,000 لقد قمنا بتنفيذ التعليمات البرمجية فقط وهذا مطابق تقريبا لهذه 842 00:47:23,000 --> 00:47:26,000 مع اسم واحد فقط مختلفة. 843 00:47:26,000 --> 00:47:28,000 ممتازة. 844 00:47:28,000 --> 00:47:38,000 الآن، أنيتا، وحسن الحظ إدراج رقم 5 في قائمة الآن. 845 00:47:38,000 --> 00:47:43,000 جيدة، و؟ 846 00:47:43,000 --> 00:47:47,000 ممتازة، لذلك هذا هو حقا ثالث ثلاثة مجموع الحالات. 847 00:47:47,000 --> 00:47:49,000 كان أول شخص ونحن في النهاية، ربيكا. 848 00:47:49,000 --> 00:47:51,000 ثم كان لدينا شخص في الوسط. 849 00:47:51,000 --> 00:47:53,000 الآن لدينا شخص في البداية، وفي هذا المثال، 850 00:47:53,000 --> 00:47:56,000 كان لدينا الآن لتحديث لوكاس لأول مرة 851 00:47:56,000 --> 00:48:00,000 لأن العنصر الأول في القائمة لديها الآن أن أشير في عقدة جديدة، 852 00:48:00,000 --> 00:48:03,000 الذي، بدوره، يشير في عدد عقدة 9. 853 00:48:03,000 --> 00:48:06,000 >> وكان هذا دليلا محرجا إلى حد كبير، وأنا متأكد، 854 00:48:06,000 --> 00:48:08,000 حتى جولة كبيرة من التصفيق لهؤلاء الرجال إذا كنت تستطيع. 855 00:48:08,000 --> 00:48:11,000 جيد للقيام به. 856 00:48:11,000 --> 00:48:17,000 هذا كل شيء. قد تبقى قطعة من الورق الخاص بك وذاكرة قليلا. 857 00:48:17,000 --> 00:48:22,000 وتبين أن القيام بذلك في التعليمات البرمجية 858 00:48:22,000 --> 00:48:26,000 ليست واردة بسيطة مثل تحريك اليدين حول 859 00:48:26,000 --> 00:48:28,000 وتشير المؤشرات إلى الأمور مختلفة. 860 00:48:28,000 --> 00:48:31,000 ولكن ندرك أنه عندما يأتي الوقت لتنفيذ شيء من هذا القبيل 861 00:48:31,000 --> 00:48:34,000 قائمة مرتبطة أو البديل من ذلك إذا كنت حقا التركيز على 862 00:48:34,000 --> 00:48:38,000 هذه الأسس الأساسية، والمشاكل دغة الحجم لا بد لي من معرفة، 863 00:48:38,000 --> 00:48:43,000 هل هو هذه اليد أو اليد هذه، ندرك أن ما هو خلاف ذلك برنامج معقدة إلى حد ما 864 00:48:43,000 --> 00:48:47,000 يمكن، في الواقع، يمكن تحويلها إلى كتل بناء بسيطة الى حد كبير مثل هذا. 865 00:48:47,000 --> 00:48:51,000 >> دعونا نأخذ الأمور في اتجاه أكثر تطورا حتى الآن. 866 00:48:51,000 --> 00:48:53,000 لدينا الآن فكرة القائمة المرتبطة. 867 00:48:53,000 --> 00:48:57,000 لدينا أيضا، وذلك بفضل العودة إلى هناك اقتراح واحد في قائمة مرتبطة على نحو مضاعف، 868 00:48:57,000 --> 00:49:01,000 التي تبدو تقريبا نفس، ولكن الآن لدينا اثنين من المؤشرات داخل البنية 869 00:49:01,000 --> 00:49:05,000 بدلا من واحدة، ويمكن أن نطلق على الأرجح تلك المؤشرات السابقة والقادمة 870 00:49:05,000 --> 00:49:08,000 أو إلى اليسار أو اليمين، ولكننا، في الواقع، تحتاج اثنين منهم. 871 00:49:08,000 --> 00:49:10,000 ورمز يكون أكثر من ذلك بقليل المعنية. 872 00:49:10,000 --> 00:49:12,000 وكان يتعين على أنيتا لبذل المزيد من العمل هنا على المسرح. 873 00:49:12,000 --> 00:49:15,000 ولكن يمكننا بالتأكيد تنفيذ هذا النوع من الهيكل. 874 00:49:15,000 --> 00:49:19,000 من حيث إدارة الوقت، رغم ذلك، ما من شأنه أن تكون هذه هي المرة تشغيل 875 00:49:19,000 --> 00:49:24,000 لأنيتا لإيجاد ن رقم في قائمة مرتبطة الآن؟ 876 00:49:24,000 --> 00:49:27,000 O لا تزال كبيرة من ن، لذلك من الأفضل لا يتجاوز البحث الخطي. 877 00:49:27,000 --> 00:49:29,000 لا نستطيع أن نفعل البحث الثنائية، رغم ذلك، مرة أخرى. 878 00:49:29,000 --> 00:49:34,000 لماذا كان الأمر كذلك؟ لا يمكنك القفز حولها. 879 00:49:34,000 --> 00:49:36,000 على الرغم من أننا نرى بوضوح كل البشر على المسرح، 880 00:49:36,000 --> 00:49:39,000 ويمكن أن أنيتا قد eyeballed ذلك، وقال: "هنا هو منتصف القائمة،" 881 00:49:39,000 --> 00:49:42,000 وقالت إنها لا تعرف أنها إذا كانت برنامج كمبيوتر 882 00:49:42,000 --> 00:49:47,000 لأن الشيء الوحيد الذي كان لتحط على لفي بداية السيناريو 883 00:49:47,000 --> 00:49:50,000 كان لوكاس، الذي كان المؤشر الأول. 884 00:49:50,000 --> 00:49:53,000 وقالت إنها من الضروري أن تتبع هذه الروابط، 885 00:49:53,000 --> 00:49:56,000 عد طريقها حتى وجدت ما يقرب من الوسط، 886 00:49:56,000 --> 00:49:58,000 وحتى ذلك الحين، وقالت انها لن تعرف عندما يكون وصلت منتصف 887 00:49:58,000 --> 00:50:01,000 ما لم تذهب على طول الطريق حتى النهاية لمعرفة كيفية العديد من هناك، 888 00:50:01,000 --> 00:50:05,000 ثم تتراجع، والتي من شأنها أن تكون من الصعب جدا إلا إذا كان لديك 889 00:50:05,000 --> 00:50:07,000 قائمة مرتبطة على نحو مضاعف من نوع ما. 890 00:50:07,000 --> 00:50:10,000 >> حل بعض مشاكل اليوم، ولكن إدخال الآخرين. 891 00:50:10,000 --> 00:50:12,000 ماذا عن بنية بيانات مختلفة تماما؟ 892 00:50:12,000 --> 00:50:15,000 هذا هو صورة من الأدراج في البيت ماثر، 893 00:50:15,000 --> 00:50:19,000 وفي هذه الحالة، لدينا بنية بيانات قمنا أيضا نوع من سبق الحديث عنه. 894 00:50:19,000 --> 00:50:22,000 تحدثنا عن كومة في سياق الذاكرة، 895 00:50:22,000 --> 00:50:26,000 وانها نوع من اسمه عمدا لأن ذلك كومة في شروط الذاكرة 896 00:50:26,000 --> 00:50:31,000 هي بالفعل بنية البيانات التي لديه المزيد والمزيد من الاشياء الطبقات على أعلى من ذلك. 897 00:50:31,000 --> 00:50:35,000 لكن الشيء المثير للاهتمام حول كومة، كما هو الحال في واقع الأمر، 898 00:50:35,000 --> 00:50:38,000 هو أنه نوع خاص من بنية البيانات. 899 00:50:38,000 --> 00:50:42,000 انها بنية البيانات حيث العنصر الأول في 900 00:50:42,000 --> 00:50:46,000 هو العنصر الأخير بها. 901 00:50:46,000 --> 00:50:50,000 إذا كنت علبة أول من وضع إلى المكدس، 902 00:50:50,000 --> 00:50:53,000 وأنت تسير أن يكون للأسف درج آخر من يتم سحبه من المكدس، 903 00:50:53,000 --> 00:50:55,000 وهذا ليس بالضرورة أمرا جيدا. 904 00:50:55,000 --> 00:50:58,000 على العكس من ذلك، يمكنك التفكير في الامر على العكس من ذلك، 905 00:50:58,000 --> 00:51:02,000 آخر هو في الخروج أولا. 906 00:51:02,000 --> 00:51:05,000 >> الآن، قم بأي سيناريوهات تتبادر إلى الذهن حيث وجود مكدس 907 00:51:05,000 --> 00:51:08,000 بنية البيانات التي لديك تلك الممتلكات 908 00:51:08,000 --> 00:51:13,000 من آخر في، انتهت الأولى، هو في الواقع مقنعة؟ 909 00:51:13,000 --> 00:51:16,000 هو أن هذا شيء جيد؟ هو أن شيئا سيئا؟ 910 00:51:16,000 --> 00:51:19,000 انها بالتأكيد شيئا سيئا إذا لم تكن جميع الصواني متطابقة 911 00:51:19,000 --> 00:51:21,000 وكانت جميع الألوان المختلفة أو خاصة غيرها، 912 00:51:21,000 --> 00:51:24,000 واللون الذي تريده هو على طول الطريق في الأسفل. 913 00:51:24,000 --> 00:51:26,000 بالطبع، لا يمكنك الحصول على ذلك دون بذل جهد كبير. 914 00:51:26,000 --> 00:51:28,000 عليك أن تبدأ من أعلى والعمل طريقك إلى أسفل. 915 00:51:28,000 --> 00:51:31,000 وبالمثل، ماذا لو كنت واحدا من هؤلاء الأولاد من المعجبين 916 00:51:31,000 --> 00:51:34,000 الذي ينتظر كل ليلة محاولة للحصول على اي فون ويصطف 917 00:51:34,000 --> 00:51:36,000 في مكان مثل هذا؟ 918 00:51:36,000 --> 00:51:40,000 لن يكون ذلك جميلا إذا التفاحة مخزن 919 00:51:40,000 --> 00:51:42,000 كانت بنية بيانات المكدس؟ 920 00:51:42,000 --> 00:51:44,000 ياي؟ ناي؟ 921 00:51:44,000 --> 00:51:47,000 انها جيدة فقط بالنسبة للأشخاص الذين تظهر في اللحظة المحتملة الاخيرة 922 00:51:47,000 --> 00:51:50,000 ومن ثم الحصول على التقطه من على قائمة الانتظار. 923 00:51:50,000 --> 00:51:52,000 في واقع الأمر، فإن حقيقة أن كان يميل لذلك أنا أقول لقائمة الانتظار 924 00:51:52,000 --> 00:51:56,000 ويتسق مع الواقع ما نسميه هذا النوع من هيكل البيانات، 925 00:51:56,000 --> 00:51:59,000 واحد في الواقع حيث أمر لا يهم، 926 00:51:59,000 --> 00:52:02,000 وتريد أول واحد لتكون أول واحد من 927 00:52:02,000 --> 00:52:04,000 إذا فقط من أجل العدالة الإنسانية. 928 00:52:04,000 --> 00:52:07,000 سوف نسميه عموما أن بنية بيانات قائمة الانتظار. 929 00:52:07,000 --> 00:52:11,000 >> تبين إلى جانب القوائم المرتبطة، يمكننا البدء في استخدام هذه الأفكار الأساسية نفسها 930 00:52:11,000 --> 00:52:15,000 والبدء في إنشاء أنواع جديدة ومختلفة من الحلول للمشاكل. 931 00:52:15,000 --> 00:52:19,000 على سبيل المثال، في حالة وجود مكدس، يمكن أن تمثل كومة 932 00:52:19,000 --> 00:52:22,000 استخدام بنية بيانات من هذا القبيل، وأقترح. 933 00:52:22,000 --> 00:52:26,000 في هذه الحالة، قد أعلن لي البنية، وقلت داخل هذا الهيكل 934 00:52:26,000 --> 00:52:30,000 هو مجموعة من الأرقام ومن ثم حجم متغير يسمى، 935 00:52:30,000 --> 00:52:33,000 وانا ذاهب لاستدعاء هذا الشيء كومة. 936 00:52:33,000 --> 00:52:35,000 الآن، لماذا يعمل هذا في الواقع؟ 937 00:52:35,000 --> 00:52:43,000 في حالة وجود مكدس، ويمكنني أن يوجه بذلك على نحو فعال على الشاشة كصفيف. 938 00:52:43,000 --> 00:52:47,000 هنا كومة بلدي. تلك هي أرقامي. 939 00:52:47,000 --> 00:52:50,000 وسوف نوجه لهم كما هذا، هذا، هذا، هذا، هذا. 940 00:52:50,000 --> 00:52:53,000 ثم لدي بعض الأعضاء بيانات أخرى هنا، 941 00:52:53,000 --> 00:52:58,000 وهو ما يسمى الحجم، لذلك هذا هو الحجم، وهذا هو الأرقام، 942 00:52:58,000 --> 00:53:02,000 وجماعيا، تطلب الشركة بأكملها هنا تمثل واحدة بنية المكدس. 943 00:53:02,000 --> 00:53:07,000 الآن، بشكل افتراضي، وحجم وقد حصلت يفترض أن تتم تهيئة إلى 0، 944 00:53:07,000 --> 00:53:11,000 وما هو داخل مجموعة من الأرقام في البداية 945 00:53:11,000 --> 00:53:14,000 عندما تخصص أولا مجموعة؟ 946 00:53:14,000 --> 00:53:16,000 القمامة. من يدري؟ وأنه لا يهم في الواقع. 947 00:53:16,000 --> 00:53:20,000 لا يهم إذا كانت هذه هي 1، 2، 3، 4، 5، عشوائيا تماما 948 00:53:20,000 --> 00:53:25,000 من سوء الحظ المخزنة في هيكل بلدي لطالما أنا أعلم أن حجم المكدس 949 00:53:25,000 --> 00:53:29,000 0، ثم أنا أعرف برمجيا، لا تبدو في أي من العناصر في الصفيف. 950 00:53:29,000 --> 00:53:31,000 لا يهم ما هو هناك. 951 00:53:31,000 --> 00:53:34,000 لا ننظر إليها، كما سيكون الآثار المترتبة على حجم 0. 952 00:53:34,000 --> 00:53:38,000 >> ولكن لنفترض الآن أنا والمضي قدما في إدراج شيء في المكدس. 953 00:53:38,000 --> 00:53:42,000 أريد أن إدراج رقم 5، لذلك أنا وضعت رقم 5 هنا، 954 00:53:42,000 --> 00:53:45,000 ثم ما يمكنني اخماد هنا؟ 955 00:53:45,000 --> 00:53:48,000 الآن سوف أضع في الواقع بنسبة 1 لحجم، 956 00:53:48,000 --> 00:53:50,000 والآن كومة من حجم 1. 957 00:53:50,000 --> 00:53:53,000 ماذا لو ذهبت إلى الأمام وإدراج رقم، دعنا نقول، 7 التالي؟ 958 00:53:53,000 --> 00:53:57,000 هذا ثم يتم تحديثها إلى 2، ثم سنفعل 9، 959 00:53:57,000 --> 00:54:02,000 ومن ثم يحصل على تحديث هذا إلى 3. 960 00:54:02,000 --> 00:54:05,000 ولكن ميزة مثيرة للاهتمام من هذا المكدس الآن هو أن 961 00:54:05,000 --> 00:54:09,000 أنا من المفترض أن إزالة العنصر الذي إذا أريد لموسيقى البوب 962 00:54:09,000 --> 00:54:12,000 شيء الخروج من المكدس، إذا جاز التعبير؟ 963 00:54:12,000 --> 00:54:14,000 و9 يكون أول شيء يجب أن تذهب. 964 00:54:14,000 --> 00:54:18,000 كيف ينبغي الصورة تتغير إذا أريد لموسيقى البوب ​​عنصر من المكدس، 965 00:54:18,000 --> 00:54:20,000 يشبه إلى حد كبير صينية في ماذر؟ 966 00:54:20,000 --> 00:54:22,000 نعم. >> [طالب] حجم مجموعة إلى 2. 967 00:54:22,000 --> 00:54:27,000 بالضبط، يتم تعيين كل ما أفعله لحجم 2، وماذا أفعل مع مجموعة؟ 968 00:54:27,000 --> 00:54:29,000 ليس لدي لفعل أي شيء. 969 00:54:29,000 --> 00:54:32,000 ويمكنني أن، لمجرد أن يكون الشرج، ووضع 0 لا أو -1 أو للدلالة على شيء 970 00:54:32,000 --> 00:54:34,000 أن هذه ليست قيمة شرعي، ولكن لا يهم لأن 971 00:54:34,000 --> 00:54:37,000 لا أستطيع تسجيل خارج مجموعة نفسها كم من الوقت هو 972 00:54:37,000 --> 00:54:41,000 لدرجة أنني أعرف ننظر فقط في العنصرين الأول في هذه المجموعة. 973 00:54:41,000 --> 00:54:47,000 الآن، وإذا ذهبت إضافة رقم 8 إلى هذه المجموعة، كيف يمكن للتغيير الصورة القادمة؟ 974 00:54:47,000 --> 00:54:50,000 هذا يصبح 8، وهذا يصبح 3. 975 00:54:50,000 --> 00:54:52,000 أنا قطع زوايا قليلة هنا. 976 00:54:52,000 --> 00:54:56,000 الآن لدينا 5 و 7 و 8، ونعود إلى حجم 3. 977 00:54:56,000 --> 00:54:58,000 هذا هو بسيط جدا لتنفيذ، 978 00:54:58,000 --> 00:55:06,000 ولكن عندما نحن ذاهبون للأسف هذا القرار التصميم؟ 979 00:55:06,000 --> 00:55:09,000 متى تبدأ الامور للذهاب للغاية، خاطئة جدا؟ نعم. 980 00:55:09,000 --> 00:55:11,000 [رد الطالب غير مسموع] 981 00:55:11,000 --> 00:55:13,000 عندما تريد أن تذهب مرة أخرى والحصول على العنصر الأول كنت وضعت فيه. 982 00:55:13,000 --> 00:55:18,000 >> اتضح هنا على الرغم من كومة عبارة عن صفيف تحت غطاء محرك السيارة، 983 00:55:18,000 --> 00:55:21,000 وأيضا هذه الهياكل البيانات بدأنا نتحدث عن المعروفة عموما 984 00:55:21,000 --> 00:55:25,000 هياكل البيانات المجردة حيث كنت كيفية تنفيذها 985 00:55:25,000 --> 00:55:27,000 تماما إلى جانب هذه النقطة. 986 00:55:27,000 --> 00:55:31,000 ويفترض ان بنية البيانات مثل كومة لإضافة دعم 987 00:55:31,000 --> 00:55:35,000 مثل عمليات الدفع، الذي يدفع صينية إلى المكدس، 988 00:55:35,000 --> 00:55:39,000 والبوب، الذي يزيل عنصر من المكدس، وهذا كل شيء. 989 00:55:39,000 --> 00:55:43,000 إذا كانت لك بتحميل كود شخص آخر الذين نفذ بالفعل 990 00:55:43,000 --> 00:55:46,000 هذا الشيء يسمى كومة، فإن ذلك الشخص قد كتبت 991 00:55:46,000 --> 00:55:49,000 وظيفتين فقط بالنسبة لك، ودفع البوب، هدفها الوحيد في الحياة 992 00:55:49,000 --> 00:55:51,000 سيكون لذلك تماما. 993 00:55:51,000 --> 00:55:54,000 أنت أو له أو لها تنفيذ هذا البرنامج الذي 994 00:55:54,000 --> 00:55:58,000 كان تماما واحدة لاتخاذ قرار بشأن كيفية تنفيذ 995 00:55:58,000 --> 00:56:00,000 دلالات دفع وظهرت تحت غطاء محرك السيارة 996 00:56:00,000 --> 00:56:03,000 أو وظيفة دفع وظهرت. 997 00:56:03,000 --> 00:56:07,000 ولقد جعلت قرار قصير النظر نوعا ما هنا 998 00:56:07,000 --> 00:56:10,000 من خلال تنفيذ كومة بلدي مع هذه البنية بيانات بسيطة لماذا؟ 999 00:56:10,000 --> 00:56:12,000 عندما يفعل ذلك كسر هيكل البيانات؟ 1000 00:56:12,000 --> 00:56:18,000 في نقطة ما لا بد لي من العودة خطأ عندما يقوم المستخدم دفع يدعو، على سبيل المثال؟ 1001 00:56:18,000 --> 00:56:20,000 [طالب] إذا لم يكن هناك مساحة أكبر. 1002 00:56:20,000 --> 00:56:23,000 بالضبط، إذا كان هناك مساحة لا أكثر، إذا كنت قد تجاوزت القدرات، 1003 00:56:23,000 --> 00:56:27,000 وهو كل مباراة لأنه يوحي أنه نوع من ثابت العالمية. 1004 00:56:27,000 --> 00:56:30,000 حسنا، ثم أنا فقط ستكون لدينا ليقول "عذرا، لا أستطيع دفع قيمة أخرى 1005 00:56:30,000 --> 00:56:32,000 إلى المكدس "، يشبه إلى حد كبير في ماذر. 1006 00:56:32,000 --> 00:56:36,000 >> في مرحلة ما، انهم ذاهبون لتصل إلى الجزء العلوي من مجلس الوزراء أن قليلا. 1007 00:56:36,000 --> 00:56:39,000 ليس هناك مساحة أكبر أو القدرات في المكدس، وعند هذه النقطة هناك نوعا من الخطأ. 1008 00:56:39,000 --> 00:56:42,000 لديهم لوضع العنصر في مكان آخر، في مكان آخر علبة، 1009 00:56:42,000 --> 00:56:44,000 أو في أي مكان على الإطلاق. 1010 00:56:44,000 --> 00:56:47,000 الآن، مع قائمة انتظار، فإننا لا يمكن تنفيذه بشكل مختلف قليلا. 1011 00:56:47,000 --> 00:56:50,000 A قائمة الانتظار قليلا مختلفة في هذا تحت غطاء محرك السيارة، ويمكن تنفيذه 1012 00:56:50,000 --> 00:56:54,000 كصفيف، ولكن لماذا، في هذه الحالة، أنا اقتراح 1013 00:56:54,000 --> 00:56:59,000 أن يكون أيضا عنصرا رئيسا يمثل رئيس القائمة، 1014 00:56:59,000 --> 00:57:06,000 الجزء الأمامي من القائمة، أول شخص في خط في متجر أبل، بالإضافة إلى حجم؟ 1015 00:57:06,000 --> 00:57:14,000 لماذا أحتاج إلى قطعة إضافية من البيانات هنا؟ 1016 00:57:14,000 --> 00:57:16,000 فكر في العودة إلى ما هو الأرقام 1017 00:57:16,000 --> 00:57:18,000 إذا كنت قد رسمها على النحو التالي. 1018 00:57:18,000 --> 00:57:21,000 لنفترض الآن هذا طابور بدلا من المكدس، 1019 00:57:21,000 --> 00:57:24,000 الفرق يكون تماما مثل-قائمة الانتظار للتسوق أبل عادلة. 1020 00:57:24,000 --> 00:57:27,000 أول شخص في خط في بداية القائمة، الرقم 5 في هذه الحالة، 1021 00:57:27,000 --> 00:57:30,000 هو أو هي على وشك أن تدع إلى المتجر الأول. 1022 00:57:30,000 --> 00:57:32,000 دعونا نفعل ذلك. 1023 00:57:32,000 --> 00:57:35,000 لنفترض أن هذا هو حالة قائمة انتظار بلدي في هذه اللحظة من الزمن، والآن متجر أبل 1024 00:57:35,000 --> 00:57:39,000 ويفتح ويقود أول شخص، عدد 5، إلى المتجر. 1025 00:57:39,000 --> 00:57:43,000 كيف يمكنني تغيير الصورة الآن أن أكون قد شطب أول شخص في قائمة الانتظار 1026 00:57:43,000 --> 00:57:47,000 في الجزء الأمامي من الخط؟ 1027 00:57:47,000 --> 00:57:50,000 ما هذا؟ >> [طالب] تغيير قائمة الانتظار. 1028 00:57:50,000 --> 00:57:52,000 تغيير الرأس، حتى 5 يختفي. 1029 00:57:52,000 --> 00:57:56,000 في الواقع، انها كما لو الفنية أفضل للقيام بذلك؟ 1030 00:57:56,000 --> 00:58:00,000 في الواقع، انها كما لو يختفي هذا الرجل. 1031 00:58:00,000 --> 00:58:03,000 ما يمكن أن تفعله في رقم 7 مخزن الفعلية؟ 1032 00:58:03,000 --> 00:58:05,000 فإنها اتخاذ خطوة كبيرة إلى الأمام. 1033 00:58:05,000 --> 00:58:08,000 >> ولكن ما وصلنا إلى نقدر عندما يتعلق الأمر صفائف 1034 00:58:08,000 --> 00:58:10,000 وتتحرك الامور؟ 1035 00:58:10,000 --> 00:58:12,000 وهذا النوع من مضيعة للوقت الخاص بك، أليس كذلك؟ 1036 00:58:12,000 --> 00:58:16,000 لماذا يجب أن تكون الشرج وذلك ليكون أول شخص 1037 00:58:16,000 --> 00:58:21,000 في بداية السطر في بداية وجسديا من قطعة من الذاكرة؟ 1038 00:58:21,000 --> 00:58:23,000 وهذا لا لزوم لها تماما. لماذا؟ 1039 00:58:23,000 --> 00:58:26,000 ما يمكن أن أتذكر فقط بدلا من ذلك؟ >> [استجابة الطالب غير مسموع] 1040 00:58:26,000 --> 00:58:30,000 بالضبط، يمكن أن أذكر فقط مع هذا الرأس عضو بيانات إضافية 1041 00:58:30,000 --> 00:58:34,000 الآن أن رئيس القائمة لم يعد 0، والذي كان قبل لحظة. 1042 00:58:34,000 --> 00:58:39,000 الآن انها في الواقع الرقم 1. وبهذه الطريقة، يمكنني الحصول على التحسين طفيفة. 1043 00:58:39,000 --> 00:58:44,000 لقد لمجرد قمت بعدم شخص من قائمة الانتظار خط في بداية السطر في متجر أبل 1044 00:58:44,000 --> 00:58:47,000 لا يعني كل من لديه لتحويل، والتي هي عملية الاستدعاء الخطي. 1045 00:58:47,000 --> 00:58:50,000 يمكنني قضاء الوقت بدلا الثابت الوحيد 1046 00:58:50,000 --> 00:58:53,000 وتحقيق ثم استجابة أسرع بكثير. 1047 00:58:53,000 --> 00:58:56,000 ولكن الثمن أنا ما دفع للحصول على أن أداء إضافية 1048 00:58:56,000 --> 00:58:58,000 وعدم وجود لتحويل جميع؟ 1049 00:58:58,000 --> 00:59:01,000 نعم. >> [استجابة الطالب غير مسموع] 1050 00:59:01,000 --> 00:59:04,000 يمكن إضافة المزيد من الناس، حسنا، هذه المشكلة هو متعامد 1051 00:59:04,000 --> 00:59:07,000 إلى حقيقة أننا لا يتحول الناس من حولنا. 1052 00:59:07,000 --> 00:59:11,000 انها لا تزال طائفة، لذلك ما إذا كنا تحول الجميع أو لا، 1053 00:59:11,000 --> 00:59:13,000 أوه، أرى ما تعنيه، حسنا. 1054 00:59:13,000 --> 00:59:16,000 في الواقع، وأنا أتفق مع ما تقوله من حيث أنه تقريبا كما الرغم 1055 00:59:16,000 --> 00:59:19,000 ونحن الآن لا تنوي استخدام بدء هذه المجموعة بعد الآن 1056 00:59:19,000 --> 00:59:22,000 لأنه إذا أزيل 5، ثم أقوم بإزالة 7. 1057 00:59:22,000 --> 00:59:24,000 ولكن وضعت فقط الناس إلى اليمين. 1058 00:59:24,000 --> 00:59:28,000 >> بدا الامر وكأننا أنا إضاعة الفضاء، وأخيرا قائمة انتظار بلدي يتحلل إلى أي شيء على الإطلاق، 1059 00:59:28,000 --> 00:59:31,000 لذا فإننا يمكن أن يكون مجرد شخص ملفوف، 1060 00:59:31,000 --> 00:59:35,000 ويمكن أن نفكر في هذه المجموعة حقا على انها نوع من بنية دائرية، 1061 00:59:35,000 --> 00:59:38,000 ولكننا نستخدم ما في المشغل C للقيام بذلك النوع من ملفوف؟ 1062 00:59:38,000 --> 00:59:40,000 [رد الطالب غير مسموع] >> المشغل مودولو. 1063 00:59:40,000 --> 00:59:43,000 سيكون من مزعج قليلا للتفكير من خلال كيف يمكنك أن تفعل للملفوف، 1064 00:59:43,000 --> 00:59:46,000 ولكن يمكننا أن نفعل ذلك، ونحن يمكن أن تبدأ في وضع الناس ما كان ليكون واجهة الخط، 1065 00:59:46,000 --> 00:59:52,000 ولكن علينا أن نتذكر فقط مع هذا المتغير الذي رأسه الرئيس الفعلي للخط هو في الواقع. 1066 00:59:52,000 --> 00:59:57,000 ماذا لو، بدلا من ذلك، هدفنا في نهاية المطاف، على الرغم من 1067 00:59:57,000 --> 01:00:00,000 وكان للبحث عن الأرقام، كما فعلنا هنا على خشبة المسرح مع أنيتا، 1068 01:00:00,000 --> 01:00:02,000 لكننا نريد حقا أفضل من كل هذه العوالم؟ 1069 01:00:02,000 --> 01:00:05,000 نريد المزيد من التطور من مجموعة يسمح 1070 01:00:05,000 --> 01:00:09,000 لأننا نريد القدرة على النمو بشكل حيوي بنية البيانات. 1071 01:00:09,000 --> 01:00:12,000 ولكننا لا نريد أن تضطر إلى اللجوء إلى شيء ما أشرنا 1072 01:00:12,000 --> 01:00:15,000 في المحاضرة الأولى لم يكن خوارزمية الأمثل، 1073 01:00:15,000 --> 01:00:17,000 أن من البحث الخطي. 1074 01:00:17,000 --> 01:00:21,000 اتضح أنه يمكنك، في الواقع، تحقيق 1075 01:00:21,000 --> 01:00:24,000 أو على الأقل قريبة من الوقت مستمر، حيث شخص مثل أنيتا، 1076 01:00:24,000 --> 01:00:27,000 إذا كانت بتكوين بنية لها أن تكون البيانات غير قائمة مرتبط، 1077 01:00:27,000 --> 01:00:30,000 لا أن تكون كومة، لا أن تكون قائمة الانتظار يمكن، في الواقع، 1078 01:00:30,000 --> 01:00:33,000 الخروج مع هيكل البيانات التي يسمح لها للبحث عن الأشياء، 1079 01:00:33,000 --> 01:00:37,000 حتى الكلمات، وليس مجرد أرقام، في ما نسميه الوقت سوف ثابتة. 1080 01:00:37,000 --> 01:00:40,000 >> في واقع الأمر، التطلع، واحدة من psets في هذه الفئة هو دائما تقريبا 1081 01:00:40,000 --> 01:00:43,000 تنفيذا لالمدقق الإملائي، حيث 1082 01:00:43,000 --> 01:00:46,000 نقدم لكم مرة أخرى بعض الكلمات الإنجليزية و150،000 الهدف من ذلك هو 1083 01:00:46,000 --> 01:00:51,000 تحميل إلى الذاكرة تلك ويكون قادرا على الإجابة بسرعة الأسئلة من النموذج 1084 01:00:51,000 --> 01:00:54,000 وهذه الكلمة مكتوبة بشكل صحيح؟ 1085 01:00:54,000 --> 01:00:58,000 وسيكون من تمتص حقا إذا كان لديك لتكرار خلال كل الكلمات 150،000 إلى الإجابة على هذا. 1086 01:00:58,000 --> 01:01:02,000 ولكن، في الواقع، وسنرى ما يمكن أن نفعله في الوقت المناسب جدا وسريعة جدا. 1087 01:01:02,000 --> 01:01:06,000 وانه سيكون شيئا لإشراك تنفيذ يسمى جدول التجزئة، 1088 01:01:06,000 --> 01:01:09,000 وعلى الرغم من وهلة الأولى هذا الشيء يسمى جدول التجزئة هو الذهاب الى 1089 01:01:09,000 --> 01:01:12,000 دعونا تحقيق هذه الاستجابة السريعة سوبر مرات، 1090 01:01:12,000 --> 01:01:18,000 اتضح أن هناك في الواقع مشكلة. 1091 01:01:18,000 --> 01:01:23,000 عندما يأتي الوقت لتنفيذ هذا الشيء يسمى من جديد، أنا أفعل ذلك مرة أخرى. 1092 01:01:23,000 --> 01:01:25,000 أنا واحد فقط هنا. 1093 01:01:25,000 --> 01:01:28,000 عندما يتعلق الأمر بتنفيذ الوقت دعا هذا الشيء جدول التجزئة، 1094 01:01:28,000 --> 01:01:30,000 ونحن في طريقنا لدينا لاتخاذ قرار. 1095 01:01:30,000 --> 01:01:32,000 كيف ينبغي أن يكون هذا الشيء كبيرة في الواقع؟ 1096 01:01:32,000 --> 01:01:36,000 وعندما نبدأ بإدراج أرقام في هذا الجدول التجزئة، 1097 01:01:36,000 --> 01:01:38,000 كيف نحن ذاهبون لتخزينها بطريقة 1098 01:01:38,000 --> 01:01:42,000 التي يمكن أن نحصل عليها العودة بأسرع ما وصلنا لهم في؟ 1099 01:01:42,000 --> 01:01:45,000 ولكن سنرى قبل مضي وقت طويل أن هذه المسألة من 1100 01:01:45,000 --> 01:01:48,000 متى عيد ميلاد الجميع هو أن يكون في الصف ثيق جدا. 1101 01:01:48,000 --> 01:01:51,000 تبين أن في هذه الغرفة، ونحن قد حصلت على بضع مئات من الناس، 1102 01:01:51,000 --> 01:01:56,000 وبالتالي فإن احتمالات أن اثنين منا لديه نفس عيد ميلاد هو على الارجح عالية جدا. 1103 01:01:56,000 --> 01:01:58,000 ماذا لو لم يكن هناك سوى 40 من منا في هذه القاعة؟ 1104 01:01:58,000 --> 01:02:02,000 ما هي احتمالات وجود شخصين في نفس تاريخ الميلاد؟ 1105 01:02:02,000 --> 01:02:04,000 [الطلاب] أكثر من 50٪. 1106 01:02:04,000 --> 01:02:06,000 نعم، أكثر من 50٪. في الواقع، حتى أحضرت مخطط. 1107 01:02:06,000 --> 01:02:08,000 كما تبين وهذا هو في الحقيقة مجرد معاينة التسلل- 1108 01:02:08,000 --> 01:02:12,000 إذا كان هناك 58 فقط من منا في هذه القاعة، واحتمال 2 منا 1109 01:02:12,000 --> 01:02:16,000 عيد ميلاد جود نفس مرتفعة بشكل كبير، ما يقرب من 100٪، 1110 01:02:16,000 --> 01:02:20,000 وهذا ما سوف يؤدي في مجمله مجموعة من يصب لنا يوم الاربعاء. 1111 01:02:20,000 --> 01:02:24,000 >> مع أن قال، دعونا تأجيل هنا. سنرى لك يوم الاربعاء. 1112 01:02:24,000 --> 01:02:28,000 [تصفيق] 1113 01:02:28,000 --> 01:02:30,000 [CS50.TV]