[عزف الموسيقى] رئيس 1: حسنا. الجميع نرحب مرة أخرى إلى القسم. أتمنى لكم جميعا بنجاح تعافى من مسابقة الخاص بك من الاسبوع الماضي. وأنا أعلم أنه مجنون قليلا في بعض الأحيان. كما كنت أقول من قبل، إذا كنت ضمن الانحراف المعياري، لا داعي للقلق حقا عن ذلك، خصوصا لمقطع أقل راحة. هذا عن المكان الذي ينبغي أن يكون. إذا فعلت عظيم، ثم رهيبة. مجد لك. وإذا كنت تشعر وكأنك في حاجة قليلا مزيد من المساعدة، الرجاء لا تتردد في الوصول إلى أي من TFS. نحن جميعا هنا للمساعدة. هذا هو السبب نعلمه. لهذا السبب أنا هنا كل يوم إثنين لك والرجال في مكتبه ساعات يوم الخميس. لذا يرجى لا تتردد في اسمحوا لي أن أعرف إذا كنت قلقا بشأن أي شيء أو إذا كان هناك أي شيء على مسابقة ان كنت ترغب حقا لمعالجتها. لذلك جدول الأعمال لهذا اليوم كل شيء عن هياكل البيانات. بعض هذه هي فقط ستكون فقط لتحصل على إطلاع على هذه. لا تستطيع تنفيذ أي وقت مضى لهم في هذه الفئة. بعضهم صح التعبير، مثل لPSET سبيلر الخاص بك. سيكون لديك اختيارك بين الجداول التجزئة ومحاولات. ولذا فإننا سوف يكون بالتأكيد على أولئك. انها سوف تكون بالتأكيد أكثر من نوع من قسم رفيعة المستوى اليوم، رغم ذلك، لأن هناك الكثير منهم، وإذا ذهبنا في تفاصيل التنفيذ في كل من هذه، ونحن لن حتى من خلال الحصول على القوائم المرتبطة وربما قليلا من الجداول التجزئة. ذلك أن تتحملوني. نحن لسنا بصدد أن تفعل الترميز بقدر هذا الوقت. إذا كان لديك أي أسئلة حول هذا الموضوع أو تريد رؤيته تنفيذها أو محاولة لنفسك، وأوصى بالتأكيد الذهاب إلى study.cs50.net، التي لديه أمثلة على كل هذه. فإنه سيكون لديك العروض التي تستخدم برنامج بلدي مع الملاحظات التي نحن تميل إلى استخدام وكذلك بعض البرامج تمارين، خاصة بالنسبة للأشياء مثل القوائم المرتبطة وثنائي أكوام الأشجار والعظة. أكثر من ذلك بقليل حتى على مستوى عال، والتي قد يكون لطيفا ليا رفاق. حتى مع ذلك، سوف تبدأ. وأيضا، مسابقات yes--. أعتقد أن معظمكم الذين هم في قسم المسابقات الخاص بي لديها، ولكن أي شخص يأتي أو سبب لك لا، انهم هنا في الجبهة. حتى القوائم المرتبطة. أعرف أن هذا النوع من يذهب لدعم الخاصة بك قبل المسابقة. كان ذلك قبل أسبوع أن تعلمنا عن هذا. ولكن في هذه الحالة، سنقوم فقط يذهب أكثر قليلا في العمق. فلماذا قد نختار قائمة مرتبطة عبر مجموعة؟ ما يميزها؟ نعم؟ الجمهور: يمكنك توسيع مرتبط قائمة حجم ثابت مقابل مجموعة و. رئيس 1: الحق. مجموعة وثابتة في حين أن حجم قائمة مرتبطة لديها حجم متغير. لذلك إذا كنا لا نعرف كيف كثيرا نريد لتخزين و قائمة مرتبطة يعطينا عظيم طريقة للقيام بذلك لأننا يمكن فقط إضافة على عقدة أخرى وإضافة على عقدة أخرى وإضافة على عقدة أخرى. ولكن ما قد يكون مفاضلة؟ لا أحد يتذكر مفاضلة بين المصفوفات والقوائم المرتبطة؟ Mmhmm؟ الجمهور: لديك ل تذهب من خلال كل الطريق من خلال القائمة المرتبطة إيجاد عنصر في القائمة. في صفيف، يمكنك مجرد العثور على عنصر. رئيس 1: الحق. حتى مع arrays-- الجمهور: [غير مسموع]. رئيس 1: مع صفائف، لدينا ما يسمى الوصول العشوائي. يعني أنه إذا كنا نريد ما هو من أي وقت مضى في النقطة الخامسة من لائحة أو النقطة الخامسة لدينا مجموعة، يمكننا أن مجرد الاستيلاء عليها. لو انها قائمة مرتبطة، لدينا تكرار خلال، أليس كذلك؟ حتى الوصول إلى عنصر في مجموعة هي المرة مستمر، بينما مع قائمة مرتبطة أنه سيكون من المرجح أن تكون الزمن الخطي لأنه ربما عنصر لدينا هو كل وسيلة في نهاية المطاف. لدينا للبحث من خلال كل شيء. حتى مع كل هذه البيانات هياكل نحن ذاهبون لأن تنفق المزيد من الوقت على، ما هي الإيجابيات والسلبيات. متى نريد ل استخدام واحد على الآخر؟ وهذا النوع من أكبر شيء أن يسلب. لذلك لدينا هنا تعريف العقدة. انها مثل عنصر واحد في قائمة مرتبطة لدينا، أليس كذلك؟ لذلك نحن جميعا نعرف مع البنيات الرموز المميزة ل typedef لدينا، وهو ما ذهب أكثر في مراجعة آخر مرة. كان أساسا مجرد خلق نوع آخر البيانات التي يمكن أن نستخدمها. وفي هذه الحالة، فإنه من بعض العقدة التي ستعقد في بعض صحيح. ثم ما هو الجزء الثاني هنا؟ أي شخص؟ الجمهور: [غير مسموع]. رئيس 1: نعم. انها مؤشر إلى عقدة القادمة. لذلك ينبغي أن يكون هذا الواقع هنا. هذا هو مؤشر من نوع عقدة إلى الشيء التالي. وهذا ما يشمل عقدة لدينا. بارد. كل الحق، وذلك مع البحث، كما كنا فقط أقول قبل اليد، إذا كنت الذهاب للبحث عن طريق، لديك لتكرار الواقع من خلال قائمتك المرتبطة. حتى إذا كنا نبحث عن عدد 9، كنا نبدأ في رؤوسنا ويشير لنا في بداية من قائمة مرتبطة لدينا، أليس كذلك؟ ونحن نقول، حسنا، هل هذا عقدة تحتوي على عدد 9؟ لا؟ كل الحق، انتقل إلى المرحلة التالية. متابعته. أنها لا تحتوي على رقم 9؟ لا. متابعة المرحلة التالية. لذلك علينا أن تكرار الواقع من خلال قائمة مرتبطة لدينا. نحن لا يمكن أن تذهب مباشرة إلى حيث هو 9. وإذا كنت الرجال يريدون فعلا ل ترى بعض الزائفة رمز هناك. لدينا بعض ظيفة البحث هنا يأخذ in-- ما يستغرق في؟ ما رأيك؟ من السهل جدا واحد. ما هذا؟ الجمهور: [غير مسموع]. رئيس 1: عدد نبحث عنه. أليس كذلك؟ وهذا ما يمكن أن تقابل؟ انها مؤشر ل؟ الجمهور: عقدة. رئيس 1: عقدة إلى قائمة أننا نبحث في، أليس كذلك؟ لذلك لدينا بعض العقد هي المؤشر هنا. هذه هي النقطة التي سيكون ل في الواقع تكرار خلال قائمتنا. نحن تعيينها مساوية لقائمة لأن هذا هو فقط إعداد عليه مساويا ل بدء من قائمة مرتبطة لدينا. وعلى الرغم من انها ليست فارغة، في حين لا يزال لدينا أشياء في قائمتنا، تحقق لمعرفة ما إذا كان لديها عقدة عدد نبحث عنه. العودة الحقيقية. خلاف ذلك، تحديثه، أليس كذلك؟ إذا كانت فارغة، نخرج لدينا في حين حلقة وعودة كاذبة لأن ذلك يعني أننا لم نعثر عليه. لا تحصل الجميع كيف يعمل؟ موافق. حتى مع الإدراج، ل لدينا ثلاث طرق مختلفة. يمكنك prepend، يمكنك إلحاق ويمكنك إدراجها في متنوعة. في هذه الحالة، نحن ذاهب الى القيام prepend. لا أحد يعرف كيف أن هذه قد تختلف ثلاث حالات؟ حتى prepend يعني أن كنت وضعت كان في الجبهة من القائمة الخاصة بك. بحيث يعني أنه لا يهم ما هي عقدة الخاص بك، بغض النظر عن ما هي القيمة، وأنت تسير وضعه هنا في الجبهة، موافق؟ انها سوف تكون أول عنصر في قائمتك. إذا قمت بإلحاق ذلك، فإنه يجري للذهاب إلى الجزء الخلفي من القائمة الخاصة بك. وتضاف الى متنوعة يعني أنك الذهاب لوضع فعلا في المكان حيث أنها تحافظ قائمتك يرتبط فرزها. مرة أخرى، وكيف تستخدم تلك وعند استخدام منهم سوف تختلف تبعا لحالتك. إذا لم تكن في حاجة إلى يتم فرز، prepend يميل لماذا يكون معظم الناس استخدام لأنك لا يجب أن تمر عبر قائمة كاملة لإيجاد نهاية لإضافته يوم، أليس كذلك؟ يمكنك فقط الحق في التمسك بها. ولذا فإننا سوف تذهب من خلال 1 الإدراج في الوقت الحالي. ذلك الشيء الوحيد الذي أنا ذاهب ل أوصي على هذا PSET هو رسم الأشياء، وكما هو الحال دائما. من المهم جدا أن تقوم بتحديث مؤشرات بالترتيب الصحيح لأنه إذا كنت تحديثها قليلا من النظام، وأنت تسير في نهاية المطاف فقدان أجزاء من قائمتك. هكذا على سبيل المثال، في هذه الحالة، نحن يقول رئيس لنقطة عادلة ل1. اذا لم نفعل ذلك فقط بدون حفظ هذا 1، ليس لدينا أي فكرة ما 1 يجب أن نشير إلى الآن لأننا فقدنا ما وأشار رئيس ل. ذلك شيء واحد أن نتذكر عندما كنت تفعل prepend هو إنقاذ ما نقاط الرأس إلى البداية، ثم إعادة تعيين، ثم تحديث ما يجب أن يشير عقدة جديدة ل. في هذه الحالة، وهذا هو واحد طريقة للقيام بذلك. حتى إذا كنا قد فعلت ذلك بهذه الطريقة حيث أننا مجرد تعيينهم الرأس، نفقد في الأساس لدينا قائمة بأكملها، أليس كذلك؟ واحد طريقة للقيام بذلك هو أن يكون 1 نقطة ل بعد ذلك، ومن ثم يكون نقطة الرأس إلى 1. أو يمكنك القيام به نوع من مثل التخزين المؤقت، الذي تحدثت عنه. ولكن إعادة تعيين الخاص بك مؤشرات بالترتيب الصحيح ستكون جدا جدا المهم لهذا PSET. خلاف ذلك، وأنت تسير أن يكون تجزئة جدول أو محاولة أن مجرد ستكون الجزء الوحيد من الكلمات التي تريد ثم you're-- mmhmm؟ الجمهور: ماذا كانت مؤقتة الشيء التخزين التي كانوا يتحدثون عنها؟ رئيس 1: التخزين المؤقت. وذلك أساسا آخر الطريقة التي يمكن أن تفعل هذا تم تخزين رأسه من شيء، مثل تخزينه في متغير مؤقت. تعيين إلى 1 و ثم تحديث 1 أن نشير إلى أي رئيس يستخدم للإشارة إلى. بهذه الطريقة هو واضح أكثر أناقة لأنك لا تحتاج إلى قيمة مؤقتة، ولكن مجرد تقديم طريقة أخرى للقيام بذلك. ونحن فعلا لدينا بعض رمز لهذا. حتى لقائمة مرتبطة، نحن فعلا بعض التعليمات البرمجية. لذلك إدراج هنا، وهذا هو معلق مسبقا. لذلك هذا يدخل عليه في الرأس. أول شيء لذلك، تحتاج إلى خلق عقدة الجديدة الخاصة بك، بطبيعة الحال، والتحقق من وجود NULL. جيدة دائما. ومن ثم تحتاج إلى تعيين القيم. كلما قمت بإنشاء عقدة جديدة، كنت لا أعرف ما هو لافتا إلى القادم، لذلك تريد تهيئة إلى NULL. إذا لم ينتهي لافتا إلى شيء آخر، ويحصل على تعيينهم وأنها بخير. إذا كان هذا هو أول شيء في القائمة، فإنه يحتاج للإشارة إلى NULL ل هذا هو نهاية القائمة. حتى ذلك الحين لأدخله، ونحن نرى هنا نحن يتم تعيين القيمة التالية من عقدة لدينا أن يكون مهما الرأس، وهو ما كان لدينا هنا. هذا ما فعلناه للتو. ومن ثم نقوم بتعيين رئيس لنقطة لدينا عقدة جديدة، لنتذكر، الجديد هو بعض مؤشر إلى عقدة، وهذا هو بالضبط ما هو الرأس. هذا هو بالضبط لماذا نحن يكون هذا السهم استرجاع. بارد؟ Mmhmm؟ الجمهور: هل لدينا ل تهيئة القادم الجديد إلى NULL أولا، أو يمكننا فقط تهيئة إلى الرأس؟ رئيس 1: جديد المقبل يجب أن تكون فارغة لبدء لأنك لا تعرف حيث سيكون. أيضا، وهذا هو نوع من تماما مثل النموذج. قمت بتعيين أنه يساوي NULL فقط لجعل تأكد من أن جميع القواعد الخاصة بك مغطاة قبل أن تفعل أي إعادة توزيع بحيث كنت مضمونة دائما أنه سوف مشيرا إلى أن قيمة محددة مقابل مثل قيمة القمامة. لأنه، نعم، نحن تعيين القادم الجديد تلقائيا، لكنها أكثر تماما مثل الممارسة الجيدة لتهيئة عليه بهذه الطريقة ومن ثم إعادة تعيين. قوائم موافق، يرتبط ذلك بشكل مضاعف الآن. ماذا نفكر؟ ما هو مختلف مع القوائم المرتبطة مضاعف؟ حتى في قوائم لدينا مرتبط، نستطيع تتحرك إلا في اتجاه واحد، أليس كذلك؟ لدينا المقبل فقط. يمكننا أن نذهب فقط إلى الأمام. مع قائمة مرتبطة مضاعف، يمكننا أيضا أن تتحرك إلى الوراء. لذلك لدينا ليس فقط الرقم الذي نريد لتخزين و لدينا حيث يشير إلى القادم وحيث أننا فقط جاء من. ولذلك فإن هذا يسمح لل بعض اجتياز أفضل. العقد بحيث ترتبط على نحو مضاعف، مشابهة جدا، أليس كذلك؟ فقط الفرق هو أننا الآن يملك المقبل وسابقة. ذلك هو الفرق الوحيد. حتى إذا كان لنا أن prepend أو append-- نحن ليس لدينا أي رمز لهذا الأمر here-- ولكن إذا كنت في محاولة ل أدخله، والشيء المهم هو ما تحتاجه لجعل تأكد من أنك تكليف كل من السابق والخاص مؤشر المقبل بشكل صحيح. حتى في هذه الحالة، لو كنت ليس فقط تهيئة المقبل، يمكنك تهيئة السابق. إذا نحن على رأس القائمة، فإننا سيجعل ليس فقط رأس المساواة الجديدة، ولكن ينبغي لنا سابقة جديدة نشير في الرأس، أليس كذلك؟ هذا هو الفرق الوحيد. وإذا كنت تريد المزيد من الممارسة مع هذه القوائم المرتبطة، مع إدخالها مع حذف، مع إدراج في قائمة متنوعة، يرجى مراجعة study.cs50.net. هناك مجموعة كبيرة من التدريبات. أنا أوصي لهم. أتمنى لو كان لدينا الوقت للذهاب من خلالهم ولكن هناك الكثير من هياكل البيانات من خلال الحصول على. موافق، لذلك الجداول التجزئة. هذا هو على الارجح الاكثر الشيء المفيد للPSET بك هنا لأنك ستكون تنفيذ واحدة من هذه، أو المحاولة. أنا حقا أحب الجداول التجزئة. انهم رائع. ذلك أساسا ما يحدث هو جدول تجزئة عندما كنا حقا بحاجة سريعة الإدراج أو الحذف، والبحث. تلك هي الأشياء التي نحن إعطاء الأولوية في جدول تجزئة. يمكنهم الحصول على كبيرة جدا، ولكن كما سنرى مع محاولات، هناك أشياء التي هي أكبر من ذلك بكثير. لكن في الأساس، كل تجزئة الجدول هو دالة تجزئة تخبرك التي دلو لوضع كل البيانات الخاصة بك، كل العناصر الخاصة بك في. وهناك طريقة بسيطة للتفكير في جدول تجزئة هو أنه مجرد دلاء من الأشياء، أليس كذلك؟ لذلك عندما كنت فرز الأشياء مثل الحرف الأول من اسمها، هذا هو نوع من مثل جدول التجزئة. حتى إذا كان لي أن المجموعة التي الرجال هو إلى مجموعات من كل من يبدأ اسمه ل مع أكثر من هنا وهناك، أو من عيد ميلاد في يناير، فبراير، مارس، أيا كان، وهذا هو فعال إنشاء جدول التجزئة. انها مجرد خلق الدلاء التي يمكنك فرز العناصر الخاصة بك في بحيث يمكنك العثور عليها أسهل. حتى هذه الطريقة عندما أحتاج العثور على واحد منكم، أنا لم يكن لديك للبحث من خلال كل الأسماء الخاصة بك. أنا يمكن أن يكون مثل، أوه، أنا أعرف أن عيد ميلاد دانيال هو in-- الجمهور: --April. رئيس 1: ابريل. لذلك أنا ابحث في بلدي أبريل دلو، ومع أي حظ، وقالت انها سوف تكون واحدة فقط في وجود و كان وقتي المستمر في هذا المعنى، في حين إذا كان لدي لتبدو من خلال مجموعة كاملة من الناس، انها سوف يستغرق وقتا أطول من ذلك بكثير. حتى الجداول التجزئة هي حقا دلاء فقط. طريقة سهلة للتفكير منهم. ذلك شيء مهم جدا حول جدول تجزئة دالة البعثرة. حتى الأشياء التي تحدث فقط عن، مثل الحرف الأول من الاسم الأول الخاص بك أو الخاص الشهر عيد ميلاد، هذه هي الأفكار التي ربط حقا أن وظيفة تجزئة. انها مجرد وسيلة للالبت فيها دلو لك يذهب عنصر كنت في، موافق؟ لذلك لهذا PSET، يمكنك البحث عن الى حد كبير أي وظيفة هاش تريد. لا يجب أن تكون بنفسك. هناك بعض منها باردة حقا هناك أن تفعل كل أنواع الرياضيات مجنون. وإذا كنت تريد أن تجعل الخاصة بك المدقق الإملائي بسرعة فائقة، أنا بالتأكيد ننظر إلى واحد من هؤلاء. ولكن هناك أيضا منها البسيطة، مثل حساب مجموع الكلمات، مثل كل حرف لديه عدد. حساب مجموع. الذي يحدد دلو. لديهم أيضا تلك السهلة التي هي تماما مثل كل عام وهنا، جميع المبيت هنا. أي واحد من هؤلاء. في الأساس، فإنه يقول لك فقط التي مؤشر مجموعة العناصر الخاصة بك يجب أن تذهب إليه. مجرد البت في bucket-- انها كل وظيفة تجزئة هي. حتى هنا لدينا مثال وهو فقط الحرف الأول من السلسلة ان كنت مجرد الحديث عنه. بحيث يكون لديك بعض البعثرة هذا مجرد الحرف الأول من سلسلة الخاص بك ناقص A، والتي سوف تعطيك بعض رقم بين 0 و 25. وما تريد القيام به هو تأكد من أن هذا يمثل حجم التجزئة الخاصة بك table-- كم دلاء هناك. مع العديد من هذه وظائف التجزئة، وانهم ستكون عودته القيم التي قد تكون أعلى بكثير من عدد من الدلاء أن لديك بالفعل في جدول التجزئة الخاصة بك، لذلك تحتاج إلى جعل تأكد وزارة الدفاع من قبل هؤلاء. خلاف ذلك، انها سوف أقول، أوه، ينبغي أن يكون في دلو 5000 ولكن لديك فقط 30 دلاء في جدول التجزئة الخاص بك. وبطبيعة الحال، نحن جميعا نعرف هذا سوف ينتج عنه بعض الأخطاء مجنون. لذلك تأكد من أن وزارة الدفاع من قبل حجم جدول التجزئة الخاص بك. بارد. ذلك التصادم. هو شخص جيد حتى الآن؟ Mmhmm؟ الجمهور: لماذا سيكون عليه عودة مثل هذه القيمة الضخمة؟ رئيس 1: اعتمادا على خوارزمية التي تستخدم دالة تجزئة بك. وبعضهم يفعل ضرب من الجنون. وانها كل شيء عن الحصول حتى التوزيع، حتى القيام ببعض حقا أشياء مجنونة في بعض الأحيان. هذا كل شيء. أي شيء آخر؟ موافق. ذلك التصادم. في الأساس، وكما قلت في وقت سابق، في أفضل السيناريوهات، أي دلو انني اتطلع الى هو ستكون لدينا شيء واحد، لذلك لا بد من النظر في كل شيء، أليس كذلك؟ أنا أعلم أنه إما هناك أو أنها لا، وهذا ما كنا نريد حقا. ولكن اذا كان لدينا عشرات الآلاف من نقاط البيانات وأقل من هذا العدد من الدلاء، ونحن في طريقنا لديك اصطدام حيث في نهاية المطاف شيئا وستكون لدينا في نهاية المطاف في دلو التي لديها بالفعل عنصر. لذا فإن السؤال هو، ما نفعل في هذه الحالة؟ ماذا نفعل؟ لدينا بالفعل شيء هناك؟ هل نحن مجرد رمي بها؟ لا. لدينا للحفاظ على كل منهما. وبالتالي فإن الطريقة التي نحن وعادة ما يفعل ذلك هو ما؟ ما هو بنية البيانات تحدثنا فقط عن؟ الجمهور: قائمة مرتبطة. رئيس 1: قائمة مرتبطة. حتى الآن، بدلا من كل هذه دلاء مجرد وجود عنصر واحد، انها سوف تحتوي على قائمة مرتبطة العناصر التي تم تجزئته إلى ذلك. حسنا، هل الجميع نوع من الحصول على هذه الفكرة؟ لأننا لا يمكن أن يكون لها مجموعة لأننا لا نعرف كيف العديد من الأشياء سوف تكون هناك. قائمة مرتبطة يسمح لنا ل فقط يجب أن العدد الدقيق وتجزئته إلى أن دلو، أليس كذلك؟ الخطية حتى بالتدقيق هو أساسا هذا idea-- انها طريقة واحدة للتعامل مع حادث تصادم. ما يمكنك القيام به هو إذا، في هذا الحالة، تم تجزئته إلى التوت 1 ولدينا بالفعل هناك شيء، أنت فقط الاستمرار لأسفل حتى تجد فتحة فارغة. هذا هو طريقة واحدة للتعامل مع ذلك. طريقة أخرى للتعامل مع هو الحال مع ما نحن فقط called-- وترتبط يسمى تسلسل القائمة. لذلك هذه الفكرة تعمل إذا جدول التجزئة الخاص بك كنت تعتقد هو أكبر بكثير من مجموعة البيانات الخاصة بك أو إذا كنت تريد أن تجرب وتقليل تسلسل حتى انه من الضروري على الاطلاق. ذلك شيئا واحدا هو الخطية التحقيق يعني الواضح أن وظيفة التجزئة الخاصة بك ليس تماما كما المفيد لأنك لن ينتهي باستخدام وظيفة التجزئة الخاص بك، والحصول على نقطة، كنت الخطي وصولا الى تحقيق في مكان ما هو متاح. ولكن الآن، بالطبع، أي شيء إلا أن ينتهي هناك، وأنت تسير لدينا ل بحث أبعد من ذلك إلى أسفل. وهناك الكثير حساب البحث التي يذهب إلى إدخال عنصر في البعثرة الجدول الخاص بك الآن، أليس كذلك؟ والآن عندما تذهب ومحاولة إيجاد التوت مرة أخرى، وأنت تسير إلى تجزئة ذلك، وانها سوف يقولون، أوه، أن ننظر في دلو 1، وانها لن تكون في دلو 1، لذلك كنت ستكون لدينا لاجتياز من خلال ما تبقى من هذه. لذلك فمن المفيد أحيانا، ولكن في معظم الحالات، نحن ذاهبون إلى القول بأن تسلسل هو ما تريد القيام به. حتى أننا تحدثنا عن هذا في وقت سابق. حصلت على القليل من قبل نفسي. ولكن تسلسل هو في الأساس أن كل دلو في جدول التجزئة الخاصة بك هو مجرد قائمة مرتبطة. لذلك بطريقة أخرى، أو أكثر تقنية الطريقة، للتفكير في جدول تجزئة هو أنه مجرد مجموعة من القوائم المرتبطة، والتي عندما كنت تكتب قاموسك وكنت تحاول تحميله، التفكير في الأمر باعتباره مجموعة من القوائم المرتبطة سيجعل من الاسهل بكثير بالنسبة لك لتهيئة. الجمهور: ذلك جدول التجزئة لديها حجم محدد سلفا، مثل [غير مسموع] من الدلاء؟ رئيس 1: الحق. لذلك لديه عدد محدد من دلاء أنك determine-- والتي يجب عليك الرجال لا تتردد في اللعب مع. يمكن أن يكون بارد جدا لنرى ماذا سيحدث كما قمت بتغيير رقمك من الدلاء. ولكن نعم، لديه ضبط عدد من الدلاء. ما يسمح لك لتناسب كما العديد من العناصر التي تحتاج إليها هذا هو تسلسل منفصلة حيث كنت ربطت القوائم الموجودة في كل مجموعة. وهذا يعني جدول التجزئة الخاصة بك سوف يكون بالضبط حجم التي تحتاج أن يكون، أليس كذلك؟ هذا هو بيت القصيد من القوائم المرتبطة. بارد. لذلك الجميع موافق هناك؟ حسنا. آه. ما حدث للتو؟ حقا الآن. اعتقد شخص ما قتل لي. موافق ونحن في طريقنا للذهاب إلى محاولات، التي هي مجنون قليلا. أحب الجداول التجزئة. اعتقد انهم رائع حقا. يحاول باردة أيضا. لذلك لا أحد يتذكر ما هي المحاولة؟ يجب أن كنت قد ذهبت فوق لفترة وجيزة في محاضرة؟ هل تذكرين نوع من كيف يعمل؟ الجمهور: أنا مجرد الايماء أننا لم نذهب أكثر من ذلك. رئيس 1: نحن لا نذهب أكثر من ذلك. حسنا، نحن حقا للذهاب أكثر من ذلك الآن هو ما نقوله. الجمهور: هذا هو لشجرة استرجاعها. رئيس 1: نعم. انها شجرة استرجاعها. رهيبة. ذلك شيء واحد أن نلاحظ هنا هو أننا تبحث في الأحرف الفردية هنا، أليس كذلك؟ لذلك من قبل مع وظيفة التجزئة لدينا، و كانوا يبحثون في الكلمات ككل، والآن نحن نبحث أكثر في حرفا، أليس كذلك؟ لذلك لدينا أكثر من هنا ماكسويل ومندل. ذلك أساسا try-- وسيلة للتفكير في هذا هو أن كل مستوى هنا هو مجموعة من الحروف. لذلك هذا هو العقدة الجذر الخاص بك هنا، أليس كذلك؟ هذا له جميع الشخصيات من الأبجدية لبداية كل كلمة. وما تريد القيام به هو يقول، حسنا، لدينا بعض M كلمة. ونحن في طريقنا للبحث عن ماكسويل، لذلك نذهب إلى M. و M نقطة لآكل مجموعة أخرى حيث كل كلمة واحدة، ما دام هناك هي كلمة له كما أن الرسالة الثانية، طالما هناك كلمة لديه باء الرسالة الثانية، سيكون لها مؤشر الذهاب إلى بعض مجموعة المقبلة. هناك ربما ليس كلمة النائب شيء، حتى في موقف P في هذا مجموعة، فإنه سيكون مجرد فارغة. فإنها يمكن أن تقول، حسنا، ليس هناك كلمة الذي يليه M P، موافق؟ لذلك إذا كنا نفكر في ذلك، كل واحدة من هذه الأشياء الصغيرة هو في الواقع واحدة من هذه صفائف كبيرة من A إلى Z. وذلك ما قد يكون واحدا من الأشياء هذا هو نوع من العيب من المحاولة؟ الجمهور: هناك الكثير من الذاكرة. رئيس 1: انها طن من الذاكرة، أليس كذلك؟ كل واحدة من هذه الكتل هنا تمثل 26 مسافات، 26 عنصر صفيف. لذلك يحاول الحصول بشكل لا يصدق ثقيلة الفضاء. لكنها سريعة جدا. بسرعة لا يصدق ولكن مساحة غير فعالة حقا. نوع من ان الرقم من أي واحد تريد. هذه هي باردة حقا لPSET الخاص بك، لكنها لا يستغرق الكثير من الذاكرة، حتى تتمكن مقايضة. نعم؟ الجمهور: هل من الممكن تشكيل لمحاولة ثم مرة واحدة لديك كل البيانات في أن تقوم need-- أنا لا أعرف إذا كان ذلك من شأنه أن يكون له معنى. لقد تخلص من كل أحرف فارغة، ولكن بعد أنت لن تكون قادرة على مؤشر them-- رئيس 1: أنت لا تزال في حاجة إليها. الجمهور: - بنفس الطريقة في كل مرة. رئيس 1: نعم. كنت في حاجة إلى أحرف فارغة للسماح لل يمكنك معرفة ما إذا كان هناك ليست كلمة هناك. لم بن لديك شيء تريد؟ موافق. كل الحق، لذلك نحن ذاهبون للذهاب قليلا أكثر في التفاصيل التقنية وراء محاولة والعمل من خلال مثال. حسنا، هذا هو الشيء نفسه. بينما في قائمة مرتبطة، هدفنا الرئيسي نوع of-- ما هي كلمة أريد؟ - مثل بناء كتلة كانت عقدة. في المحاولة، ايضا لدينا عقدة، بل هو تعريفها بشكل مختلف. لذلك لدينا بعض منطقي أن يمثل ما إذا كانت الكلمة فعلا موجود في هذا المكان، ثم لدينا بعض مجموعة here-- أو بالأحرى، هذا هو مؤشر إلى مجموعة من 27 حرفا. وهذا هو ل، في هذه الحالة، وهذا 27-- أنا متأكد من أن كل واحد منكم مثل، الانتظار، هناك 26 حرف في الأبجدية. لماذا لدينا 27؟ ذلك تبعا ل طريقة تنفيذ ذلك، هذا هو من PSET أن يسمح للالفواصل العليا. ولهذا السبب واحد إضافي. سيكون لديك أيضا في بعض حالات فاصل باطل يتم تضمين كأحد أحرف وهذا ما سمح لها أن تكون، وهذه هي الطريقة التي تحقق ل معرفة ما اذا كان هو نهاية الكلمة. إذا كنت مهتما، وتحقق من فيديو كيفن على study.cs50، فضلا عن ويكيبيديا بعض موارد جيدة هناك. ولكن ونحن في طريقنا للذهاب من خلال مجرد نوع كيف يمكنك العمل من خلال المحاولة إذا كنت أعطيت واحدة. لذلك لدينا واحدة عظمى بسيط هنا لديه عبارة "الخفافيش" و "زووم" في نفوسهم. وكما نرى هنا، هذه مساحة صغيرة هنا يمثل منطقي أن لدينا يقول: نعم، وهذا هو كلمة واحدة. ثم هذا لديه لدينا صفائف حرفا، أليس كذلك؟ لذلك نحن في سبيلنا للذهاب من خلال العثور على "الخفافيش" في هذه المحاولة. حتى تبدأ في الجزء العلوي، أليس كذلك؟ ونحن نعلم أن يناظر ب المؤشر الثاني، العنصر الثاني في هذه المجموعة، وذلك لأن أ و ب. ذلك ما يقرب من ثانية واحدة. وتقول، حسنا، بارد، اتبع ذلك في مجموعة المقبلة، لأنه إذا نحن نتذكر، انها ليست أن كل من هذه يحتوي في الواقع عنصر. كل واحدة من هذه المصفوفات يحتوي على المؤشر، أليس كذلك؟ انها تمييز مهم لجعل. أعرف أن هذا هو الذهاب الى be-- محاولات ل من الصعب حقا للحصول على أول مرة، لذلك حتى لو كان هذا هو المرة الثانية أو الثالثة وانها لا تزال النوع يبدو من الصعب، أعدك إذا ذهبت ساعة غدا باختصار مرة أخرى، فإنه على الأرجح سوف تجعل الكثير من معانيها. فإنه يأخذ الكثير الهضم. ما زلت أشعر أحيانا مثل، انتظر، ما هو المحاولة؟ كيف يمكنني استخدام هذا؟ لذلك قمنا ب في هذه الحالة، وهو المؤشر الثاني لدينا. إذا كان لدينا مثلا، أو ج د أو أي حرف آخر، نحن بحاجة إلى الخريطة التي تعود إلى مؤشر لدينا مجموعة وأن يتوافق. ولذا فإننا سوف تتخذ مثل rchar ونحن فقط طرح قبالة لتعيين ذلك إلى 0-25. الجميع جيدا كيف نحن خريطة شخصياتنا؟ موافق. لذلك نحن نذهب لثانية واحدة، ونحن نرى أن، نعم، ليس لNULL. يمكننا أن ننتقل إلى هذه المجموعة القادمة. لذلك نحن نذهب إلى هذه المجموعة القادمة هنا. ونحن نقول، حسنا، نحن الآن بحاجة الى معرفة ما اذا كان هو هنا. هي باطلة أو أنها لا التحرك إلى الأمام في الواقع؟ لذلك يتحرك في الواقع إلى الأمام في هذه المجموعة. ونحن نقول، حسنا، t هي الرسالة الأخيرة لدينا. لذلك نحن نذهب إلى ر في المؤشر. ثم ننتقل إلى الأمام لأن هناك واحد آخر. وهذا واحد يقول أساسا أن، نعم، تقول أن هناك كلمة here-- أنه إذا كنت تتبع هذه الطريق، وكنت قد وصلت في كلمة واحدة، والذي نعرفه هو "الخفافيش". نعم؟ الجمهور: هل المعيار أن يكون هذا كما مؤشر 0 ومن ثم يكون نوعا من 1 أو أن يكون في نهاية؟ رئيس 1: رقم لذلك إذا نظرنا إلى الوراء في موقعنا اعلان هنا، هو منطقي، حتى انها عنصر خاص بها في عقدة الخاص بك. حتى انها ليست جزءا من مجموعة. بارد. لذلك عندما ننتهي كلمتنا ونحن في هذه المجموعة، ما نريد القيام به هو القيام فحص لهذا كلمة واحدة. وفي هذه الحالة، فإنه سيعود نعم. لذلك على تلك المذكرة، ونحن نعلم أن "حديقة الحيوان" - نحن نعرف كما البشر أن "حديقة الحيوان" هي كلمة واحدة، أليس كذلك؟ ولكن سوف نحاول هنا أقول، لا، انها ليست. وأقول ذلك لأننا لم تعين أنها كلمة هنا. على الرغم من أننا يمكن أن تجتاز من خلال هذه المصفوفة، وهذا من شأنه أن المحاولة يقول، لا، حديقة الحيوان ليست في قاموسك لأن لدينا لا المعين على هذا النحو. حتى طريقة واحدة للقيام that-- أوه، آسف، هذه واحدة. حتى في هذه الحالة، "حديقة الحيوان" ليست كلمة واحدة، وإنما هو في محاولة لدينا. ولكن في هذه واحدة، ونقول نريد لها إدخال كلمة "حمام" ما يحدث ونحن نتابع through-- ب، لذلك، ر. نحن في هذه المجموعة، و نذهب للبحث عن ح. في هذه الحالة، عندما كنا نظرة على المؤشر في ساعة، انها لافتا إلى NULL، موافق؟ لذلك ما لم يكن صراحة مشيرا إلى مجموعة أخرى، أنت تفترض أن كل المؤشرات في هذه المجموعة يتم الإشارة إلى قيمة خالية. حتى في هذه الحالة، يشير ح إلى قيمة خالية لذلك نحن لا نستطيع أن نفعل أي شيء، لذلك سيعود أيضا زائف، "حمام" ليست هنا. حتى الآن نحن في الواقع سوف تذهب من خلال كيف نقول الحقيقة أن "حديقة الحيوانات" في محاولة لدينا. كيف يمكننا إدراج "حديقة الحيوانات" في محاولة لدينا؟ هكذا بنفس الطريقة التي بدأنا مع قائمة مرتبطة دينا، ونحن نبدأ في الجذر. عندما تكون في شك، تبدأ في جذر هذه الأمور. ونحن سوف نقول، حسنا، ض. يوجد ض في هذا، ويفعل. لذلك كنت الانتقال إلى مجموعة الخاص بك المقبل، موافق؟ ثم على واحد القادم، نقول، حسنا، لا يا موجودة؟ يفعل. هذا مرة أخرى. وهلم جرا لدينا واحدة المقبل، قلنا، موافق، "حديقة الحيوان" موجود بالفعل هنا. تم تعيين كل ما تحتاج إلى القيام بذلك على قدم المساواة إلى true، أن هناك كلمة هناك. إذا كنت قد اتبعت كل شيء حتى قبل هذه النقطة، انها كلمة واحدة، لذلك فقط تعيين يساوي هذا. نعم؟ الجمهور: حتى ذلك الحين يفعل ذلك يعني أن "با" هي كلمة أيضا؟ رئيس 1: رقم حتى في هذه الحالة، "با" سوف نحصل هنا، لقلنا أنها ليست كلمة، وسيكون لا يزال هناك. موافق؟ Mmhmm؟ الجمهور: حتى بمجرد أنها ل كلمة وكنت أقول نعم، ثم ستحتوي للذهاب إلى م؟ رئيس 1: حتى هذا له علاقة with-- كنت في تحميل هذا. أنت تقول "حديقة الحيوان" هي كلمة واحدة. عندما تذهب إلى check-- مثل، ويقول لك أريد أن أقول، لا "حديقة الحيوان" موجودة في هذا القاموس؟ كنت فقط الذهاب للبحث عن "حديقة الحيوان" ثم تحقق لمعرفة ما اذا كان كلمة واحدة. كنت ابدا الذهاب الى التحرك خلال لم لأن ذلك ليس ما كنت أبحث عنه. لذلك إذا أردنا فعلا ل إضافة "حمام" في هذه المحاولة، نحن سوف نفعل نفس الشيء كما فعلنا مع "حديقة الحيوان" إلا أننا نرى أننا عندما محاولة الحصول على ح، فإنه لا وجود لها. لذلك يمكنك التفكير في هذا الأمر يحاول لإضافة عقدة جديدة إلى قائمة مرتبطة، لذلك نحن في حاجة لإضافة آخر واحدة من هذه المصفوفات، مثل ذلك. ثم ما كنا نفعله هو مجرد تعيين ح عنصر من هذه المجموعة لافتا إلى هذا. ثم ما كنا نريد أن نفعل هنا؟ إضافته يساوي صحيح لأنها كلمة واحدة. بارد. وأنا أعلم. محاولات ليست هي الأكثر إثارة. ثق بي، وأنا أعلم. ذلك شيء واحد لتحقيق مع محاولات، قلت، انهم فعالة جدا. لذلك رأينا أنها يستغرق نصف طن من الفضاء. انهم نوع من الخلط. فلماذا نحن من أي وقت مضى استخدام هذه؟ نستخدم هذه لأنهم فعالة بشكل لا يصدق. حتى إذا كنت تبحث عن أي وقت مضى حتى كلمة واحدة، كنت فقط يحدها من طول الكلمة. حتى إذا كنت تبحث عن و الكلمة التي هي من الطول خمسة، كنت من أي وقت مضى فقط ستكون لدينا ل جعل خمسة في معظم المقارنات، موافق؟ ذلك أنه يجعل من الأساس ثابت. مثل الإدراج والبحث هي في الأساس وقت ثابت. حتى لو كنت تستطيع الحصول على أي وقت مضى شيء ما في وقت ثابت، هذا امر جيد كما يحصل. لا يمكنك الحصول على أفضل من وقت ثابت لهذه الأمور. لذلك هذا هو واحد من الإيجابيات ضخمة من محاولات. ولكن كان هناك الكثير من الفضاء. ولذلك عليك أن تقرر نوع من ما هو أكثر أهمية بالنسبة لك. وعلى أجهزة الكمبيوتر اليوم، و الفضاء أن المحاولة قد يستغرق ما يصل ربما لا يؤثر كنت كثيرا، ولكن ربما كنت تتعامل مع شيء الذي لديه الآن أكثر بكثير الأشياء، والمحاولة ليست مجرد معقول. نعم؟ الجمهور: الانتظار، بحيث يكون لديك 26 الحروف في كل واحد؟ رئيس 1: Mmhmm. نعم، لديك 26. لديك بعض من كلمة علامة ثم لديك 26 مؤشرات في كل واحد. وانهم point-- الجمهور: وكل 26، أنها كل لا يكون 26؟ رئيس 1: نعم. وهذا هو السبب، كما يمكنك ترى، توسعها بسرعة كبيرة. حسنا. لذلك نحن في طريقنا للوصول الى الأشجار التي أشعر أسهل وربما سوف تكون مهلة صغيرة لطيفة محاولات من هناك. لذلك نأمل معظمكم لقد رأيت شجرة قبل. لا أحب جدا منها خارج، وأنا لا أعرف إذا كان أي شخص ذهبت في الهواء الطلق في الآونة الأخيرة. ذهبت قطف التفاح في نهاية هذا الاسبوع، ويا إلهي، كانت جميلة. لم أكن أعرف الأوراق يمكن أن ننظر إلى حد ما. لذلك هذا هو مجرد شجرة، أليس كذلك؟ انها مجرد بعض عقدة، و يشير إلى مجموعة من العقد الأخرى. كما ترون هنا، وهذا هو نوع من موضوع متكرر. العقد مشيرا إلى العقد هي نوع من جوهر العديد من هياكل البيانات. ذلك يعتمد فقط على كيفية يكون لهم نشير إلى بعضها البعض وكيف يمكننا اجتياز من خلالهم وكيف إدراج الأشياء التي تحدد الخصائص المختلفة. حتى مجرد بعض المصطلحات، ولقد استعملت من قبل. لذلك الجذر هو كل ما هو في أعلى جدا. فمن أين نبدأ دائما. يمكنك التفكير في الأمر على رأس أيضا. ولكن بالنسبة لأشجار، فإننا نميل إلى أشير إلى أنها جذورها. أي شيء في أسفل here-- في جدا، bottom-- جدا وتعتبر الأوراق. لذلك يسير جنبا إلى جنب مع الشيء شجرة كله، أليس كذلك؟ يترك هي على حواف شجرة الخاص بك. ومن ثم لدينا أيضا اثنين من حيث للحديث عن العقد في العلاقة لبعضها البعض. لذلك لدينا الوالدين، الأطفال، والأشقاء. حتى في هذه الحالة، هو 3 الأم من 5، 6، و 7. ولذلك فإن الأصل هو كل ما هو خطوة واحدة فوق كل ما كنت مشيرا إلى، حتى مجرد مثل شجرة العائلة. نأمل، هذا هو كل قليلا قليلا أكثر بديهية من محاولات. الأخوة والأخوات هي التي لديها أي نفس الأم، أليس كذلك؟ انهم على نفس المستوى هنا. ومن ثم، وكما قلت كان قائلا: الأطفال هم فقط كل ما هو خطوة واحدة أدناه العقدة في السؤال، موافق؟ بارد. حتى شجرة ثنائية. يمكن لأي شخص أن الخطر تخمين على أحد خصائص شجرة ثنائية؟ الجمهور: ماكس اثنين من الأوراق. رئيس 1: الحق. حتى أقصى اثنين من الأوراق. حتى في هذه واحدة من قبل، كان لدينا هذا واحد أن كان ثلاثة، ولكن في شجرة ثنائية، لديك اثنين كحد أقصى أطفال لكل من الوالدين، أليس كذلك؟ هناك آخر سمة مثيرة للاهتمام. لا أحد يعرف ذلك؟ شجرة ثنائية. حتى شجرة ثنائية سيكون كل شيء على the-- هذا هو واحد لا sorted-- ولكن في شجرة ثنائية فرزها، كل شيء على اليمين أكبر من الوالد، وكل شيء على اليسار أقل من الوالد. والتي كانت مسابقة السؤال المطروح، وحسن جدا أن نعرف. وبالتالي فإن الطريقة نعرف هذا، مرة أخرى، لدينا عقدة أخرى. هذه تبدو مشابهة جدا لماذا؟ مضاعفا القوائم المرتبطة: إستماع رئيس 1: قائمة مرتبطة مزدوجة، أليس كذلك؟ لذلك إذا أردنا استبدال هذا مع السابقة والقادمة، هذه ستكون قائمة مرتبطة على نحو مضاعف. ولكن في هذه الحالة، ونحن في الواقع يكون اليسار واليمين وهذا كل شيء. خلاف ذلك، انها بالضبط نفس الشيء. لا يزال لدينا العنصر كنت تبحث عن، وكان لديك اثنين فقط مؤشرات الذهاب إلى ما هو القادم. نعم، شجرة البحث الثنائية بذلك. اذا لاحظنا، كل شيء على الحق هنا هو أكبر than-- أو كل شيء فورا إلى هنا أكبر من كل شيء هنا هو أقل من. حتى لو كنا في البحث عن طريق، و ينبغي أن تبدو قريبة جدا من البحث الثنائي هنا، أليس كذلك؟ باستثناء بدلا من البحث في نصف المصفوفة، نحن مجرد النظر إما في اليسار الجانب أو الجانب الأيمن من الشجرة. لذلك يحصل أسهل قليلا، على ما أعتقد. حتى إذا كان الجذر الخاص بك هو NULL، من الواضح انها مجرد كاذبة. واذا كان هناك، من الواضح أنه صحيح. إذا كان أقل من، ونحن نبحث اليسار. إذا كان أكبر من، نحن نبحث عن الحق. انها بالضبط مثل البحث الثنائي، مجرد هيكل بيانات مختلفة الذي نستخدمه. بدلا من صفيف، انها مجرد شجرة ثنائية. OK، مداخن. وأيضا، فإنه يبدو وكأننا قد يكون لديك القليل من الوقت. إذا فعلنا ذلك، أنا سعيد للذهاب على أي من هذه مرة أخرى. OK، مداخن ذلك. لا أحد يتذكر ما stacks-- أي خصائص كومة؟ موافق، لذلك معظمنا، كما أعتقد، تناول الطعام في المطاعم halls-- بقدر ما قد لا يروق ل. ولكن من الواضح، يمكنك التفكير في كومة حرفيا تماما كما كومة من الصواني أو كومة من الأشياء. وما هو المهم لندرك أنه من something-- السمة أن نسميها by-- هو LIFO. لا أحد يعرف ما الذي يقف عنه؟ Mmhmm؟ الجمهور: الماضي في، أولا خارج. رئيس 1: الحق، وتستمر في، لأول مرة. حتى لو كنا نعرف، إذا نحن تكديس الأشياء يصل، وأسهل شيء لانتزاع off-- وربما الشيء الوحيد الذي يمكن انتزاع حالا إذا لدينا هو كومة كبيرة enough-- هو ذلك العنصر العلوي. لذلك كل ما وضعت على last-- كما نرى هنا، مهما دفعت على الأكثر recently-- هو ستكون أول الشيء الذي نحن انصرف، موافق؟ ذلك ما لدينا هنا هو البنية typedef وآخر. هذا هو في الحقيقة مجرد مثل تحطم دورة في بنية البيانات، لذلك هناك الكثير القيت يا رفاق. وأنا أعلم. بعد ذلك بنية أخرى. ياي للهياكل. وفي هذه الحالة، فإنه من بعض مؤشر للمجموعة التي لديها بعض القدرات. ولذلك فإن هذا يمثل كومة دينا هنا، مثل مجموعة الفعلية لدينا وهذا ما يحمل العناصر لدينا. ثم هنا لدينا بعض الحجم. وعادة، وتريد أن تبقي تتبع كيفية كبيرة كومة الخاص بك هو لأن ما يجري للسماح لك أن تفعل هذا إذا كنت تعرف حجم، فإنه يسمح لك لأقول، حسنا، أنا في القدرات؟ يمكن إضافة أي شيء أكثر؟ ويحكي لك أيضا حيث الجزء العلوي من الكدسة هو حتى تعرف ما لك يمكن أن تتخذ في الواقع قبالة. وهذا ما يحدث فعلا ل أن تكون أكثر من ذلك بقليل واضحة هنا. وذلك لدفع، شيء واحد، إذا كنت من أي وقت مضى لتنفيذ حملة، كما كنت فقط أقول، لكم كومة ديها حجم محدود، أليس كذلك؟ كان لدينا مجموعة وبعض القدرات. انها صفيف. انها حجم ثابت، لذلك نحن بحاجة ل تأكد من أننا لا نضع أكثر في مجموعة لدينا من نحن في الواقع مساحة لل. لذلك عندما كنت تقوم بإنشاء حملة وظيفة، أول شيء عليك فعله هو يقول، موافق، لا بد لي مساحة في كومة بلدي؟ لأنه إذا كنت لا، آسف، لا أستطيع تخزين العنصر الخاص بك. إذا كنت تفعل، فإنك تريد تخزين في الجزء العلوي من المكدس، أليس كذلك؟ وهذا هو السبب لدينا لتتبع حجمنا. إذا كنا لا تتبع حجمنا، نحن لا نعرف إلى أين وضعها. نحن لا نعرف كيف أشياء كثيرة هي في مجموعة لدينا بالفعل. كما من الواضح أن هناك طرق التي ربما كنت يمكن أن نفعل ذلك. هل يمكن تهيئة كل شيء إلى NULL ومن ثم التحقق من وجود أحدث فارغة، ولكن أسهل بكثير شيء هو مجرد أن نقول، حسنا، تتبع الحجم. وكأنني أعرف أن لدي أربعة عناصر في مجموعة بلدي، وبالتالي فإن الشيء التالي ان وضعنا على، نحن الذهاب لتخزين في الفهرس 4. وبعد ذلك، بالطبع، وهذا يعني أن كنت قد دفعت شيئا بنجاح على كومة الخاص بك، فإنك ترغب في زيادة حجم لذلك عليك أن تعرف أين أنت بذلك يمكنك أن تدفع المزيد من الأشياء جرا. حتى لو كنا في محاولة لموسيقى البوب شيء من المكدس، ما قد يكون أول شيء أننا نريد أن تحقق ل؟ كنت تحاول اتخاذ شيء من الكدسة. هل أنت متأكد من هناك شيء في الكدسة؟ لا. وذلك ما قد كنا نريد أن تحقق؟ الجمهور: [غير مسموع]. رئيس 1: التحقق من حجم؟ الحجم. لذلك نحن نريد أن تحقق لمعرفة ما إذا كان حجمنا هو أكبر من 0، موافق؟ وإذا كان كذلك، ثم نريد أن ينخفض لدينا حجم من قبل 0 ويعود ذلك. لماذا؟ في الأول كنا دفع، ونحن دفعها إلى حجم وحجم ثم تحديثها. في هذه الحالة، نحن decrementing حجم ثم أخذ تشغيله، ونتف ذلك من مجموعة لدينا. ماذا يمكن أن نفعل ذلك؟ حتى إذا كان لدي شيء واحد على بلدي المكدس، ما يمكن أن يكون مقاسي في تلك المرحلة؟ 1. وحيث يتم تخزين العنصر 1؟ في مؤشر ما؟ الجمهور: 0. رئيس 1: 0. حتى في هذه الحالة، فإننا تحتاج دائما إلى جعل sure-- بدلا من العودة حجم ناقص 1، لأننا نعلم أن عنصر لدينا هو الذهاب ليتم تخزينها في أقل 1 أيا كان حجم لدينا هي، وهذا لا يتطلب العناية بها. انها طريقة قليلا أكثر أناقة. ونحن لدينا فقط إنقاص حجم ثم يعود الحجم. Mmhmm؟ الجمهور: أعتقد فقط في العام، ماذا سيكون هذا الهيكل بيانات أن تكون مفيدة؟ رئيس 1: ان ذلك يعتمد على السياق الخاص بك. حتى لبعض من الناحية النظرية، إذا كنت تعمل with-- موافق، اسمحوا لي أن نرى إذا كان هناك واحد مفيد هذا هو مفيد لأكثر من خارجها من CS. مع أكوام، في أي وقت تحتاج لتتبع شيئا وأضاف في الآونة الأخيرة هو عندما كنت تريد الذهاب الى استخدام المكدس. وأنا لا أستطيع التفكير في الخير مثال على ذلك في الوقت الحالي. ولكن كلما كان آخرها ما هو الأكثر أهمية بالنسبة لك، هذا عندما كومة ستكون مفيدة. أنا أحاول أن أفكر إذا هناك فكرة جيدة لذلك. إذا أنا أفكر في مثال جيد في القادم 20 دقيقة، وأنا بالتأكيد سوف اقول لك. ولكن عموما، إذا كان هناك أي شيء، كما قلت أكثر، حيث آخرها هو الأكثر أهمية، وهذا حيث كومة يأتي دور. بينما طوابير هي نوع من العكس. وجميع الكلاب الصغيرة. أليس هذا رائعا، أليس كذلك؟ أشعر أنني يجب أن يكون مجرد أرنب الفيديو الحق في وسط قسم للرفاق لأن هذا هو القسم مكثفة. حتى طابور. في الأساس طابور يشبه الخط. يا رفاق أنا متأكد من استخدام هذه كل يوم، مثلما هو الحال في قاعات الطعام لدينا. لذلك علينا أن نذهب في والحصول على الصواني لدينا، وأنا تأكد من أنك تضطر إلى الانتظار في خط لانتقاد أو الحصول على الغذاء الخاص بك. حتى الفرق هنا غير أن هذا هو FIFO. حتى إذا كان في الماضي LIFO أولا للخروج، يخرج أولا هو أولا في، انتهت الأولى. لذلك هذا هو المكان مهما كنت وضعت على الأول هو الخاص بك الأكثر أهمية. حتى إذا كنت في انتظار في line-- يمكن لك تخيل لو كنت ذهبت ل يذهب للحصول على اي فون الجديد وكان كومة حيث آخر شخص في خط حصل لأول مرة، كان الناس يقتلون بعضهم بعضا. حتى يخرج أولا، ونحن جميعا على دراية جدا مع في العالم الحقيقي هنا، وهذا كله لا علاقة له في الواقع نوع من إعادة هذا الخط كله ويصطفون هيكل. حتى حين مع مكدس، لدينا دفعة والبوب. مع طابور، لدينا إدراج بقائمة الانتظار وdequeue. ذلك يعني أساسا إدراج بقائمة الانتظار وضعه على ظهره، وسائل dequeue تأخذ الخروج من الجبهة. حتى بنية البيانات لدينا هو قليلا أكثر تعقيدا. لدينا الشيء الثاني أن تتبع. حتى من دون رأس، وهذا هو بالضبط كومة، أليس كذلك؟ هذا هو نفس هيكل كومة. الشيء الوحيد الذي يختلف هو أننا الآن يكون هذا الرأس، الذي ما رأيك سوف تتبع؟ الجمهور: أول واحد. رئيس 1: الحق، و أول شيء أن نضع في. رأس الطابور لدينا. كل من هو في الخط الأول. كل الحق، لذلك اذا لم نفعل إدراج بقائمة الانتظار. مرة أخرى، مع أي من هذه الهياكل البيانات، وبما أننا نتعامل مع مجموعة، نحن بحاجة لمعرفة ما اذا كان لدينا الفضاء. هذا هو نوع من مثل قول لي يا رفاق، إذا قمت بفتح الملف، تحتاج إلى التحقق لاغية. مع أي من هذه المداخن والطوابير، تحتاج لمعرفة ما إذا كان هناك مساحة لأننا التعامل مع مجموعة وحجم ثابت، كما نرى here-- 0، 1 كل ما يصل إلى 5. لذلك ما نقوم به في هذه الحالة هو الاختيار لمعرفة ما إذا كان لا يزال لدينا الفضاء. حجمنا هو أقل من القدرات؟ إذا كان الأمر كذلك، فإننا بحاجة لتخزينه في الذيل ونقوم بتحديث حجمنا. وذلك ما قد يكون الذيل في هذه الحالة؟ ليست مكتوبة بشكل واضح بها. كيف كنا تخزينه؟ ما يمكن أن يكون الذيل؟ لذلك دعونا المشي من خلال هذا المثال. لذلك هذا هو مجموعة من حجم 6، أليس كذلك؟ ولدينا الآن، حجمنا هو 5. وعندما نضع في ذلك، انها تسير للذهاب إلى المؤشر الخامس، أليس كذلك؟ لذلك تخزين في الذيل. طريقة أخرى لإرسال الذيل من شأنه فقط أن تكون لدينا مجموعة في مؤشر الحجم، أليس كذلك؟ هذا هو حجم 5. الشيء التالي هو ذاهب للذهاب إلى 5. بارد؟ موافق. يحصل قليلا أكثر تعقيدا عندما نبدأ العبث مع الرأس. نعم؟ الجمهور: هل هذا يعني أننا كان قد أعلن صفيف وكان خمسة عناصر طويلة و ثم نحن مضيفا على ذلك؟ رئيس 1: رقم حتى في هذه الحالة، وهذا هو كومة. سوف أعلن هذا باعتبارها مجموعة من حجم 6. وفي هذه الحالة، فإننا لدينا واحدة فقط اليسار الفضاء. حسنا، هناك شيء واحد في هذا الحالة، إذا هو في رؤوسنا 0 ثم نحن فقط يمكن إضافته في الحجم. لكنه يحصل اصعب قليلا لأن في الواقع، انهم لم يكن لديك شريحة لهذا، لذلك انا ذاهب رسم واحد لأنها ليست تماما بهذه البساطة بمجرد بدء التخلص من الأشياء. حتى حين مع كومة أنت فقط من أي وقت مضى ما يدعو للقلق حول ما هو حجم عندما كنت تقوم بإضافة شيء على، مع طابور تحتاج أيضا إلى جعل تأكد من أن يتم احتساب رأسك ل، لأن الشيء باردة حول طوابير هو أنه إذا كنت لا في القدرات، يمكنك جعل فعلا التفاف حولها. حسنا، واحد thing-- أوه، هذا هو الطباشير رهيب. شيء واحد هو أن تنظر في القضية. سنفعل فقط خمسة. موافق، لذلك نحن ذاهبون ل يقول رئيس هو هنا. هذا هو 0، 1، 2، 3، 4. رئيس هناك، و يرجى أن الأمور في نفوسهم. ونحن نريد أن أضيف شيئا في، أليس كذلك؟ ذلك الشيء الذي نحتاجه ل أعرفه هو أن الرأس هو دائما الذهاب إلى التحرك بهذه الطريقة و ثم حلقة حول العودة، موافق؟ لذلك هذا الطابور لديه مساحة، أليس كذلك؟ لها مساحة في البداية، نوع من عكس ذلك. وذلك ما يتعين علينا القيام به هو أننا تحتاج إلى حساب الذيل. إذا كنت تعرف أن لديك رئيس لم تتحرك، ذيل هو مجرد مجموعة الخاصة بك في مؤشر الحجم. ولكن في الواقع، إذا كنت تستخدم قائمة الانتظار، وربما يتم تحديث رأسك. لذلك ما عليك القيام به هو في الواقع حساب الذيل. فما نقوم به هو هذه الصيغة هنا، وأنا ذاهب لتمكنك الرجال يفكرون، و ثم سنتحدث عن ذلك. لذلك هذا هو القدرة. ولذلك فإن هذا سوف فعلا أعطيك طريقة للقيام بذلك. لأنه في هذه الحالة، ما هي؟ رئيس لدينا هو في 1، حجم لدينا هو 4. إذا كان لنا أن وزارة الدفاع بنسبة 5، نحصل 0 الذي هو المكان الذي ينبغي إدخال ذلك. حتى ذلك الحين في حالة القادمة، إذا كان لنا أن نفعل ذلك، نقول، حسنا، دعونا dequeue شيء. نحن dequeue هذا. نأخذ من هذا العنصر، أليس كذلك؟ والآن رؤوسنا يشير هنا، ونريد أن نضيف في شيء آخر. وهذا هو الأساس ظهر خطنا، أليس كذلك؟ يمكن طوابير التفاف حول مجموعة. هذا هو أحد الفروق الرئيسية. مداخن، لا يمكنك أن تفعل هذا. مع طوابير، يمكنك لأن كل ما يهم هو أن تعرف ما وأضيف مؤخرا. لأن كل شيء سوف تضاف في هذا الاتجاه اليساري، في هذه الحالة، ثم التفاف حولها، ويمكنك الاستمرار في وضع عناصر جديدة في الجزء الأمامي من المصفوفة لأنها ليست حقا وأمام مجموعة بعد الآن. يمكنك التفكير في بدء مجموعة حيث رأسك كما هو في الواقع. لذلك هذه الصيغة هي كيف يمكنك حساب الذيل الخاص بك. هل هذا منطقي؟ موافق. OK، dequeue، ثم يا رفاق لدينا 10 دقيقة أن يسألني أي أسئلة توضيحية تريد، لأنني أعلم أنه مجنون. كل الحق، وذلك في نفس way-- أنا لا أعرف إذا لاحظوا يا رفاق، لكن CS هو كل شيء عن الأنماط. الامور الى حد كبير و نفسه، فقط مع القرص الصغيرة. نفس ذلك الشيء هنا. نحن بحاجة إلى التحقق لمعرفة ما إذا كنا فعلا لديك شيء لدينا في قائمة الانتظار، أليس كذلك؟ نقول، حسنا، هو حجمنا أكبر من 0؟ بارد. إذا فعلنا ذلك، ثم ننتقل رؤوسنا، والتي ما أنا فقط أثبت هنا. نقوم بتحديث رؤوسنا لتكون واحدة أكثر. ثم نحن لدينا إنقاص حجم ويعود عنصر. هناك أكثر واقعية بكثير كود في study.cs50.net، وأنا أوصي الذهاب من خلال ذلك إذا كان لديك الوقت، حتى لو انها مجرد شبه التعليمات البرمجية. وإذا كنت الرجال يريدون التحدث من خلال إن معي احد على واحد، واسمحوا لي أعرف. سأكون سعيدا ل. هياكل البيانات، إذا كنت تأخذ CS 124، عليك أعرف أن هياكل البيانات الحصول جدا المرح وهذا هو مجرد بداية. لذلك أنا أعلم أنه من الصعب. لا بأس. نحن نجاهد. أنا لا تزال تفعل. لذلك لا تقلق كثيرا حول هذا الموضوع. ولكن هذا هو في الأساس الخاص بك تحطم دورة في هياكل البيانات. وأنا أعلم أنه الكثير. هل هناك أي شيء أننا أود أن أذهب مرة أخرى؟ أي شيء نريد أن نتحدث من خلال؟ نعم؟ الجمهور: ولهذا المثال، حتى الذيل الجديد في 0 فوق ذلك؟ رئيس 1: نعم. الجمهور: موافق. حتى ذلك الحين يمر بها، كنت قد 1 زائد 4 or-- رئيس 1: إذا كنت قائلا: عندما نريد أن تذهب تفعل هذا مرة أخرى؟ الجمهور: نعم. حتى لو كنت كشف out-- أين لك حساب في الذيل من ذلك؟ رئيس 1: حتى الذيل كان in-- لقد غيرت هذه. حتى في هذا المثال هنا، وكان هذا مجموعة نحن نبحث في، موافق؟ لذلك لدينا أشياء في 1 و 2 و 3 و 4. لذلك لدينا رؤوسنا يساوي 1 في هذه النقطة، وحجمنا يساوي 4 عند هذه النقطة، أليس كذلك؟ لكم جميعا نتفق على أن هذا هو الحال؟ لذلك نحن نفعل الرأس بالإضافة إلى حجم، والتي يعطينا 5، ومن ثم فإننا زارة الدفاع بنسبة 5. نحصل على 0، والذي يخبرنا أن 0 هو أين هو ذيل لدينا، حيث لدينا الفضاء. الجمهور: ما هو الحد الأقصى؟ رئيس 1: القدرة. آسف. لذلك هذا هو حجم مجموعة الخاصة بك. نعم؟ الجمهور: [غير مسموع] قبل نعود العنصر؟ رئيس 1: لذلك نحن نقل رئاسة أو العودة لحظة؟ حتى إذا انتقلنا احد، إنقاص حجم؟ عقد يوم. أنا بالتأكيد نسيت أخرى. لا تهتم. ليست هناك صيغة أخرى. نعم، هل يريدون العودة الرأس ومن ثم نقله مرة أخرى. الجمهور: موافق، لأنه في هذه نقطة، وكان رئيس في 0، ثم تريد العودة مؤشر 0 ثم جعل رئيس 1؟ رئيس 1: الحق. أعتقد أن هناك آخر صيغة نوع من هذا القبيل. أنا لم يكن لديك في أعلى رأسي كما أنا لا أريد أن أقدم لكم خطأ واحد. ولكن اعتقد انها صالحة تماما ل يقول، موافق، وتخزين هذه element-- أيا كان عنصر رئيس في is-- إنقاص بك الحجم، وتحرك رأسك فوق، وعودة أيا كان ذلك العنصر. هذا صحيح تماما. موافق. أشعر أن هذا ليس مثل most-- كنت لا الذهاب الى الخروج من هنا مثل، نعم، أنا أعرف محاولات. حصلت على كل شيء. وهذا موافق. أعدك. لكن هياكل البيانات هي شيء فإنه يأخذ الكثير من الوقت لتعتاد على. على الارجح واحدة من أصعب الأشياء، وأعتقد، في هذه الدورة. لذلك يأخذ بالتأكيد التكرار وأنا أبحث at-- لم أكن أعرف حقا القوائم المرتبطة حتى فعلت الكثير جدا معهم، في بنفس الطريقة التي لم أكن فهم حقا المؤشرات حتى لقد كان لتدريسه لمدة سنوات وتفعل بي psets الخاصة بها. فإنه يأخذ الكثير من التكرار والوقت. وفي نهاية المطاف، سيكون انقر نوع. لكن في الوقت نفسه، إذا كان لديك نوع لفهم مستوى عال من ما هذه الأمور، مزاياها وcons-- وهو ما ونحن نميل حقا إلى التأكيد، خاصة في سياق مقدمة. مثل، لماذا نستخدم محاولة خلال مجموعة؟ مثل، ما هي ايجابيات وسلبيات كل من هذه؟ وفهم المقايضات بين كل هذه الهياكل ما هو أكثر أهمية بكثير الآن. قد يكون هناك واحد مجنون سؤال أو اثنين من هذا سوف يطلب منك تنفيذ دفعة أو تنفيذ البوب ​​أو إدراج بقائمة الانتظار وdequeue. ولكن بالنسبة للجزء الأكبر، بعد أن فهم أعلى مستوى وأكثر من ذلك لفهم بديهية هو أكثر أهمية من الواقع القدرة على تنفيذه. انها تريد ان تكون رائع حقا إذا كان كل واحد منكم يمكن الخروج والذهاب تنفيذ المحاولة، ولكننا نفهم انها ليست بالضرورة الشيء الأكثر منطقية في الوقت الحالي. ولكن يمكنك في PSET الخاص بك، إذا كنت ترغب ل، ثم ستحصل على الممارسة، ثم ربما عليك أفهم ذلك حقا. نعم؟ الجمهور: حسنا، حتى تلك التي هي نحن من المفترض أن تستخدم في PSET؟ هل أنا بحاجة لاستخدام واحد منهم؟ رئيس 1: نعم. ولذلك عليك اختيارك. أعتقد في هذه الحالة، يمكننا الحديث عن PSET قليلا لأنني ركض من خلال هذه. حتى في PSET، لديك الخاص بك اختيار يحاول أو الجداول التجزئة. بعض الناس سيحاولون واستخدام الفلاتر ازهر، ولكن هؤلاء هم من الناحية الفنية غير صحيحة. بسبب طبيعتها الاحتمالية، أنها تعطي ايجابيات كاذبة في بعض الأحيان. انهم في نظرة باردة، وإن كان. أوصي تبحث في منهم على الأقل. ولكن لديك اختيارك بين جدول تجزئة والمحاولة. والتي ستكون فيها قمت بتحميل في قاموسك. وسوف تحتاج إلى اختيار وظيفة التجزئة الخاصة بك، ستحتاج إلى اختيار عدد دلاء لديك، وسوف تختلف. مثل إذا كان لديك المزيد من الدلاء، و ربما انها سوف تعمل بشكل أسرع. ولكن ربما كنت إضاعة الكثير من الفضاء بهذه الطريقة، على الرغم من. عليك ان الرقم بها. Mmhmm؟ الجمهور: قلت قبل ذلك يمكننا استخدام وظائف التجزئة الأخرى، أننا لم يكن لديك ل إنشاء دالة البعثرة؟ رئيس 1: نعم، الحق. هكذا حرفيا عن وظيفة التجزئة الخاصة بك، مثل جوجل "وظيفة تجزئة" وابحث عن بعض منها باردة. لا يتوقع منك أن بناء وظائف التجزئة الخاصة بك. الناس يقضون بها أطروحات حول هذه الأمور. لذا لا تقلق بشأن بناء بنفسك. العثور على واحد على الانترنت لتبدأ. بعض منهم لديك ل التلاعب قليلا لجعل أنواع الإرجاع من تطابق ما يصل وغيرها، وذلك في البداية، أوصي باستخدام شيء من السهل حقا أن ربما فقط علامات الرقم على الحرف الأول. ثم بمجرد الانتهاء من ذلك العمل، دمج وظيفة تجزئة برودة. Mmhmm؟ الجمهور: هل تكون المحاولة أو كفاءة ولكن فقط يصعب، like-- رئيس 1: حتى المحاولة، كما أعتقد، من الصعب التخمين لتنفيذ ولكن بشكل سريع جدا. ومع ذلك، يأخذ مساحة أكبر. مرة أخرى، يمكنك تحسين كل من هم في طرق مختلفة وهناك طرق علي: الجمهور: كيف نحن متدرج على ذلك؟ هل matter-- رئيس 1: إذا كنت متدرج بالطريقة العادية. وأنت تسير لتكون متدرجة على التصميم. أيهما الطريقة التي لديك، وتريد أن تأكد من انها أنيقة بقدر ما يمكن أن تكون وفعالة كما يمكن أن يكون. ولكن إذا اخترت المحاولة أو التجزئة الجدول، طالما أنه يعمل، نحن سعداء مع ذلك. وإذا كنت تستخدم شيئا تجزئات في الرسالة الأولى، فلا بأس، مثل ربما مثل تصميم الحكمة. نحن أيضا الوصول نقطة في هذا semester-- أنا لا أعرف ما إذا كنت الرجال noticed-- إذا كنت تنخفض درجات PSET قليلا بسبب التصميم وغيرها، هذا ما يرام تماما. انها تحصل على نقطة حيث لديك برامج تزداد تعقيدا. هناك المزيد من الأماكن يمكنك تحسين. لذلك فمن الطبيعي تماما. انها ليست ان كنت فعل ما هو أسوأ على PSET الخاص بك. انها مجرد أننا يجري من الصعب عليك الآن. لذلك الجميع يشعرون به. أنا فقط متدرج كل ما تبذلونه من psets. وأنا أعلم الجميع يشعر به. حتى لا تكون قلقة بشأن ذلك. وإذا كان لديك أي أسئلة حول psets قبل أو الطرق التي يمكنك تحسين، أحاول والتعليق المحددة الأماكن، ولكن في بعض الأحيان فوات وأشعر بالتعب. هل هناك أي أمور أخرى حول هياكل البيانات؟ أنا متأكد يا رفاق لا حقا أريد أن أتحدث عنها بعد الآن، ولكن إذا كان هناك، أنا سعيد ل يذهب أكثر منهم، فضلا عن أي شيء محاضرة من هذا الماضي الاسبوع أو الاسبوع الماضي. أنا أعرف كان الأسبوع الماضي عن مراجعة، لذلك نحن قد تم تخطيها على بعض المراجعة من المحاضرة. أي أسئلة أخرى لا أستطيع الإجابة؟ حسنا، كل الحق. حسنا، يا رفاق خروج 15 دقيقة في وقت مبكر. آمل أن يكون هذا كان شبه مفيدة على الأقل، وسوف أرى يا رفاق الأسبوع المقبل، أو ساعات العمل يوم الخميس. هل هناك طلبات الوجبات الخفيفة للأسبوع القادم، انها الشيء؟ لأنني نسيت الحلوى اليوم. واحضرت الحلوى الأخيرة الأسبوع، ولكنه كان يوم كولومبوس، حيث كانت هناك مثل ستة أشخاص وكان أربعة أكياس من الحلوى لأنفسهم. أنا يمكن أن يجلب الانفجارات النجمية مرة أخرى إذا أردت. النجمية؟ حسنا، يبدو جيدا. لقد يوم عظيم، والرجال.