1 00:00:07,260 --> 00:00:10,050 [Powered by Google Translate] في البرمجة، ونحن غالبا ما تحتاج لتمثيل قوائم القيم، 2 00:00:10,050 --> 00:00:12,840 مثل أسماء الطلاب في قسم 3 00:00:12,840 --> 00:00:15,100 أو على درجات عن آخر مسابقة. 4 00:00:15,100 --> 00:00:17,430 >> في اللغة C، أعلن ويمكن استخدام المصفوفات 5 00:00:17,430 --> 00:00:19,160 لتخزين القوائم. 6 00:00:19,160 --> 00:00:21,200 فإنه من السهل أن تعداد عناصر قائمة 7 00:00:21,200 --> 00:00:23,390 المخزنة في صفيف، وإذا كنت في حاجة للوصول إلى 8 00:00:23,390 --> 00:00:25,050 أو تعديل العنصر القائمة إيث 9 00:00:25,050 --> 00:00:27,570 مؤشر لبعض التعسفي I، 10 00:00:27,570 --> 00:00:29,910 ويمكن أن يتم ذلك في وقت ثابت، 11 00:00:29,910 --> 00:00:31,660 ولكن لها عيوب المصفوفات أيضا. 12 00:00:31,660 --> 00:00:33,850 >> عندما نعلن لهم، وكنت مطلوب منا أن يقول 13 00:00:33,850 --> 00:00:35,900 في خط الهجوم كيف تكون كبيرة، 14 00:00:35,900 --> 00:00:38,160 وهذا هو، كم عدد العناصر التي يمكن تخزينها 15 00:00:38,160 --> 00:00:40,780 وكيف كبيرة هي هذه العناصر، والتي يتم تحديدها وفقا لنوع الخاصة بهم. 16 00:00:40,780 --> 00:00:45,450 على سبيل المثال، الباحث ARR (10) 17 00:00:45,450 --> 00:00:48,220 يمكن تخزين 10 سلعة 18 00:00:48,220 --> 00:00:50,200 التي هي بحجم كثافة العمليات. 19 00:00:50,200 --> 00:00:52,590 >> لا يمكننا تغيير حجم مجموعة بعد الإعلان. 20 00:00:52,590 --> 00:00:55,290 لدينا لجعل مجموعة جديدة إذا كنا نريد لتخزين المزيد من العناصر. 21 00:00:55,290 --> 00:00:57,410 السبب هذا القيد موجود هو أن لدينا 22 00:00:57,410 --> 00:00:59,040 برنامج بتخزين مجموعة كاملة 23 00:00:59,040 --> 00:01:02,310 كما قطعة متجاورة من الذاكرة. 24 00:01:02,310 --> 00:01:04,500 أقول هذا هو المخزن المؤقت حيث أننا لدينا المخزنة في مجموعة. 25 00:01:04,500 --> 00:01:06,910 قد تكون هناك متغيرات أخرى 26 00:01:06,910 --> 00:01:08,310 يقع بجوار مجموعة 27 00:01:08,310 --> 00:01:10,060 في الذاكرة، حتى يمكن لنا أن 28 00:01:10,060 --> 00:01:12,060 جعل مجرد مجموعة أكبر. 29 00:01:12,060 --> 00:01:15,700 >> أحيانا نود أن التجارة الصفيف الوصول إلى البيانات بسرعة عالية 30 00:01:15,700 --> 00:01:17,650 لمرونة أكثر من ذلك بقليل. 31 00:01:17,650 --> 00:01:20,380 أدخل قائمة مرتبطة، وآخر بنية البيانات الأساسية 32 00:01:20,380 --> 00:01:22,360 قد لا تكون مألوفة كما هو الحال مع. 33 00:01:22,360 --> 00:01:24,200 على مستوى عال، 34 00:01:24,200 --> 00:01:26,840 قائمة مرتبطة بتخزين البيانات في تسلسل العقد 35 00:01:26,840 --> 00:01:29,280 أن ترتبط مع بعضها البعض مع وصلات، 36 00:01:29,280 --> 00:01:31,760 ومن هنا جاءت تسميته 'قائمة مرتبطة. " 37 00:01:31,760 --> 00:01:33,840 كما سنرى، هذا الاختلاف في تصميم 38 00:01:33,840 --> 00:01:35,500 يؤدي إلى مزايا وعيوب مختلفة 39 00:01:35,500 --> 00:01:37,000 من صفيف. 40 00:01:37,000 --> 00:01:39,840 >> وهنا بعض التعليمات البرمجية C للحصول على قائمة بسيطة جدا من ربط أعداد صحيحة. 41 00:01:39,840 --> 00:01:42,190 يمكنك أن ترى أن لدينا تمثيل كل عقدة 42 00:01:42,190 --> 00:01:45,520 في القائمة باعتبارها البنية التي تحتوي على 2 الأشياء، 43 00:01:45,520 --> 00:01:47,280 عدد صحيح لتخزين تسمى 'فال' 44 00:01:47,280 --> 00:01:50,460 وتصل إلى العقدة التالية في القائمة 45 00:01:50,460 --> 00:01:52,990 التي نمثلها كمؤشر يسمى 'القادمة'. 46 00:01:54,120 --> 00:01:56,780 بهذه الطريقة، يمكننا تتبع القائمة بأكملها 47 00:01:56,780 --> 00:01:58,790 مع مؤشر واحد فقط إلى عقدة 1، 48 00:01:58,790 --> 00:02:01,270 وبعد ذلك يمكننا تتبع المؤشرات التالية 49 00:02:01,270 --> 00:02:03,130 إلى عقدة 2، 50 00:02:03,130 --> 00:02:05,280 إلى عقدة 3، 51 00:02:05,280 --> 00:02:07,000 إلى عقدة 4، 52 00:02:07,000 --> 00:02:09,889 وهلم جرا، حتى نصل إلى نهاية القائمة. 53 00:02:10,520 --> 00:02:12,210 >> قد تكون قادرة على الاستفادة انظر 1 هذا له 54 00:02:12,210 --> 00:02:14,490 على هيكل ثابت الصفيف - مع قائمة مرتبطة، 55 00:02:14,490 --> 00:02:16,450 نحن لسنا بحاجة جزءا كبيرا من الذاكرة تماما. 56 00:02:17,400 --> 00:02:20,530 يمكن العقدة 1 من لائحة العيش في هذا المكان في الذاكرة، 57 00:02:20,530 --> 00:02:23,160 ويمكن أن تكون العقدة 2 على طول الطريق إلى هنا. 58 00:02:23,160 --> 00:02:25,780 يمكن أن نصل إلى كافة العقد بغض النظر عن مكان في الذاكرة هم، 59 00:02:25,780 --> 00:02:28,890 لأن البدء في عقدة 1، مؤشر كل عقدة المقبل 60 00:02:28,890 --> 00:02:31,700 يخبرنا بالضبط أين تذهب المقبل. 61 00:02:31,700 --> 00:02:33,670 >> بالإضافة إلى ذلك، فإننا لا يجب أن أقول في خط الهجوم 62 00:02:33,670 --> 00:02:36,740 كيف كبيرة وسوف تكون قائمة مرتبطة الطريقة التي نؤدي بها مع صفائف ثابت، 63 00:02:36,740 --> 00:02:39,060 منذ يمكننا الحفاظ على إضافة العقد إلى قائمة 64 00:02:39,060 --> 00:02:42,600 طالما هناك مساحة في مكان ما في الذاكرة من أجل العقد الجديد. 65 00:02:42,600 --> 00:02:45,370 لذلك، من السهل القوائم المرتبطة لتغيير حجم حيوي. 66 00:02:45,370 --> 00:02:47,950 ويقول، في وقت لاحق في برنامج نحن بحاجة إلى إضافة المزيد من العقد 67 00:02:47,950 --> 00:02:49,350 في قائمتنا. 68 00:02:49,350 --> 00:02:51,480 لإدراج عقدة جديدة إلى قائمتنا على الطاير، 69 00:02:51,480 --> 00:02:53,740 كل ما عليك القيام به هو تخصيص ذاكرة لتلك العقدة، 70 00:02:53,740 --> 00:02:55,630 صوت نزول المطر في قيمة البيانات، 71 00:02:55,630 --> 00:02:59,070 ووضع بعد ذلك حيث نريد عن طريق ضبط المؤشرات المناسبة. 72 00:02:59,070 --> 00:03:02,310 >> على سبيل المثال، إذا كنا نريد لوضع العقدة في ما بين 73 00:03:02,310 --> 00:03:04,020 العقد 2nd و 3rd القائمة، 74 00:03:04,020 --> 00:03:06,800  ونحن لن يكون لنقل العقد 2nd أو 3rd على الإطلاق. 75 00:03:06,800 --> 00:03:09,190 نحن نقول إدراج هذه العقدة الحمراء. 76 00:03:09,190 --> 00:03:12,890 تم تعيين كل ما تريد القيام به مؤشر عقدة جديدة القادم 77 00:03:12,890 --> 00:03:14,870 للإشارة إلى عقدة 3 78 00:03:14,870 --> 00:03:18,580 وتركيب شبكة كهرباء جديدة ثم مؤشر عقدة 2 القادم 79 00:03:18,580 --> 00:03:20,980 للإشارة إلى العقدة الجديدة. 80 00:03:22,340 --> 00:03:24,370 لذلك، يمكننا تغيير حجم قوائمنا على الطاير 81 00:03:24,370 --> 00:03:26,090 منذ جهاز الكمبيوتر لدينا لا تعتمد على الفهرسة، 82 00:03:26,090 --> 00:03:28,990 ولكن بدلا من ذلك على ربط استخدام مؤشرات لتخزينها. 83 00:03:29,120 --> 00:03:31,600 >> ومع ذلك، فإن عيوب ربط القوائم 84 00:03:31,600 --> 00:03:33,370 وأنه، على خلاف مجموعة ثابتة، 85 00:03:33,370 --> 00:03:36,690 الكمبيوتر لا يمكن القفز إلى وسط القائمة. 86 00:03:38,040 --> 00:03:40,780 منذ الكمبيوتر لزيارة كل عقدة في قائمة مرتبطة 87 00:03:40,780 --> 00:03:42,330 للوصول الى المرحلة التالية، 88 00:03:42,330 --> 00:03:44,770 انها سوف يستغرق وقتا أطول للعثور على عقدة معينة 89 00:03:44,770 --> 00:03:46,400 مما كان من شأنه في صفيف. 90 00:03:46,400 --> 00:03:48,660 اجتياز القائمة بأكملها يستغرق وقتا النسبي 91 00:03:48,660 --> 00:03:50,580 لطول القائمة، 92 00:03:50,580 --> 00:03:54,630 أو O (ن) في تدوين مقارب. 93 00:03:54,630 --> 00:03:56,510 في المتوسط، ووصلت أي عقدة 94 00:03:56,510 --> 00:03:58,800 تستغرق وقتا أيضا متناسبة مع ن. 95 00:03:58,800 --> 00:04:00,700 >> الآن، دعونا الكتابة فعلا بعض التعليمات البرمجية 96 00:04:00,700 --> 00:04:02,000 الذي يعمل مع القوائم المرتبطة. 97 00:04:02,000 --> 00:04:04,220 دعونا نقول اننا نريد قائمة مرتبطة من الأعداد الصحيحة. 98 00:04:04,220 --> 00:04:06,140 يمكننا تمثل عقدة في قائمتنا مرة أخرى 99 00:04:06,140 --> 00:04:08,340 كما البنية مع 2 المجالات، 100 00:04:08,340 --> 00:04:10,750 قيمة عددية تسمى "فال" 101 00:04:10,750 --> 00:04:13,490 ومؤشر بجوار العقدة التالية من القائمة. 102 00:04:13,490 --> 00:04:15,660 حسنا، يبدو بسيطا بما فيه الكفاية. 103 00:04:15,660 --> 00:04:17,220 >> دعونا نقول أننا نريد أن كتابة دالة 104 00:04:17,220 --> 00:04:19,329 الذي يخترق القائمة ويطبع خارج 105 00:04:19,329 --> 00:04:22,150 القيمة المخزنة في العقدة الأخيرة من القائمة. 106 00:04:22,150 --> 00:04:24,850 حسنا، هذا يعني أننا بحاجة إلى اجتياز جميع العقد في القائمة 107 00:04:24,850 --> 00:04:27,310 للعثور على آخر، ولكن لأننا لا تقوم بإضافة 108 00:04:27,310 --> 00:04:29,250 أو حذف أي شيء، ونحن لا نريد لتغيير 109 00:04:29,250 --> 00:04:32,210 البنية الداخلية للمؤشرات التالية في القائمة. 110 00:04:32,210 --> 00:04:34,790 >> لذلك، سنحتاج مؤشر خصيصا لاجتياز 111 00:04:34,790 --> 00:04:36,940 الذي سوف نسميه "المجنزرة. ' 112 00:04:36,940 --> 00:04:38,870 فإنه سيتم الزحف من خلال جميع عناصر القائمة 113 00:04:38,870 --> 00:04:41,190 وذلك باتباع سلسلة من المؤشرات القادمة. 114 00:04:41,190 --> 00:04:43,750 كل ما لدينا هو تخزين مؤشر إلى عقدة 1، 115 00:04:43,750 --> 00:04:45,730 أو 'رئيس' القائمة. 116 00:04:45,730 --> 00:04:47,370 ويوضح رئيس لعقدة 1. 117 00:04:47,370 --> 00:04:49,120 انها من نوع مؤشر إلى عقدة. 118 00:04:49,120 --> 00:04:51,280 >> للحصول على عقدة الفعلي 1 في القائمة، 119 00:04:51,280 --> 00:04:53,250 علينا أن إلغاء مرجعية هذا المؤشر، 120 00:04:53,250 --> 00:04:55,100 ولكن قبل أن نتمكن من إلغاء مرجعية، ونحن بحاجة إلى التحقق 121 00:04:55,100 --> 00:04:57,180 إذا كان المؤشر فارغة الأولى. 122 00:04:57,180 --> 00:04:59,190 اذا كان باطلا، كانت القائمة فارغة، 123 00:04:59,190 --> 00:05:01,320 وينبغي لنا أن طباعة رسالة، لأن القائمة فارغة، 124 00:05:01,320 --> 00:05:03,250 ليس هناك عقدة الماضي. 125 00:05:03,250 --> 00:05:05,190 ولكن، دعنا نقول أن القائمة ليست فارغة. 126 00:05:05,190 --> 00:05:08,340 إذا لم تكن كذلك، ثم يجب علينا الزحف من خلال القائمة بأكملها 127 00:05:08,340 --> 00:05:10,440 حتى نصل إلى العقدة الأخيرة من القائمة، 128 00:05:10,440 --> 00:05:13,030 وكيف يمكننا معرفة ما إذا كان نحن نبحث في عقدة الأخير في القائمة؟ 129 00:05:13,670 --> 00:05:16,660 >> حسنا، إذا كان مؤشر عقدة القادم باطل، 130 00:05:16,660 --> 00:05:18,320 ونحن نعلم أننا في نهاية 131 00:05:18,320 --> 00:05:22,390 حيث أن المؤشر التالي الأخيرة ليس لديهم عقدة التالي في القائمة للإشارة إلى. 132 00:05:22,390 --> 00:05:26,590 انها ممارسة جيدة للحفاظ على المؤشر دائما عقدة الماضي القادم تهيئة إلى قيمة خالية 133 00:05:26,590 --> 00:05:30,800 لتحتوي على خاصية موحدة التي تنبهنا عندما كنا قد وصلنا إلى نهاية القائمة. 134 00:05:30,800 --> 00:05:33,510 >> لذا، إذا المجنزرة → القادم باطل، 135 00:05:34,120 --> 00:05:38,270 تذكر أن بناء الجملة سهم هو اختصار ليعتبر إلغاء مرجعية 136 00:05:38,270 --> 00:05:40,010 مؤشر إلى البنية، ثم الوصول إلى 137 00:05:40,010 --> 00:05:42,510 في الحقل التالي تعادل محرج: 138 00:05:42,510 --> 00:05:48,750 (* الزاحف). المقبل. 139 00:05:49,820 --> 00:05:51,260 مرة واحدة وجدنا العقدة الأخيرة، 140 00:05:51,260 --> 00:05:53,830 نحن نريد لطباعة المجنزرة → فال، 141 00:05:53,830 --> 00:05:55,000 القيمة في العقدة الحالية 142 00:05:55,000 --> 00:05:57,130 الذي نعرفه هو آخر واحد. 143 00:05:57,130 --> 00:05:59,740 وإلا، إذا نحن لسنا بعد في عقدة الأخير في القائمة، 144 00:05:59,740 --> 00:06:02,340 علينا أن ننتقل إلى العقدة التالية في القائمة 145 00:06:02,340 --> 00:06:04,750 ومعرفة ما اذا كان هذا هو آخر. 146 00:06:04,750 --> 00:06:07,010 للقيام بذلك، ونحن مجرد مجموعة مؤشر لدينا حفارات 147 00:06:07,010 --> 00:06:09,840 للإشارة إلى قيمة العقدة الحالية القادم، 148 00:06:09,840 --> 00:06:11,680 وهذا هو، العقدة التالي في القائمة. 149 00:06:11,680 --> 00:06:13,030 يتم ذلك من خلال وضع 150 00:06:13,030 --> 00:06:15,280 حفارات زحافة = → المقبل. 151 00:06:16,050 --> 00:06:18,960 ثم نكرر هذه العملية، مع حلقة على سبيل المثال، 152 00:06:18,960 --> 00:06:20,960 حتى نجد العقدة الأخيرة. 153 00:06:20,960 --> 00:06:23,150 لذلك، على سبيل المثال، إذا كان المجنزرة مشيرا إلى الرأس، 154 00:06:24,050 --> 00:06:27,710 وضعنا المجنزرة للإشارة إلى المجنزرة → المقبل، 155 00:06:27,710 --> 00:06:30,960 الذي هو نفس الحقل التالي من العقدة 1. 156 00:06:30,960 --> 00:06:33,620 حتى الآن، الزاحف يشير إلى عقدة 2، 157 00:06:33,620 --> 00:06:35,480 ومرة أخرى، نكرر هذا مع حلقة، 158 00:06:37,220 --> 00:06:40,610 حتى وجدنا العقدة الأخيرة، وهذا هو، 159 00:06:40,610 --> 00:06:43,640 حيث مؤشر للعقدة التالية يشير إلى قيمة خالية. 160 00:06:43,640 --> 00:06:45,070 ويوجد لدينا ذلك، 161 00:06:45,070 --> 00:06:47,620 وجدنا العقدة الأخيرة في القائمة، وإلى طباعة قيمته، 162 00:06:47,620 --> 00:06:50,800 نحن فقط استخدام حفارات → فال. 163 00:06:50,800 --> 00:06:53,130 >> تعبر ليست سيئة للغاية، ولكن ماذا عن إدراج؟ 164 00:06:53,130 --> 00:06:56,290 دعونا نقول أننا نريد أن إدراج عدد صحيح في موقف 4th 165 00:06:56,290 --> 00:06:58,040 في قائمة عدد صحيح. 166 00:06:58,040 --> 00:07:01,280 وهذا هو بين العقد الحالي 3rd و 4th. 167 00:07:01,280 --> 00:07:03,760 مرة أخرى، علينا أن تجتاز قائمة فقط على 168 00:07:03,760 --> 00:07:06,520 الوصول إلى العنصر 3، واحدة بعد ادخال نحن. 169 00:07:06,520 --> 00:07:09,300 لذلك، فإننا نخلق مؤشر المجنزرة مرة أخرى لاجتياز القائمة، 170 00:07:09,300 --> 00:07:11,400 تحقق مما إذا المؤشر الرئيسي لدينا هو باطل، 171 00:07:11,400 --> 00:07:14,810 وإذا لم تكن كذلك، لدينا نقطة مؤشر المجنزرة في عقدة الرأس. 172 00:07:16,880 --> 00:07:18,060 لذلك، نحن في العنصر 1. 173 00:07:18,060 --> 00:07:21,020 علينا ان نمضي قدما إلى الأمام 2 أكثر العناصر قبل أن نتمكن من إدراج، 174 00:07:21,020 --> 00:07:23,390 حتى نتمكن من استخدام حلقة For 175 00:07:23,390 --> 00:07:26,430 كثافة العمليات ط = 1، وأنا <3، وأنا + + 176 00:07:26,430 --> 00:07:28,590 والتكرار في كل من الحلقة، 177 00:07:28,590 --> 00:07:31,540 تقدم مؤشر لدينا حفارات إلى الأمام بمقدار 1 عقدة 178 00:07:31,540 --> 00:07:34,570 عن طريق فحص إذا حقل العقدة الحالية القادم باطل، 179 00:07:34,570 --> 00:07:37,550 وإذا لم تكن كذلك، حرك المؤشر لدينا حفارات إلى العقدة المقبل 180 00:07:37,550 --> 00:07:41,810 من خلال وضع المؤشر عليه يساوي العقدة الحالية القادم. 181 00:07:41,810 --> 00:07:45,210 لذلك، لدينا حلقة منذ تقول للقيام بذلك 182 00:07:45,210 --> 00:07:47,550 مرتين، 183 00:07:49,610 --> 00:07:51,190 لقد وصلنا إلى عقدة 3، 184 00:07:51,190 --> 00:07:53,110 ومرة واحدة وصلت لدينا مؤشر المجنزرة عقدة بعد 185 00:07:53,110 --> 00:07:55,270 الذي نريد أن إدراج عدد صحيح الجديد، 186 00:07:55,270 --> 00:07:57,050 كيف يمكننا فعلا القيام بما إدراج؟ 187 00:07:57,050 --> 00:07:59,440 >> حسنا، صحيح الجديد لابد من إدراجها في قائمة 188 00:07:59,440 --> 00:08:01,250 كجزء من البنية في العقدة الخاصة، 189 00:08:01,250 --> 00:08:03,140 لأن هذا هو حقا سلسلة من العقد. 190 00:08:03,140 --> 00:08:05,690 لذلك، دعونا جعل مؤشر جديد لعقدة 191 00:08:05,690 --> 00:08:08,910 ودعا 'new_node،' 192 00:08:08,910 --> 00:08:11,800 وضعه للإشارة إلى الذاكرة التي نخصص الآن 193 00:08:11,800 --> 00:08:14,270 على كومة للعقدة نفسها، 194 00:08:14,270 --> 00:08:16,000 ومقدار الذاكرة نحتاج لتخصيص؟ 195 00:08:16,000 --> 00:08:18,250 حسنا، حجم عقدة، 196 00:08:20,450 --> 00:08:23,410 ونحن نريد لضبط مجالها فال إلى عدد صحيح اننا نريد إدراجه. 197 00:08:23,410 --> 00:08:25,590 دعنا نقول، 6. 198 00:08:25,590 --> 00:08:27,710 الآن، العقدة يحتوي على قيمة عدد صحيح لدينا. 199 00:08:27,710 --> 00:08:30,650 كما انها ممارسة جيدة لتهيئة الميدان عقدة جديدة القادم 200 00:08:30,650 --> 00:08:33,690 للإشارة إلى قيمة خالية، 201 00:08:33,690 --> 00:08:35,080 ولكن ماذا نفعل الآن؟ 202 00:08:35,080 --> 00:08:37,179 >> لدينا لتغيير الهيكل الداخلي للقائمة 203 00:08:37,179 --> 00:08:40,409 والمؤشرات الواردة في القائمة التالية لقائمة 204 00:08:40,409 --> 00:08:42,950 3rd و 4th العقد. 205 00:08:42,950 --> 00:08:46,560 منذ المؤشرات التالية تحديد ترتيب القائمة، 206 00:08:46,560 --> 00:08:48,650 ونحن منذ إدراج عقدة الجديد 207 00:08:48,650 --> 00:08:50,510 الحق في منتصف القائمة، 208 00:08:50,510 --> 00:08:52,010 يمكن أن تكون صعبة بعض الشيء. 209 00:08:52,010 --> 00:08:54,250 هذا هو لأنه، أتذكر، جهاز الكمبيوتر الخاص بنا 210 00:08:54,250 --> 00:08:56,250 وحده يعلم مكان العقد في قائمة 211 00:08:56,250 --> 00:09:00,400 بسبب المؤشرات التالية المخزنة في العقد السابق. 212 00:09:00,400 --> 00:09:03,940 لذا، إذا فقدنا أي وقت مضى مسار أي من هذه المواقع، 213 00:09:03,940 --> 00:09:06,860 يقول من خلال تغيير واحد من المؤشرات التالية في قائمتنا، 214 00:09:06,860 --> 00:09:09,880 على سبيل المثال، يقول غيرنا 215 00:09:09,880 --> 00:09:12,920 العقدة في 3 الحقل التالي 216 00:09:12,920 --> 00:09:15,610 للإشارة إلى بعض عقدة أكثر من هنا. 217 00:09:15,610 --> 00:09:17,920 سنكون من الحظ، لأننا لن 218 00:09:17,920 --> 00:09:20,940 لديك أي فكرة عن مكان للعثور على بقية القائمة، 219 00:09:20,940 --> 00:09:23,070 وهذا هو الواضح سيئة حقا. 220 00:09:23,070 --> 00:09:25,080 لذلك، علينا أن نكون حذرين حقا حول ترتيب 221 00:09:25,080 --> 00:09:28,360 ونحن في التعامل مع المؤشرات القادم خلال الإدراج. 222 00:09:28,360 --> 00:09:30,540 >> لذلك، لتبسيط هذا، دعنا نقول أن 223 00:09:30,540 --> 00:09:32,220 لدينا عقد أول 4 224 00:09:32,220 --> 00:09:36,200 وتسمى A، B، C، D و، مع الأسهم التي تمثل سلسلة من المؤشرات 225 00:09:36,200 --> 00:09:38,070 التي تربط العقد. 226 00:09:38,070 --> 00:09:40,050 لذلك، نحن بحاجة إلى إدراج عقدة الجديد 227 00:09:40,050 --> 00:09:42,070 في العقد بين C و D. 228 00:09:42,070 --> 00:09:45,060 من المهم جدا أن نفعل ذلك في حق النظام، وسوف تظهر لك لماذا. 229 00:09:45,060 --> 00:09:47,500 >> دعونا ننظر في طريقة خاطئة للقيام لأول مرة. 230 00:09:47,500 --> 00:09:49,490 مهلا، نحن نعرف عقدة جديدة يجب أن يأتي مباشرة بعد C، 231 00:09:49,490 --> 00:09:51,910 لذلك دعونا تعيين المؤشر C القادم 232 00:09:51,910 --> 00:09:54,700 للإشارة إلى new_node. 233 00:09:56,530 --> 00:09:59,180 حسنا، يبدو بخير، لدينا فقط لإنهاء الآن 234 00:09:59,180 --> 00:10:01,580 جعل نقطة العقدة الجديدة بجوار مؤشر D، 235 00:10:01,580 --> 00:10:03,250 ولكن الانتظار، كيف يمكننا فعل ذلك؟ 236 00:10:03,250 --> 00:10:05,170 الشيء الوحيد الذي يمكن أن يقول لنا حيث كان D، 237 00:10:05,170 --> 00:10:07,630 كان المؤشر القادمة تخزينها مسبقا في C، 238 00:10:07,630 --> 00:10:09,870 ولكننا فقط أعاد كتابة هذا المؤشر 239 00:10:09,870 --> 00:10:11,170 للإشارة إلى عقدة جديدة، 240 00:10:11,170 --> 00:10:14,230 لذلك لم يعد لدينا أي فكرة حيث D هو في الذاكرة، 241 00:10:14,230 --> 00:10:17,020 وفقدنا بقية القائمة. 242 00:10:17,020 --> 00:10:19,000 ليست جيدة على الإطلاق. 243 00:10:19,000 --> 00:10:21,090 >> الأمر كذلك، كيف نفعل ذلك الحق؟ 244 00:10:22,360 --> 00:10:25,090 الأولى، نقطة مؤشر عقدة جديدة القادم في D. 245 00:10:26,170 --> 00:10:28,990 الآن، كل من الجديدة وعقدة في المؤشرات التالية C 246 00:10:28,990 --> 00:10:30,660 يتم الإشارة إلى نفس العقدة، D، 247 00:10:30,660 --> 00:10:32,290 ولكن هذا شيء طيب. 248 00:10:32,290 --> 00:10:35,680 الآن يمكننا أن نشير مؤشر C المقبل في عقدة جديدة. 249 00:10:37,450 --> 00:10:39,670 لذلك، لقد فعلنا ذلك دون فقدان أية بيانات. 250 00:10:39,670 --> 00:10:42,280 في التعليمات البرمجية، C هي العقدة الحالية 251 00:10:42,280 --> 00:10:45,540 أن المؤشر اجتياز المجنزرة يتم الإشارة إلى، 252 00:10:45,540 --> 00:10:50,400 ويتم تمثيل D من العقدة المشار إليه بواسطة حقل العقدة الحالية القادم، 253 00:10:50,400 --> 00:10:52,600 أو المجنزرة → المقبل. 254 00:10:52,600 --> 00:10:55,460 لذلك، فإننا أولا تعيين المؤشر عقدة جديدة القادم 255 00:10:55,460 --> 00:10:57,370 للإشارة إلى المجنزرة → المقبل، 256 00:10:57,370 --> 00:11:00,880 بنفس الطريقة قلنا مؤشر new_node القادم ينبغي 257 00:11:00,880 --> 00:11:02,780 إشارة إلى D في الرسم التوضيحي. 258 00:11:02,780 --> 00:11:04,540 ثم، فإننا يمكن أن يحدد مؤشر العقدة الحالية القادم 259 00:11:04,540 --> 00:11:06,330 إلى عقدة الجديد، 260 00:11:06,330 --> 00:11:10,980 تماما كما كان علينا أن ننتظر للإشارة إلى C new_node في الرسم. 261 00:11:10,980 --> 00:11:12,250 الآن كل شيء على ما في النظام، ونحن لم نفقد لا 262 00:11:12,250 --> 00:11:14,490 تتبع أي من البيانات، وكنا قادرين على مجرد 263 00:11:14,490 --> 00:11:16,200 عصا عقدة الجديد في منتصف القائمة 264 00:11:16,200 --> 00:11:19,330 دون إعادة بناء كل شيء أو حتى تحويل أية عناصر 265 00:11:19,330 --> 00:11:22,490 الطريقة لكان علينا أن مع مجموعة ذات طول ثابت. 266 00:11:22,490 --> 00:11:26,020 >> لذلك، وقوائم مرتبطة هي الأساسية، ولكن المهم وبناء البيانات الديناميكية 267 00:11:26,020 --> 00:11:29,080 التي لديها مزايا وعيوب كل من 268 00:11:29,080 --> 00:11:31,260 مقارنة صفائف وغيرها من هياكل البيانات، 269 00:11:31,260 --> 00:11:33,350 وكما هو الحال غالبا في علوم الكمبيوتر، 270 00:11:33,350 --> 00:11:35,640 من المهم أن تعرف متى تستخدم كل أداة، 271 00:11:35,640 --> 00:11:37,960 بحيث يمكنك اختيار الأداة المناسبة للحصول على الوظيفة المناسبة. 272 00:11:37,960 --> 00:11:40,060 >> لمزيد من الممارسة، حاول كتابة وظائف ل 273 00:11:40,060 --> 00:11:42,080 حذف العقد من قائمة مرتبطة - 274 00:11:42,080 --> 00:11:44,050 تذكر أن تكون حذرا حول الترتيب الذي كنت إعادة ترتيب 275 00:11:44,050 --> 00:11:47,430 مؤشرات بك المقبل للتأكد من أنك لا تفقد جزءا من قائمة - 276 00:11:47,430 --> 00:11:50,200 أو وظيفة لحساب العقد في قائمة مرتبطة، 277 00:11:50,200 --> 00:11:53,280 أو متعة واحدة، لعكس ترتيب كافة العقد في قائمة مرتبطة. 278 00:11:53,280 --> 00:11:56,090 >> اسمي جاكسون Steinkamp، وهذا هو CS50.