1 00:00:00,000 --> 00:00:02,832 >> [موسیقی] 2 00:00:02,832 --> 00:00:05,670 3 00:00:05,670 --> 00:00:08,560 >> داگ لوید: خوب، پس در این نقطه در این دوره، 4 00:00:08,560 --> 00:00:15,300 ما بسیاری از اصول اولیه C. تحت پوشش ما می دانیم که بسیاری در مورد متغیرها، آرایه ها، 5 00:00:15,300 --> 00:00:17,610 اشاره گرها، که چیزهای خوب است. 6 00:00:17,610 --> 00:00:21,610 کسانی که همه نوع ساخته شده است به عنوان اصول را مشاهده کنید، 7 00:00:21,610 --> 00:00:23,880 اما ما می توانیم بیش از این انجام، درست است؟ 8 00:00:23,880 --> 00:00:27,930 ما می توانیم چیزهایی ترکیب با هم در راه جالب است. 9 00:00:27,930 --> 00:00:31,010 >> و بنابراین اجازه انجام آن، اجازه دهید شروع به شعبه از آنچه C به ما می دهد، 10 00:00:31,010 --> 00:00:35,270 و شروع به ایجاد اطلاعات خود ما ساختار با استفاده از این ساختمان 11 00:00:35,270 --> 00:00:40,590 بلوک های با هم برای انجام کاری واقعا با ارزش، مفید است. 12 00:00:40,590 --> 00:00:43,420 یکی از راه های انجام این کار ما می توانیم است به مجموعه صحبت کنید. 13 00:00:43,420 --> 00:00:48,360 بنابراین تا کنون ما یک نوع از داده ها داشته ام ساختار برای نمایش مجموعه 14 00:00:48,360 --> 00:00:51,030 از ارزش ها، ارزش های مشابه را دوست دارم. 15 00:00:51,030 --> 00:00:52,350 این امر می تواند یک آرایه. 16 00:00:52,350 --> 00:00:57,020 ما مجموعه ای از اعداد صحیح، و یا مجموعه ای از شخصیت و غیره. 17 00:00:57,020 --> 00:01:00,890 >> سازه نیز از داده های مرتب کردن بر اساس ساختار برای جمع آوری اطلاعات، 18 00:01:00,890 --> 00:01:03,220 اما آن را برای جمع آوری مانند ارزش است. 19 00:01:03,220 --> 00:01:08,090 این حالت معمولا مخلوط انواع داده های مختلف با هم داخل یک جعبه. 20 00:01:08,090 --> 00:01:10,750 اما این به خودی خود نمی با استفاده از زنجیره ای با هم 21 00:01:10,750 --> 00:01:16,920 و یا اتصال با هم مشابه اقلام، مانند یک آرایه. 22 00:01:16,920 --> 00:01:20,960 آرایه های بزرگ هستند عنصر نگاه کردن، اما به یاد 23 00:01:20,960 --> 00:01:24,262 که آن را بسیار دشوار برای وارد کردن به یک آرایه، 24 00:01:24,262 --> 00:01:26,470 مگر اینکه ما در حال قرار دادن در پایان بسیار از آن آرایه. 25 00:01:26,470 --> 00:01:29,730 >> بهترین مثال من برای که مرتب سازی درجی است. 26 00:01:29,730 --> 00:01:31,650 اگر شما به خاطر ویدئو ما در مرتب سازی بر درج، 27 00:01:31,650 --> 00:01:34,110 بود که بسیاری از وجود دارد هزینههای داشتن 28 00:01:34,110 --> 00:01:37,970 انتخاب کنید تا به عناصر، و تغییر آنها از راه به جا چیزی 29 00:01:37,970 --> 00:01:41,290 به وسط آرایه خود را. 30 00:01:41,290 --> 00:01:44,690 آرایه نیز از دیگر رنج می برند مشکل، که عدم انعطاف است. 31 00:01:44,690 --> 00:01:47,150 هنگامی که ما اعلام می کنیم یک آرایه، ما یک شات در آن است. 32 00:01:47,150 --> 00:01:49,790 ما را وادار به گفتن نیست، من می خواهم این بسیاری از عناصر. 33 00:01:49,790 --> 00:01:51,940 ممکن است 100، ممکن است شود 1،000، آن را ممکن است 34 00:01:51,940 --> 00:01:55,930 X که در آن X یک عدد است که کاربر باشد ما در یک اعلان یا در دستور داد 35 00:01:55,930 --> 00:01:56,630 خط. 36 00:01:56,630 --> 00:01:59,905 >> اما ما فقط یک شات در آن، ما نمی تواند به پس از آن می گویند آه، در واقع من 37 00:01:59,905 --> 00:02:04,360 مورد نیاز 101، و یا من نیاز به اضافه 20 X. 38 00:02:04,360 --> 00:02:07,910 خیلی دیر شده، ما در حال حاضر اعلام کرده ام آرایه، و اگر ما می خواهیم به 101 یا X 39 00:02:07,910 --> 00:02:12,050 به علاوه 20، ما باید به اعلام یک آرایه کاملا متفاوت است، 40 00:02:12,050 --> 00:02:15,540 کپی کردن تمام عناصر آرایه بیش از، و پس از آن ما به اندازه کافی. 41 00:02:15,540 --> 00:02:19,880 و اگر ما دوباره اشتباه هستند، چه اگر ما در واقع نیاز به 102، و یا X به علاوه 40، 42 00:02:19,880 --> 00:02:21,970 ما باید به انجام این کار دوباره. 43 00:02:21,970 --> 00:02:26,250 به طوری که آنها بسیار انعطاف ناپذیر هستند برای تغییر اندازه داده های ما، 44 00:02:26,250 --> 00:02:29,360 اما اگر ما با هم برخی از ترکیب از اصول اولیه است که ما در حال حاضر 45 00:02:29,360 --> 00:02:33,230 در مورد اشاره گر ها و سازه ها به دست، به طور خاص با استفاده از حافظه پویا 46 00:02:33,230 --> 00:02:36,180 تخصیص با malloc، ما می توانید این قطعه را با هم 47 00:02:36,180 --> 00:02:40,960 برای ایجاد یک داده جدید structure-- تنهایی لیست ما ممکن است می گویند مرتبط 48 00:02:40,960 --> 00:02:45,400 که اجازه می دهد تا ما را به رشد و کوچک مجموعه ای از ارزش ها 49 00:02:45,400 --> 00:02:48,800 و ما هر فضای هدر رفته را ندارد. 50 00:02:48,800 --> 00:02:53,320 >> پس دوباره، پاسخ این ایده، این مفهوم، یک لیست پیوندی. 51 00:02:53,320 --> 00:02:56,320 به ویژه، در این فیلم ما صحبت کردن در مورد لیست تنهایی مرتبط، 52 00:02:56,320 --> 00:02:59,185 و پس از آن یکی دیگر از فیلم ما صحبت لیست مورد مضاعف مرتبط است، که 53 00:02:59,185 --> 00:03:01,560 فقط یک تنوع در تم در اینجا است. 54 00:03:01,560 --> 00:03:05,200 اما یک لیست تنهایی مرتبط از گره تشکیل شده است، 55 00:03:05,200 --> 00:03:08,559 گره فقط به عنوان یک term-- انتزاعی این تنها چیزی است که من آنرا است 56 00:03:08,559 --> 00:03:10,350 که یک نوع از این ساختار، اساسا، من؟ 57 00:03:10,350 --> 00:03:16,190 فقط رفتن به آن را یک node-- و این گره دو عضو، و یا دو حوزه. 58 00:03:16,190 --> 00:03:20,300 از آن است که داده ها، معمولا عدد صحیح، یک شناور شخصیت، 59 00:03:20,300 --> 00:03:23,790 و یا می تواند برخی از نوع داده دیگر که شما با دف ​​نوع تعریف شده است. 60 00:03:23,790 --> 00:03:29,290 و آن را یک اشاره گر به گره دیگر از همان نوع. 61 00:03:29,290 --> 00:03:34,710 >> بنابراین ما باید دو چیز داخل این گره، داده ها و یک اشاره گر 62 00:03:34,710 --> 00:03:36,380 به گره دیگر است. 63 00:03:36,380 --> 00:03:39,370 و اگر شما شروع به تجسم این، شما می توانید در مورد آن فکر می کنم 64 00:03:39,370 --> 00:03:42,280 مثل یک زنجیره ای از گره های که به یکدیگر متصل هستند. 65 00:03:42,280 --> 00:03:45,070 ما گره اول، آن شامل داده ها، و یک اشاره گر 66 00:03:45,070 --> 00:03:49,110 به گره دوم، که شامل داده ها، و یک اشاره گر به گره سوم. 67 00:03:49,110 --> 00:03:52,940 و به طوری که به همین دلیل ما آن را به یک پاسخ لیست پیوندی، آنها با هم مرتبط است. 68 00:03:52,940 --> 00:03:56,070 >> چه می کند این ویژه ساختار گره نگاه می کنید؟ 69 00:03:56,070 --> 00:04:01,120 خوب، اگر شما از ویدیو های ما در یاد تعریف نوع سفارشی، با نوع دف، 70 00:04:01,120 --> 00:04:05,400 ما می توانیم یک تعریف و structure-- نوع تعریف یک ساختار شبیه به این. 71 00:04:05,400 --> 00:04:11,240 tyepdef sllist ساختار، و پس از آن من با استفاده از ارزش کلمه در اینجا خودسرانه 72 00:04:11,240 --> 00:04:13,891 برای نشان دادن هر نوع داده واقعا. 73 00:04:13,891 --> 00:04:16,890 شما می توانید در یک عدد صحیح و یا شناور عبور، شما می توانید هر آنچه که شما می خواهید. 74 00:04:16,890 --> 00:04:19,389 این فقط به محدود نمی اعداد صحیح، و یا هر چیزی شبیه به آن. 75 00:04:19,389 --> 00:04:22,790 بنابراین ارزش است فقط یک خودسرانه نوع داده، و سپس یک اشاره گر 76 00:04:22,790 --> 00:04:26,310 به گره دیگر از همان نوع. 77 00:04:26,310 --> 00:04:29,690 >> در حال حاضر، یک گرفتن کمی وجود دارد در اینجا با تعریف یک ساختار 78 00:04:29,690 --> 00:04:33,030 هنگامی که آن را به یک ساختار خویشتن است. 79 00:04:33,030 --> 00:04:35,340 من به طور موقت نام برای ساختار است. 80 00:04:35,340 --> 00:04:37,640 در پایان روز من به وضوح می خواهید به آن پاسخ 81 00:04:37,640 --> 00:04:43,030 گره SLL که در نهایت جدید نام بخشی از تعریف نوع من، 82 00:04:43,030 --> 00:04:47,450 اما من می تواند گره SLL استفاده نمی در وسط این. 83 00:04:47,450 --> 00:04:51,430 دلیل بودن من نه ایجاد یک نوع به نام گره SLL 84 00:04:51,430 --> 00:04:55,200 تا زمانی که من این مرحله نهایی رسید در اینجا. 85 00:04:55,200 --> 00:04:59,720 تا آن زمان، من به راه دیگری برای اشاره به این نوع داده ها. 86 00:04:59,720 --> 00:05:02,440 >> و این یک خود است نوع داده ارجاعی. 87 00:05:02,440 --> 00:05:06,314 این؛ این یک نوع داده یک ساختار که شامل یک داده ها، 88 00:05:06,314 --> 00:05:08,480 و یک اشاره گر به یکی دیگر از ساختار همان نوع است. 89 00:05:08,480 --> 00:05:11,750 بنابراین من باید قادر به مراجعه به این نوع داده حداقل به طور موقت، 90 00:05:11,750 --> 00:05:14,910 بنابراین به آن موقت از ساختار sllist نام 91 00:05:14,910 --> 00:05:18,540 من اجازه می دهد تا پس از آن می گویند من می خواهم یک اشاره گر به یکی دیگر از sllist ساختار، 92 00:05:18,540 --> 00:05:24,690 یک ستاره sllist ساختار، و پس از آن پس از تعریف کامل شده است، 93 00:05:24,690 --> 00:05:27,220 من هم اکنون می توانید این نوع گره SLL پاسخ. 94 00:05:27,220 --> 00:05:30,520 >> به همین دلیل شما می بینید وجود دارد نام موقت در اینجا، 95 00:05:30,520 --> 00:05:31,879 اما یک نام دائمی است. 96 00:05:31,879 --> 00:05:33,920 گاهی اوقات شما ممکن است ببینید تعاریف ساختار، 97 00:05:33,920 --> 00:05:36,570 به عنوان مثال، که نمی خویشتن، که 98 00:05:36,570 --> 00:05:39,390 یک نام تعیین اینجا وجود ندارد. 99 00:05:39,390 --> 00:05:43,040 این فقط می گویند ساختار از typedef، باز کردن آکولاد و سپس آن را تعریف کنیم. 100 00:05:43,040 --> 00:05:45,620 اما اگر شما ساختار خود است ارجاع، به عنوان این یکی است، 101 00:05:45,620 --> 00:05:49,010 شما نیاز به مشخص کردن یک نام نوع موقت است. 102 00:05:49,010 --> 00:05:51,310 اما در نهایت، در حال حاضر که ما انجام داده ایم این 103 00:05:51,310 --> 00:05:53,620 ما فقط می توانید برای اشاره این گره، این واحد، 104 00:05:53,620 --> 00:05:57,900 به عنوان گره SLL برای اهداف از بقیه از این فیلم. 105 00:05:57,900 --> 00:06:00,900 >> همه حق است، بنابراین ما می دانیم که چگونه به ایجاد یک لیست گره مرتبط است. 106 00:06:00,900 --> 00:06:03,240 ما می دانیم که چگونه به تعریف یک گره لیست پیوندی. 107 00:06:03,240 --> 00:06:06,670 حال اگر قصد داریم به شروع با استفاده از آنها برای جمع آوری اطلاعات، 108 00:06:06,670 --> 00:06:10,360 یک زن و شوهر از انجام عملیات وجود دارد و ما نیاز به درک و کار با. 109 00:06:10,360 --> 00:06:12,860 ما نیاز به دانستن چگونه برای ایجاد یک لیست پیوندی از هوا نازک. 110 00:06:12,860 --> 00:06:14,901 اگر هیچ لیست وجود دارد در حال حاضر، ما می خواهیم برای شروع یک. 111 00:06:14,901 --> 00:06:16,960 بنابراین ما باید قادر برای ایجاد یک لیست پیوندی، 112 00:06:16,960 --> 00:06:19,130 ما نیاز به جستجو احتمالا از طریق لیست لینک 113 00:06:19,130 --> 00:06:21,830 برای پیدا کردن یک عنصر ما دنبال آن هستید. 114 00:06:21,830 --> 00:06:24,430 ما باید قادر به قرار دادن چیزهای جدید را به لیست، 115 00:06:24,430 --> 00:06:25,930 ما می خواهیم لیست ما قادر به رشد می کنند. 116 00:06:25,930 --> 00:06:28,638 و همین ترتیب، ما می خواهم که قادر را حذف کنید همه چیز از لیست ما، 117 00:06:28,638 --> 00:06:30,250 ما می خواهیم لیست ما قادر به کوچک شدن. 118 00:06:30,250 --> 00:06:32,160 و در پایان ما برنامه، به ویژه 119 00:06:32,160 --> 00:06:34,550 اگر شما به خاطر است که ما تخصیص حافظه به صورت پویا 120 00:06:34,550 --> 00:06:38,337 برای ساخت این لیست طور معمول، ما می خواهیم برای آزاد کردن همه که حافظه 121 00:06:38,337 --> 00:06:39,670 هنگامی که ما در حال کار با آن انجام می شود. 122 00:06:39,670 --> 00:06:44,627 و بنابراین ما باید قادر به حذف کل لیست پیوندی در از بین بردن یک شکست است. 123 00:06:44,627 --> 00:06:46,460 بنابراین اجازه دهید از طریق رفتن برخی از این عملیات 124 00:06:46,460 --> 00:06:51,192 و چگونه ممکن است آنها را تجسم، صحبت کردن در کد شبه به طور خاص. 125 00:06:51,192 --> 00:06:53,150 بنابراین ما می خواهیم برای ایجاد یک لیست پیوندی، تا شاید ما 126 00:06:53,150 --> 00:06:56,480 می خواهیم به تعریف یک تابع با این نمونه است. 127 00:06:56,480 --> 00:07:01,690 SLL ستاره گره، ایجاد، و من عبور در یک آرگومان، برخی از داده های دلخواه 128 00:07:01,690 --> 00:07:05,530 تایپ دوباره، از برخی از انواع داده های دلخواه. 129 00:07:05,530 --> 00:07:10,482 اما من returning-- این تابع باید بازگشت به من یک اشاره گر، به تنهایی 130 00:07:10,482 --> 00:07:11,190 گره لیست پیوندی. 131 00:07:11,190 --> 00:07:14,050 باز هم، ما در حال تلاش برای ایجاد یک لیست پیوندی از هوا نازک، 132 00:07:14,050 --> 00:07:17,900 بنابراین من نیاز به یک اشاره گر به این فهرست که من انجام می شود. 133 00:07:17,900 --> 00:07:19,420 >> پس چه مراحل اینجا هستید؟ 134 00:07:19,420 --> 00:07:20,960 خب، اولین چیزی که من برای انجام شده است به صورت پویا 135 00:07:20,960 --> 00:07:22,550 اختصاص فضا برای یک گره جدید. 136 00:07:22,550 --> 00:07:26,689 باز هم، ما در حال ایجاد آن را از نازک هوا، بنابراین ما به فضای از malloc برای آن نیاز دارید. 137 00:07:26,689 --> 00:07:28,480 و البته، بلافاصله پس از malloc ما، 138 00:07:28,480 --> 00:07:31,692 ما همیشه بررسی کنید تا مطمئن شوید که ما اشاره گر ما می کنید تماس تهی. 139 00:07:31,692 --> 00:07:33,650 چرا که اگر ما را امتحان کنید و احترام یک اشاره گر NULL، 140 00:07:33,650 --> 00:07:36,190 ما در حال رفتن به رنج می برند segfault و ما این را نمی خواهیم. 141 00:07:36,190 --> 00:07:39,510 >> پس ما می خواهیم برای پر کردن در این زمینه، ما می خواهیم به مقداردهی اولیه درست ارزش 142 00:07:39,510 --> 00:07:41,690 و مقداردهی اولیه رشته بعدی. 143 00:07:41,690 --> 00:07:45,450 و سپس ما to-- در نهایت به عنوان می خواهم نمونه indicates-- عملکرد ما می خواهیم 144 00:07:45,450 --> 00:07:49,940 برای بازگشت به یک اشاره گر به یک گره SLL. 145 00:07:49,940 --> 00:07:51,710 پس چه این مثل بصری نگاه می کنید؟ 146 00:07:51,710 --> 00:07:55,230 خب، اول ما قصد داریم به صورت پویا اختصاص فضا برای یک گره SLL جدید، 147 00:07:55,230 --> 00:07:58,320 بنابراین ما malloc-- که نمایش تصویری 148 00:07:58,320 --> 00:08:00,020 از گره ما فقط ایجاد شده است. 149 00:08:00,020 --> 00:08:02,757 و ما را بررسی کنید تا مطمئن شوید که آن را در این مورد null-- نیست، 150 00:08:02,757 --> 00:08:04,840 تصویر نمی خواهد که نشان داده شده است تا اگر آن را تهی بود، 151 00:08:04,840 --> 00:08:07,298 ما را از حافظه اجرا، بنابراین ما خوب به آن بروید وجود دارد. 152 00:08:07,298 --> 00:08:10,200 بنابراین در حال حاضر ما در حال به مرحله C، مقداردهی اولیه مقدار فیلد گره. 153 00:08:10,200 --> 00:08:12,280 خب، بر اساس این تابع پاسخ من با استفاده از در اینجا، 154 00:08:12,280 --> 00:08:16,700 به نظر می رسد مانند من می خواهم به تصویب در 6، بنابراین من 6 در زمینه ارزش. 155 00:08:16,700 --> 00:08:18,865 در حال حاضر، مقداردهی اولیه رشته بعدی. 156 00:08:18,865 --> 00:08:21,640 خب، چه هستم من برای انجام وجود دارد، هیچ چیز وجود دارد بعدی، راست، 157 00:08:21,640 --> 00:08:23,600 این تنها چیزی است که در این لیست است. 158 00:08:23,600 --> 00:08:27,206 پس چه چیزی که بعد از در لیست نیست. 159 00:08:27,206 --> 00:08:29,660 >> آن را باید به هر چیزی نقطه نیست، راست. 160 00:08:29,660 --> 00:08:33,600 هیچ چیز وجود دارد دیگری وجود دارد، پس چه شده است مفهوم ما که می دانیم این nothing-- 161 00:08:33,600 --> 00:08:35,638 اشاره گر به هیچ چیز؟ 162 00:08:35,638 --> 00:08:37,929 باید آن را شاید ما می خواهیم برای قرار دادن یک اشاره گر تهی وجود دارد، 163 00:08:37,929 --> 00:08:40,178 و من تهی نشان اشاره گر به عنوان فقط یک جعبه قرمز، 164 00:08:40,178 --> 00:08:41,559 ما نمی توانیم به هر بیشتر. 165 00:08:41,559 --> 00:08:44,430 همانطور که خواهیم کمی بعد در دید، ما در نهایت زنجیره 166 00:08:44,430 --> 00:08:46,330 از فلش اتصال این گره با هم، 167 00:08:46,330 --> 00:08:48,480 اما زمانی که شما ضربه جعبه قرمز که تهی، 168 00:08:48,480 --> 00:08:51,150 ما نمی توانیم به هر بیشتر، که پایان این فهرست است. 169 00:08:51,150 --> 00:08:53,960 >> و در نهایت، ما فقط می خواهم بازگشت به یک اشاره گر به این گره. 170 00:08:53,960 --> 00:08:56,160 بنابراین ما آن جدید پاسخ، و جدید باز خواهد گشت 171 00:08:56,160 --> 00:08:59,370 پس از آن می توان در استفاده هر تابع آن ایجاد شده است. 172 00:08:59,370 --> 00:09:03,100 بنابراین ما بروید، ما به تنهایی ایجاد کرده اید مرتبط گره لیست از هوا نازک، 173 00:09:03,100 --> 00:09:05,920 و در حال حاضر ما یک لیست ما می توانیم با کار. 174 00:09:05,920 --> 00:09:08,260 >> در حال حاضر، اجازه دهید ما می گویند در حال حاضر یک زنجیره ای بزرگ، 175 00:09:08,260 --> 00:09:09,800 و ما می خواهیم برای پیدا کردن چیزی در آن است. 176 00:09:09,800 --> 00:09:12,716 و ما می خواهیم یک تابع که رفتن برای بازگشت به درست یا غلط، بسته 177 00:09:12,716 --> 00:09:15,840 در مورد اینکه آیا یک مقدار در این لیست وجود دارد. 178 00:09:15,840 --> 00:09:18,160 یک نمونه تابع، یا بیانیه برای آن تابع، 179 00:09:18,160 --> 00:09:23,320 ممکن است شبیه this-- بولی پیدا کنید، و پس ما می خواهیم به تصویب در دو آرگومان. 180 00:09:23,320 --> 00:09:26,996 >> اول، یک اشاره گر به است اولین عنصر از لیست پیوندی. 181 00:09:26,996 --> 00:09:29,620 این است که در واقع چیزی است که شما همیشه خواهید برای پیگیری از، 182 00:09:29,620 --> 00:09:33,110 و در واقع ممکن است چیزی که شما حتی در یک متغیر جهانی قرار داده است. 183 00:09:33,110 --> 00:09:35,360 هنگامی که یک لیست ایجاد می کنید، شما همیشه، همیشه 184 00:09:35,360 --> 00:09:38,990 می خواهید برای پیگیری از بسیار اولین عنصر از لیست. 185 00:09:38,990 --> 00:09:43,690 به این ترتیب شما می توانید به تمام دیگر مراجعه کنید عناصر تنها با زیر زنجیره ای، 186 00:09:43,690 --> 00:09:47,300 بدون نیاز به نگه داشتن اشاره گر دست نخورده به هر عنصر. 187 00:09:47,300 --> 00:09:50,920 شما فقط نیاز به پیگیری از اولین یک اگر همه آنها با هم زنجیر. 188 00:09:50,920 --> 00:09:52,460 >> و پس از آن دومین چیزی ما در حال عبور دوباره 189 00:09:52,460 --> 00:09:54,376 است خودسرانه some-- هر نوع اطلاعاتی که ما 190 00:09:54,376 --> 00:09:59,640 به دنبال وجود دارد در داخل امیدوارم یکی از گره ها در لیست. 191 00:09:59,640 --> 00:10:00,980 پس چه مراحل است؟ 192 00:10:00,980 --> 00:10:04,250 خب، اولین چیزی که ما انجام است یک اشاره گر عرضی 193 00:10:04,250 --> 00:10:06,015 اشاره به سر لیست. 194 00:10:06,015 --> 00:10:08,890 خب، چرا ما انجام این کار، ما در حال حاضر یک اشاره گر در سر لیست ها، 195 00:10:08,890 --> 00:10:10,974 چرا ما فقط حرکت که در اطراف؟ 196 00:10:10,974 --> 00:10:13,140 خب، مثل من فقط گفت: این واقعا برای ما مهم 197 00:10:13,140 --> 00:10:17,580 برای همیشه آهنگ از حفظ عنصر بسیار برای اولین بار در این فهرست است. 198 00:10:17,580 --> 00:10:21,270 و پس از آن در واقع بهتر برای ایجاد یک کپی از آن، 199 00:10:21,270 --> 00:10:25,350 و استفاده از آن به حرکت در اطراف بنابراین ما هرگز به طور تصادفی حرکت به دور، و یا ما همیشه 200 00:10:25,350 --> 00:10:30,430 یک اشاره گر در برخی از نقطه است که در سمت راست عنصر اول لیست. 201 00:10:30,430 --> 00:10:33,290 بنابراین بهتر است برای ایجاد یک دوم که استفاده می کنیم به حرکت. 202 00:10:33,290 --> 00:10:35,877 >> سپس ما فقط اینکه آیا مقایسه زمینه ارزش که در آن گره 203 00:10:35,877 --> 00:10:38,960 چیزی است که ما به دنبال آن هستید، و اگر آن را نیست، ما فقط به گره بعدی حرکت می کند. 204 00:10:38,960 --> 00:10:41,040 و ما را انجام می دهند که بیش از، و بیش از، و بیش از، 205 00:10:41,040 --> 00:10:44,811 تا زمانی که ما هم پیدا این عنصر، یا ما ضربه 206 00:10:44,811 --> 00:10:47,310 null-- ما به پایان رسیده ام از لیست و آن وجود ندارد. 207 00:10:47,310 --> 00:10:50,540 این باید امیدوارم حلقه زنگ به شما به عنوان تنها جستجوی خطی، 208 00:10:50,540 --> 00:10:54,430 ما فقط آن را تکرار در ساختار لیست تنهایی مرتبط 209 00:10:54,430 --> 00:10:56,280 به جای استفاده از یک آرایه به انجام آن. 210 00:10:56,280 --> 00:10:58,210 >> بنابراین در اینجا یک مثال از یک لیست تنهایی مرتبط. 211 00:10:58,210 --> 00:11:00,043 این یکی شامل پنج گره، و ما باید 212 00:11:00,043 --> 00:11:04,330 یک اشاره گر به سر از لیست، که لیست نامیده می شود. 213 00:11:04,330 --> 00:11:07,385 اولین چیزی که ما می خواهیم انجام دهیم این است دوباره، ایجاد می کند که اشاره گر پیمایش. 214 00:11:07,385 --> 00:11:09,760 بنابراین ما در حال حاضر دو اشاره گر آن نقطه به همان چیزی است. 215 00:11:09,760 --> 00:11:15,025 >> در حال حاضر، در اینجا متوجه همچنین، من نیست دارند به malloc هر فضا برای TRAV. 216 00:11:15,025 --> 00:11:18,970 من نگفتم TRAV برابر از malloc چیزی، که گره حال حاضر وجود دارد، 217 00:11:18,970 --> 00:11:21,160 که فضا در حافظه وجود دارد. 218 00:11:21,160 --> 00:11:24,290 به طوری که تمام من در واقع انجام است ایجاد اشاره گر دیگری به آن. 219 00:11:24,290 --> 00:11:28,210 من نمی mallocing اضافی فضا، فقط در حال حاضر دو اشاره گر 220 00:11:28,210 --> 00:11:31,370 اشاره به همین است. 221 00:11:31,370 --> 00:11:33,710 >> بنابراین 2 چه من به دنبال؟ 222 00:11:33,710 --> 00:11:37,220 خب، نه، بنابراین به جای من رفتن به حرکت به بعدی. 223 00:11:37,220 --> 00:11:41,740 بنابراین اساسا من می گفت، TRAV برابر TRAV بعدی. 224 00:11:41,740 --> 00:11:43,630 3 چه من به دنبال، نه. 225 00:11:43,630 --> 00:11:45,780 بنابراین من همچنان به از طریق، تا در نهایت 226 00:11:45,780 --> 00:11:48,690 به 6 است که در آنچه من به دنبال برای در فراخوانی تابع بر اساس 227 00:11:48,690 --> 00:11:51,600 من از بالا به وجود دارد، و بنابراین من انجام می شود. 228 00:11:51,600 --> 00:11:54,150 >> حالا اگر عنصر من به دنبال آن در لیست نیست، 229 00:11:54,150 --> 00:11:55,510 آیا هنوز هم برای رفتن به کار می کند؟ 230 00:11:55,510 --> 00:11:57,120 خوب، توجه داشته باشید که فهرست در اینجا این است ماهرانه مختلف، 231 00:11:57,120 --> 00:11:59,410 و این یک چیز دیگر است که با لیست های پیوندی مهم است، 232 00:11:59,410 --> 00:12:01,780 شما لازم نیست که برای حفظ آنها را در هر منظور خاص است. 233 00:12:01,780 --> 00:12:05,390 شما هم می توانید اگر شما می خواهید، اما شما ممکن است در حال حاضر متوجه 234 00:12:05,390 --> 00:12:09,310 که ما در حال پیگیری از نگه داشتن نیست چه عنصر شماره ما را در. 235 00:12:09,310 --> 00:12:13,150 >> و آن نوع از یک تجارت است که ما با لیست پیوندی آیات آرایه را داشته باشد، 236 00:12:13,150 --> 00:12:15,300 است آن را ما لازم نیست دسترسی تصادفی نیست. 237 00:12:15,300 --> 00:12:18,150 ما نه تنها می توان گفت، من می خواهم برای رفتن به عنصر 0، 238 00:12:18,150 --> 00:12:21,410 و یا عنصر از آرایه 6 من، که من می توانم در یک آرایه انجام دهید. 239 00:12:21,410 --> 00:12:25,080 من نمی توانم بگویم من می خواهم برای رفتن به عنصر 0، و یا عنصر 6، 240 00:12:25,080 --> 00:12:30,360 و یا عنصر 25 از لیست پیوندی من، هیچ شاخص مرتبط با آنها وجود دارد. 241 00:12:30,360 --> 00:12:33,660 و پس از آن واقعا مهم نیست اگر ما لیست ما به منظور حفظ کند. 242 00:12:33,660 --> 00:12:36,080 اگر شما به شما می خواهید قطعا می توانید، اما وجود دارد 243 00:12:36,080 --> 00:12:38,567 هیچ دلیلی وجود ندارد که آنها نیاز به تواند در هر جهت حفظ شده است. 244 00:12:38,567 --> 00:12:40,400 پس دوباره، بیایید امتحان کنید و پیدا کردن 6 در این لیست است. 245 00:12:40,400 --> 00:12:43,200 خب، ما در شروع آغاز، ما را پیدا کند 6، 246 00:12:43,200 --> 00:12:47,690 و پس از آن ما همچنان به پیدا کردن نیست 6، تا زمانی که ما در نهایت به اینجا دریافت کنید. 247 00:12:47,690 --> 00:12:52,790 بنابراین در حال حاضر TRAV نقطه به گره حاوی 8، و شش است در وجود ندارد. 248 00:12:52,790 --> 00:12:55,250 >> بنابراین گام بعدی خواهد بود برای رفتن به اشاره گر، 249 00:12:55,250 --> 00:12:57,440 می گویند TRAV برابر TRAV بعدی. 250 00:12:57,440 --> 00:13:00,750 خب، TRAV بعدی، نشان داده شده جعبه قرمز وجود دارد، تهی است. 251 00:13:00,750 --> 00:13:03,020 بنابراین در هیچ جای دیگری وجود دارد به رفتن، و بنابراین در این مرحله 252 00:13:03,020 --> 00:13:06,120 می توان نتیجه گرفت که ما رسیدهاید در پایان از لیست پیوندی، 253 00:13:06,120 --> 00:13:07,190 و 6 است در وجود ندارد. 254 00:13:07,190 --> 00:13:10,980 و این امر می تواند بازگشت نادرست در این مورد. 255 00:13:10,980 --> 00:13:14,540 >> OK، ما چگونه قرار دادن جدید گره به لیست پیوندی؟ 256 00:13:14,540 --> 00:13:17,310 بنابراین ما قادر به ایجاد شده یک لیست پیوندی از هیچ جا، 257 00:13:17,310 --> 00:13:19,370 اما ما احتمالا می خواهید ایجاد یک زنجیره ای و نه 258 00:13:19,370 --> 00:13:22,620 ایجاد یک دسته از لیست مجزا می باشد. 259 00:13:22,620 --> 00:13:25,700 ما می خواهیم به یک لیست که دارای یک دسته از گره ها در آن، 260 00:13:25,700 --> 00:13:28,040 نه یک دسته از لیست با یک گره. 261 00:13:28,040 --> 00:13:31,260 بنابراین ما فقط نمی تواند با استفاده از درست عملکرد ما قبلا تعریف شده است، در حال حاضر ما 262 00:13:31,260 --> 00:13:33,860 می خواهید برای وارد به یک لیست که در حال حاضر وجود دارد. 263 00:13:33,860 --> 00:13:36,499 >> پس در این صورت، ما قصد داریم به تصویب در دو آرگومان، 264 00:13:36,499 --> 00:13:39,290 اشاره گر به سر که لیست که ما می خواهیم برای اضافه کردن به مرتبط است. 265 00:13:39,290 --> 00:13:40,910 باز هم، به همین دلیل آن را بسیار مهم است که ما همیشه 266 00:13:40,910 --> 00:13:43,400 پیگیری آن، به دلیل آن را تنها راه ما واقعا 267 00:13:43,400 --> 00:13:46,690 مجبور به مراجعه به کل لیست است فقط با یک اشاره گر به اولین عنصر. 268 00:13:46,690 --> 00:13:49,360 بنابراین ما می خواهیم به تصویب در یک اشاره گر به آن عنصر اول، 269 00:13:49,360 --> 00:13:52,226 و هر چه ارزش ما خواهید برای اضافه کردن به لیست. 270 00:13:52,226 --> 00:13:54,600 و در نهایت این تابع رفتن به بازگشت یک اشاره گر 271 00:13:54,600 --> 00:13:57,980 به رئیس جدید یک لیست پیوندی. 272 00:13:57,980 --> 00:13:59,700 >> مراحل در اینجا چیست؟ 273 00:13:59,700 --> 00:14:02,249 خب، درست مانند با ایجاد، ما نیاز به صورت پویا تخصیص 274 00:14:02,249 --> 00:14:05,540 فضا برای یک گره جدید، و بررسی کنید تا مطمئن ما را در اجرا از حافظه نیست، دوباره، 275 00:14:05,540 --> 00:14:07,150 چرا که ما با استفاده از malloc. 276 00:14:07,150 --> 00:14:09,080 پس از آن ما می خواهیم به جمعیت و قرار دادن گره، 277 00:14:09,080 --> 00:14:12,730 بنابراین قرار دادن شماره، هر آنچه که وال است، به گره. 278 00:14:12,730 --> 00:14:17,310 ما می خواهیم به قرار دادن گره در آغاز لیست پیوندی. 279 00:14:17,310 --> 00:14:19,619 >> یک دلیل وجود دارد که من می خواهید برای انجام این کار، و آن 280 00:14:19,619 --> 00:14:21,910 ممکن است ارزش گرفتن یک دوم به مکث ویدیو اینجا، 281 00:14:21,910 --> 00:14:25,860 و فکر می کنم در مورد اینکه چرا من می خواهم قرار دادن در آغاز از یک مرتبط 282 00:14:25,860 --> 00:14:26,589 لیست. 283 00:14:26,589 --> 00:14:28,630 باز هم، من که قبلا ذکر شد که آن را واقعا نمی 284 00:14:28,630 --> 00:14:33,020 مهم نیست اگر ما آن را در هر حفظ سفارش، شاید که یک سرنخ است. 285 00:14:33,020 --> 00:14:36,040 و شما را دیدم اگر ما چه اتفاقی می افتد می خواستم to-- و یا از یک ثانیه 286 00:14:36,040 --> 00:14:37,360 پیش زمانی که ما قرار بود از طریق جستجو شما 287 00:14:37,360 --> 00:14:39,235 می تواند آنچه را ببینید ممکن است اگر ما در تلاش بودند 288 00:14:39,235 --> 00:14:41,330 برای وارد کردن در پایان این فهرست است. 289 00:14:41,330 --> 00:14:44,750 از آنجا که ما یک ندارد اشاره گر به انتهای لیست. 290 00:14:44,750 --> 00:14:47,490 >> بنابراین به این دلیل است که من می خواهم برای وارد کردن در آغاز، 291 00:14:47,490 --> 00:14:49,380 است چرا که من آن را بلافاصله انجام می. 292 00:14:49,380 --> 00:14:52,730 من یک اشاره گر در آغاز، و ما این را در یک بصری در یک ثانیه را ببینید. 293 00:14:52,730 --> 00:14:55,605 اما اگر من می خواهم برای قرار دادن در پایان، من برای شروع در آغاز، 294 00:14:55,605 --> 00:14:58,760 گذشتن از تمام راه را به پایان، و سپس آن را رویه در. 295 00:14:58,760 --> 00:15:01,420 به طوری که بدان معنی است که قرار دادن در انتهای لیست 296 00:15:01,420 --> 00:15:04,140 تبدیل شدن به یک دوست O از N عملیات، رفتن به عقب 297 00:15:04,140 --> 00:15:06,720 به بحث ما پیچیدگی محاسباتی. 298 00:15:06,720 --> 00:15:10,140 آن را می خواهم تبدیل شدن به یک درجه از عملیات N، که در آن به عنوان لیست بزرگتر و بزرگتر، 299 00:15:10,140 --> 00:15:13,310 و بزرگتر، آن را تر و سخت تر به رویه چیزی 300 00:15:13,310 --> 00:15:14,661 در در پایان. 301 00:15:14,661 --> 00:15:17,410 اما همیشه واقعا آسان برای رویه چیزی در در آغاز، 302 00:15:17,410 --> 00:15:19,060 شما همیشه در ابتدای راه هستیم. 303 00:15:19,060 --> 00:15:21,620 >> و ما یک بصری از این دوباره ببینید. 304 00:15:21,620 --> 00:15:24,100 و سپس یک بار ما در حال انجام، یک بار ما در گره جدید قرار داده ام، 305 00:15:24,100 --> 00:15:26,880 ما می خواهیم به بازگشت به اشاره گر ما رئیس جدید یک لیست پیوندی، که 306 00:15:26,880 --> 00:15:29,213 از آنجایی که ما در حال قرار دادن در آغاز، در واقع می خواهد 307 00:15:29,213 --> 00:15:31,060 یک اشاره گر به گره ما فقط ایجاد شده است. 308 00:15:31,060 --> 00:15:33,280 بیایید این تجسم، چون فکر می کنم به شما کمک کند. 309 00:15:33,280 --> 00:15:36,661 >> بنابراین در اینجا لیست ما است، آن را از شامل چهار عامل، گره شامل 15، 310 00:15:36,661 --> 00:15:38,410 که اشاره به یک گره حاوی 9، که 311 00:15:38,410 --> 00:15:41,370 اشاره به یک گره شامل 13، که اشاره به یک گره حاوی 312 00:15:41,370 --> 00:15:44,840 10، که دارای تهی اشاره گر به عنوان اشاره گر خود را 313 00:15:44,840 --> 00:15:47,010 به طوری که در پایان این فهرست است. 314 00:15:47,010 --> 00:15:50,200 بنابراین ما می خواهیم به قرار دادن یک گره جدید با ارزش 12 315 00:15:50,200 --> 00:15:52,720 در آغاز این لیست، چه کار کنیم؟ 316 00:15:52,720 --> 00:15:58,770 خب، اول ما از malloc فضا برای گره، و سپس ما در 12 وجود دارد قرار داده است. 317 00:15:58,770 --> 00:16:02,211 >> بنابراین در حال حاضر ما به آن رسیده ام نقطه تصمیم گیری، درست است؟ 318 00:16:02,211 --> 00:16:03,960 ما یک زن و شوهر از اشاره گر که ما می توانیم 319 00:16:03,960 --> 00:16:06,770 حرکت می کند، که یکی باید اول ما حرکت می کند؟ 320 00:16:06,770 --> 00:16:09,250 باید ما را به نقطه 12 رئیس جدید از list-- 321 00:16:09,250 --> 00:16:13,020 و یا ببخشید، باید ما را 12 اشاره به سر قدیمی از لیست؟ 322 00:16:13,020 --> 00:16:15,319 یا باید ما می گویند که لیست در حال حاضر در 12 آغاز می شود. 323 00:16:15,319 --> 00:16:17,110 یک تمایز وجود دارد وجود دارد، و ما نگاه 324 00:16:17,110 --> 00:16:19,870 در چه با هر دو را در یک ثانیه اتفاق می افتد. 325 00:16:19,870 --> 00:16:23,350 >> اما این منجر به موضوع بزرگ برای نوار کناری، 326 00:16:23,350 --> 00:16:26,280 که این است که یکی از مهم ترین چیز با لیست های پیوندی 327 00:16:26,280 --> 00:16:30,980 شده است به ترتیب اشاره گر در جهت درست. 328 00:16:30,980 --> 00:16:34,520 اگر شما حرکت می کند همه چیز از سفارش، شما می توانید تا پایان به طور تصادفی 329 00:16:34,520 --> 00:16:36,050 یتیم بقیه از لیست. 330 00:16:36,050 --> 00:16:37,300 و در اینجا یک مثال از آن است. 331 00:16:37,300 --> 00:16:40,540 بنابراین اجازه دهید با این ایده به of-- خب، ما فقط 12 ایجاد کرده اید. 332 00:16:40,540 --> 00:16:43,180 ما می دانیم که 12 است برای رفتن به رئیس جدید لیست، 333 00:16:43,180 --> 00:16:47,660 و چرا ما نه تنها حرکت لیست اشاره گر به اشاره می کنند. 334 00:16:47,660 --> 00:16:49,070 >> خوب، پس این خوب است. 335 00:16:49,070 --> 00:16:51,560 بنابراین در حال حاضر که در آن می کند 12 نقطه بعدی؟ 336 00:16:51,560 --> 00:16:54,580 منظور من، بصری ما می توانید ببینید که آن را به 15 نقطه، 337 00:16:54,580 --> 00:16:57,250 به عنوان انسان آن را واقعا به ما آشکار است. 338 00:16:57,250 --> 00:17:00,300 چگونه کامپیوتر دانید؟ 339 00:17:00,300 --> 00:17:02,720 ما هیچ چیز را ندارد با اشاره به 15 دیگر، درست است؟ 340 00:17:02,720 --> 00:17:05,869 >> ما هر گونه توانایی برای اشاره به 15 از دست داده ام. 341 00:17:05,869 --> 00:17:11,460 ما می توانیم بگوییم تیر جدید برابر بعدی چیزی، هیچ چیز وجود دارد. 342 00:17:11,460 --> 00:17:13,510 در واقع، ما را یتیم بقیه لیست 343 00:17:13,510 --> 00:17:16,465 با انجام این کار، ما به طور تصادفی شکسته زنجیره ای. 344 00:17:16,465 --> 00:17:18,089 و ما قطعا نمی خواهید به انجام این کار. 345 00:17:18,089 --> 00:17:20,000 >> بنابراین اجازه دهید بروید و سعی کنید دوباره. 346 00:17:20,000 --> 00:17:24,060 شاید چیزی که حق انجام است به مجموعه ای اشاره گر 12 347 00:17:24,060 --> 00:17:28,290 به سر های قدیمی از لیست اول، پس از آن ما می توانید لیستی بیش از حرکت می کند. 348 00:17:28,290 --> 00:17:30,420 و در واقع، این است که جهت درست است که ما 349 00:17:30,420 --> 00:17:32,836 باید به دنبال زمانی که ما کار با لیست تنهایی مرتبط. 350 00:17:32,836 --> 00:17:36,460 ما همیشه می خواهیم برای اتصال عنصر جدید به لیست، 351 00:17:36,460 --> 00:17:41,010 قبل از اینکه ما این نوع از گام مهم تغییر 352 00:17:41,010 --> 00:17:43,360 که در آن سر از لیست پیوندی است. 353 00:17:43,360 --> 00:17:46,740 باز هم، که چنین چیزی اساسی است، ما نمی خواهیم از دست دادن آهنگ از آن است. 354 00:17:46,740 --> 00:17:49,310 >> بنابراین ما می خواهیم مطمئن شوید که همه چیز با هم زنجیر، 355 00:17:49,310 --> 00:17:52,040 قبل از ما حرکت که اشاره گر. 356 00:17:52,040 --> 00:17:55,300 و به این ترتیب این امر می تواند در جهت درست، است که برای اتصال 12 به لیست، 357 00:17:55,300 --> 00:17:57,630 پس از آن می گویند که شروع می شود یک لیست 12. 358 00:17:57,630 --> 00:18:00,860 اگر ما گفت: لیست شروع می شود در 12 و سپس سعی در اتصال 12 به لیست، 359 00:18:00,860 --> 00:18:02,193 ما در حال حاضر دیده می شود چه اتفاقی می افتد. 360 00:18:02,193 --> 00:18:04,920 ما به اشتباه از دست دادن لیست. 361 00:18:04,920 --> 00:18:06,740 >> خوب، پس یک چیز بیشتر به بحث در مورد. 362 00:18:06,740 --> 00:18:09,750 اگر ما می خواهیم به خلاص شدن از شر کل لیست پیوندی در یک بار؟ 363 00:18:09,750 --> 00:18:11,750 باز هم، ما mallocing تمام این فضا، و بنابراین ما 364 00:18:11,750 --> 00:18:13,351 نیاز به آن را آزاد زمانی که ما انجام می شود. 365 00:18:13,351 --> 00:18:15,350 بنابراین در حال حاضر ما می خواهیم به حذف کل لیست پیوندی. 366 00:18:15,350 --> 00:18:16,850 خب، چه چیزی ما می خواهیم کاری انجام دهید؟ 367 00:18:16,850 --> 00:18:20,460 >> اگر ما اشاره گر تهی رسیدهاید، ما می خواهید برای جلوگیری، در غیر این صورت، فقط حذف 368 00:18:20,460 --> 00:18:23,420 بقیه لیست و سپس به من آزاد. 369 00:18:23,420 --> 00:18:28,890 حذف و از بقیه از لیست، و سپس آزاد گره فعلی. 370 00:18:28,890 --> 00:18:32,850 چه که صدا مانند، چه تکنیک ما صحبت کردیم 371 00:18:32,850 --> 00:18:35,440 در مورد قبلا که صدا مانند؟ 372 00:18:35,440 --> 00:18:39,560 حذف هر کس دیگری، پس از آن دوباره و من را حذف کنید. 373 00:18:39,560 --> 00:18:42,380 >> که بازگشت، ما ساخته ایم مشکل کمی کوچکتر، 374 00:18:42,380 --> 00:18:46,910 ما در حال گفت حذف همه دیگری، و سپس شما می توانید به من را حذف کنید. 375 00:18:46,910 --> 00:18:50,940 و بیشتر پایین جاده، آن گره می گویند، حذف هر کس دیگری. 376 00:18:50,940 --> 00:18:53,940 اما در نهایت ما را به دریافت نقطه که در آن لیست تهی است، 377 00:18:53,940 --> 00:18:55,310 و مورد پایگاه ما است. 378 00:18:55,310 --> 00:18:57,010 >> بنابراین اجازه دهید نگاهی به این و چگونه این ممکن است کار کند. 379 00:18:57,010 --> 00:18:59,759 بنابراین در اینجا لیست ما است، آن را همان لیست ما فقط در مورد صحبت می کردند، 380 00:18:59,759 --> 00:19:00,980 و مراحل وجود دارد. 381 00:19:00,980 --> 00:19:04,200 در بسیاری از متن وجود دارد، ولی امیدوارم تجسم کمک خواهد کرد. 382 00:19:04,200 --> 00:19:08,557 >> بنابراین ما have-- و من هم کشیده تا ما قاب پشته تصویر 383 00:19:08,557 --> 00:19:10,890 از ویدیو های ما در پشته پاسخ، و امیدوارم همه از این 384 00:19:10,890 --> 00:19:13,260 با هم به شما چه خبر است نشان می دهد. 385 00:19:13,260 --> 00:19:14,510 بنابراین در اینجا کد شبه ما است. 386 00:19:14,510 --> 00:19:17,830 اگر ما رسیدن به یک مقدار null اشاره گر، توقف، در غیر این صورت، 387 00:19:17,830 --> 00:19:21,320 حذف و از بقیه از لیست، پس از آن آزاد گره فعلی. 388 00:19:21,320 --> 00:19:25,700 بنابراین در حال حاضر، list-- اشاره گر است که ما 389 00:19:25,700 --> 00:19:28,410 عبور در از بین بردن نقاط به 12. 390 00:19:28,410 --> 00:19:33,340 12 یک اشاره گر تهی نیست، بنابراین ما در حال رفتن بقیه لیست را حذف کنید. 391 00:19:33,340 --> 00:19:35,450 >> آنچه که حذف بقیه از ما دارد؟ 392 00:19:35,450 --> 00:19:37,950 خب، به این معنی ساخت یک پاسخ برای از بین بردن، گفت: 393 00:19:37,950 --> 00:19:42,060 که 15 آغاز شده است بقیه از لیست ما می خواهیم به از بین ببرد. 394 00:19:42,060 --> 00:19:47,480 و به این ترتیب پاسخ برای از بین بردن 12 نوع از در انتظار نگه داشته. 395 00:19:47,480 --> 00:19:52,690 آن را منجمد وجود دارد، انتظار برای پاسخ برای از بین بردن 15، به پایان کار خود را. 396 00:19:52,690 --> 00:19:56,280 >> خب، 15 یک اشاره گر تهی نیست، و پس از آن را می گویند، همه حق است، 397 00:19:56,280 --> 00:19:58,450 خب، حذف و از بقیه از لیست. 398 00:19:58,450 --> 00:20:00,760 بقیه فهرست شروع در 9، و بنابراین ما فقط 399 00:20:00,760 --> 00:20:04,514 صبر کنید تا همه شما را حذف کنید که مواد، پس از عقب می آیند و حذف کنید. 400 00:20:04,514 --> 00:20:06,680 خوب 9 را می گویند، خوب، من یک اشاره گر تهی نیست، 401 00:20:06,680 --> 00:20:09,020 بنابراین از اینجا حذف و از بقیه این فهرست است. 402 00:20:09,020 --> 00:20:11,805 و بنابراین سعی کنید و از بین بردن 13. 403 00:20:11,805 --> 00:20:15,550 13 می گوید، من اشاره گر تهی نیست، همان چیزی که، از آن عبور جفتک انداختن. 404 00:20:15,550 --> 00:20:17,930 10 اشاره گر تهی، 10 یک اشاره گر NULL، 405 00:20:17,930 --> 00:20:20,200 اما 10 است نه یک null را در حال حاضر اشاره گر، 406 00:20:20,200 --> 00:20:22,470 و پس از آن عبور می کند جفتک انداختن بیش از حد. 407 00:20:22,470 --> 00:20:25,560 >> و در حال حاضر نقاط لیست وجود دارد، آن را واقعا اشاره به some-- 408 00:20:25,560 --> 00:20:28,710 اگر فضای بیشتری در تصویر بود، آن را به برخی از فضای تصادفی اشاره 409 00:20:28,710 --> 00:20:29,960 که ما نمی دانیم که آنچه در آن است. 410 00:20:29,960 --> 00:20:34,680 این اشاره گر تهی است هر چند، لیست به معنای واقعی کلمه در حال حاضر مجموعه آن ارزش های پوچ. 411 00:20:34,680 --> 00:20:36,820 این اشاره که در داخل جعبه قرمز است. 412 00:20:36,820 --> 00:20:39,960 ما یک اشاره گر تهی رسیده است، بنابراین ما می توانیم را متوقف کند، و ما در حال انجام است. 413 00:20:39,960 --> 00:20:46,230 >> و به طوری که فریم بنفش است now-- در بالای stack-- که قاب فعال، 414 00:20:46,230 --> 00:20:47,017 اما آن را انجام داده است. 415 00:20:47,017 --> 00:20:48,600 اگر ما یک اشاره گر تهی رسیدهاید، متوقف شود. 416 00:20:48,600 --> 00:20:51,290 ما هیچ چیز را نمی کنند، ما می توانید یک اشاره گر null آزاد نیست، 417 00:20:51,290 --> 00:20:55,070 ما هیچ از malloc نیست فضا، و بنابراین ما در حال انجام است. 418 00:20:55,070 --> 00:20:57,590 به طوری که عملکرد قاب از بین می رود، و ما 419 00:20:57,590 --> 00:21:00,930 resume-- ما انتخاب کنید تا جایی که ما را ترک با بالاترین یک بعدی، که 420 00:21:00,930 --> 00:21:02,807 این قاب به رنگ آبی تیره در اینجا است. 421 00:21:02,807 --> 00:21:04,390 بنابراین ما انتخاب کنید تا جایی که ما را ترک کردن. 422 00:21:04,390 --> 00:21:06,598 ما بقیه حذف لیست در حال حاضر، به طوری که در حال حاضر ما 423 00:21:06,598 --> 00:21:08,000 رفتن به رایگان گره فعلی است. 424 00:21:08,000 --> 00:21:12,920 بنابراین در حال حاضر ما می توانیم این گره آزاد، و در حال حاضر ما در پایان از عملکرد رسیدهاید. 425 00:21:12,920 --> 00:21:16,810 و به طوری که قاب تابع از بین می رود، و ما انتخاب کنید تا در یک نور آبی. 426 00:21:16,810 --> 00:21:20,650 >> پس از آن says-- من در حال حاضر done-- حذف بقیه لیست، بنابراین 427 00:21:20,650 --> 00:21:23,140 آزاد گره فعلی. 428 00:21:23,140 --> 00:21:26,520 و در حال حاضر قاب زرد است تماس در بالای پشته. 429 00:21:26,520 --> 00:21:29,655 و بنابراین به عنوان شما می بینید، ما در حال حاضر از بین بردن لیست از راست به چپ. 430 00:21:29,655 --> 00:21:33,710 431 00:21:33,710 --> 00:21:37,280 >> چه اتفاقی می افتاد، هر چند، اگر ما همه چیز را به راه اشتباه انجام داده بود؟ 432 00:21:37,280 --> 00:21:39,410 درست مثل زمانی که ما سعی برای اضافه کردن یک عنصر است. 433 00:21:39,410 --> 00:21:41,909 اگر ما را خراب کرد زنجیره ای، اگر ما اتصال اشاره گر نیست 434 00:21:41,909 --> 00:21:44,690 در جهت درست، اگر ما فقط آزاد عنصر اول، 435 00:21:44,690 --> 00:21:47,420 اگر ما فقط آزاد کرد سر از لیست، در حال حاضر ما 436 00:21:47,420 --> 00:21:49,642 هیچ راهی برای اشاره به بقیه از لیست. 437 00:21:49,642 --> 00:21:51,350 و بنابراین ما باید همه چیز یتیم، 438 00:21:51,350 --> 00:21:53,880 ما را به حال چه به نام نشت حافظه. 439 00:21:53,880 --> 00:21:56,800 اگر شما از فیلم ما به یاد در تخصیص حافظه پویا، 440 00:21:56,800 --> 00:21:58,650 که چیز بسیار خوبی است. 441 00:21:58,650 --> 00:22:00,810 >> همانطور که گفتم، وجود دارد چندین عملیات 442 00:22:00,810 --> 00:22:04,010 که ما نیاز به استفاده از به کار با لیست پیوندی به طور موثر. 443 00:22:04,010 --> 00:22:08,430 و شما ممکن است متوجه من حذف یکی، حذف یک عنصر از یک مرتبط 444 00:22:08,430 --> 00:22:09,064 لیست. 445 00:22:09,064 --> 00:22:10,980 دلیل من که است آن را در واقع نوعی از 446 00:22:10,980 --> 00:22:14,360 روی حیله و تزویر در مورد چگونگی حذف فکر می کنم یک عنصر از یک تنهایی 447 00:22:14,360 --> 00:22:15,600 لیست پیوندی. 448 00:22:15,600 --> 00:22:19,950 ما باید قادر به جست و خیز بیش از چیزی در لیست، که 449 00:22:19,950 --> 00:22:22,975 معنی است که ما به ما point-- گرفتن می خواهید این node-- را حذف کنید 450 00:22:22,975 --> 00:22:25,350 اما به منظور آن را به طوری که ما انجام هر گونه اطلاعات از دست دادن نیست، 451 00:22:25,350 --> 00:22:30,530 ما نیاز به اتصال این گره در اینجا، در اینجا. 452 00:22:30,530 --> 00:22:33,390 >> بنابراین من احتمالا اشتباه از دیدگاه بصری. 453 00:22:33,390 --> 00:22:36,830 بنابراین ما در آغاز هستید ما لیست، ما در حال اقدام از طریق، 454 00:22:36,830 --> 00:22:40,510 ما می خواهیم این گره را حذف کنید. 455 00:22:40,510 --> 00:22:43,440 اگر ما فقط آن را حذف کنید، ما در زنجیره شکسته ام. 456 00:22:43,440 --> 00:22:45,950 این گره در اینجا اشاره به هر چیز دیگری، 457 00:22:45,950 --> 00:22:48,260 آن شامل زنجیره ای از اینجا در خارج. 458 00:22:48,260 --> 00:22:51,190 >> بنابراین آنچه که ما نیاز به انجام در واقع بعد از ما به این نقطه، 459 00:22:51,190 --> 00:22:56,670 است که ما نیاز به قدم به عقب یک، و اتصال این گره را به این گره، 460 00:22:56,670 --> 00:22:58,590 بنابراین ما پس از آن می توانید حذف کنید یکی در وسط. 461 00:22:58,590 --> 00:23:02,120 اما فهرست تنهایی مرتبط نیست به ما ارائه یک راه برای رفتن به عقب. 462 00:23:02,120 --> 00:23:05,160 بنابراین ما نیاز به هم نگه دو اشاره گر، و حرکت آنها 463 00:23:05,160 --> 00:23:09,527 مرتب کردن بر اساس گام، یکی در پشت دیگر ما به عنوان، و یا رسیدن به یک نقطه 464 00:23:09,527 --> 00:23:11,110 و سپس از طریق ارسال اشاره گر است. 465 00:23:11,110 --> 00:23:13,150 و به عنوان شما می توانید، آن را ببینید می توانید کثیف کمی دریافت کنید. 466 00:23:13,150 --> 00:23:15,360 خوشبختانه ما یکی دیگر از راه برای حل و فصل آن، 467 00:23:15,360 --> 00:23:17,810 هنگامی که ما در مورد لیست مضاعف مرتبط صحبت کنید. 468 00:23:17,810 --> 00:23:20,720 >> من داگ لوید هستم، این CS50. 469 00:23:20,720 --> 00:23:22,298