1 00:00:00,000 --> 00:00:03,381 >> [Гуляе музыка] 2 00:00:03,381 --> 00:00:04,604 3 00:00:04,604 --> 00:00:05,520 Даг Lloyd: Добра. 4 00:00:05,520 --> 00:00:07,860 Так што калі вы толькі што скончылі, што відэа паасобку, звязаных спісаў прабачце 5 00:00:07,860 --> 00:00:09,568 Я пакінуў цябе на трохі захапляльным. 6 00:00:09,568 --> 00:00:12,790 Але я рады, што ты тут, каб скончыць гісторыя двойчы звязаных спісаў. 7 00:00:12,790 --> 00:00:15,250 >> Так што, калі вы памятаеце з што відэа, мы гаварылі 8 00:00:15,250 --> 00:00:18,500 пра тое, як односвязный Спісы ходзяць у нашу здольнасць 9 00:00:18,500 --> 00:00:22,090 каб мець справу з інфармацыяй дзе колькасць элементаў 10 00:00:22,090 --> 00:00:24,442 або лік элементаў у спіс можа расці або скарачацца. 11 00:00:24,442 --> 00:00:26,400 Цяпер мы можам мець справу з нешта падобнае, дзе 12 00:00:26,400 --> 00:00:28,310 мы не маглі справіцца з ёй з масівамі. 13 00:00:28,310 --> 00:00:30,560 >> Але яны пакутуюць ад аднаго крытычным абмежаваннем, 14 00:00:30,560 --> 00:00:33,790 з'яўляецца тое, што з односвязный Спіс, мы можам толькі калі-небудзь рухацца 15 00:00:33,790 --> 00:00:36,200 у адным кірунку па спісе. 16 00:00:36,200 --> 00:00:39,010 І толькі рэальная сітуацыя дзе, што можа стаць праблемай 17 00:00:39,010 --> 00:00:41,250 калі мы спрабавалі выдаліць адзін элемент. 18 00:00:41,250 --> 00:00:46,000 І мы нават не абмяркоўваем, як гэта зрабіць у аднакратна звязанага спісу ў псевдокоде. 19 00:00:46,000 --> 00:00:48,797 Гэта, вядома, можна выканаць, але гэта можа быць трохі клопатаў. 20 00:00:48,797 --> 00:00:50,630 Так што, калі вы апынецеся ў сітуацыі, калі 21 00:00:50,630 --> 00:00:53,175 Вы спрабуеце выдаліць асобныя элементы з спісу 22 00:00:53,175 --> 00:00:55,430 ці гэта будзе неабходна што вы будзеце выдаляць 23 00:00:55,430 --> 00:00:57,970 асобныя элементы з спіс, вы можаце 24 00:00:57,970 --> 00:01:02,090 разгледзець пытанне аб выкарыстанні ўдвая звязаны спіс замест аднакратна звязанага спісу. 25 00:01:02,090 --> 00:01:06,320 Таму ўдвая звязаныя спісы дазваляюць вам каб перамясціць абедзве наперад і назад 26 00:01:06,320 --> 00:01:09,340 па спісе замест толькі наперад праз list-- 27 00:01:09,340 --> 00:01:13,950 проста дадаўшы адзін дадатковы элемент нашаму вызначэнні структуры 28 00:01:13,950 --> 00:01:16,690 для двойчы звязанага спісу вузла. 29 00:01:16,690 --> 00:01:19,770 >> Зноў жа, калі вы не збіраецеся быць выдаленне асобных элементаў 30 00:01:19,770 --> 00:01:24,810 ад list--, таму што мы, дадаўшы дадатковае поле для нашай структуры 31 00:01:24,810 --> 00:01:28,340 вызначэнне, самі вузлы для двунакіраваных спісаў 32 00:01:28,340 --> 00:01:29,550 будуць больш. 33 00:01:29,550 --> 00:01:31,600 Яны збіраюцца прыняць да больш байт памяці. 34 00:01:31,600 --> 00:01:34,160 І так, калі гэта не тое, Вы збіраецеся трэба зрабіць, 35 00:01:34,160 --> 00:01:36,300 Вы маглі б вырашыць, што гэта не варта кампраміс 36 00:01:36,300 --> 00:01:39,360 прыйдзецца марнаваць дадатковы байт памяці патрабуецца 37 00:01:39,360 --> 00:01:43,940 для двойчы звязанага спісу, калі вы не будзе выдаленне асобных элементаў. 38 00:01:43,940 --> 00:01:46,760 Але яны таксама выдатна для іншых рэчаў таксама. 39 00:01:46,760 --> 00:01:51,260 >> Так як я ўжо сказаў, мы проста павінны дадаць адна поле нашай структуры 40 00:01:51,260 --> 00:01:55,360 definition-- гэта паняцце папярэдняга паказальніка. 41 00:01:55,360 --> 00:01:58,620 Так што з аднакратна звязанага спісу, мы маюць значэнне і наступны паказальнік, 42 00:01:58,620 --> 00:02:02,850 таму ўдвая звязаны спіс толькі мае спосаб рухацца ў зваротным кірунку, а таксама. 43 00:02:02,850 --> 00:02:04,960 >> У цяперашні час у односвязный Спіс відэа, мы гаварылі 44 00:02:04,960 --> 00:02:07,210 пра іх пяць з Асноўныя рэчы, якія трэба будзе 45 00:02:07,210 --> 00:02:09,449 ў стане зрабіць, каб працаваць са звязанымі спісамі. 46 00:02:09,449 --> 00:02:12,880 І для большасці з іх, з тым, што гэта ўдвая звязаны спіс 47 00:02:12,880 --> 00:02:14,130 на самай справе не вялікі скачок. 48 00:02:14,130 --> 00:02:17,936 Мы можам па-ранейшаму шукаць праз, проста рухацца наперад ад пачатку да канца. 49 00:02:17,936 --> 00:02:20,810 Мы ўсё яшчэ можам стварыць вузел з разрэджанае паветра, у значнай ступені той жа самы шлях. 50 00:02:20,810 --> 00:02:23,591 Мы можам выдаліць спісы даволі гэтак жа, занадта. 51 00:02:23,591 --> 00:02:25,340 Адзіныя рэчы, якія некалькі адрозніваюцца, 52 00:02:25,340 --> 00:02:28,970 сапраўды, устаўляюць новыя вузлы ў спісе, 53 00:02:28,970 --> 00:02:33,722 і мы, нарэшце, казаць аб выдаленні адзін элемент з спісу, а таксама. 54 00:02:33,722 --> 00:02:35,430 Зноў жа, у значнай ступені тры іншых, мы 55 00:02:35,430 --> 00:02:37,888 не буду казаць пра іх прама зараз, таму што яны проста 56 00:02:37,888 --> 00:02:43,920 вельмі дробныя недахопы на ідэях абмеркавалі у аднакратна звязанага спісу відэа. 57 00:02:43,920 --> 00:02:46,292 >> Такім чынам, давайце ўставіць новы вузел у двойчы звязаны спіс. 58 00:02:46,292 --> 00:02:48,750 Мы гаварылі пра робіце гэта для односвязный спіс, а таксама, 59 00:02:48,750 --> 00:02:52,020 але ёсць пара дадатковых ловіць з двунакіраваных спісаў. 60 00:02:52,020 --> 00:02:55,280 Мы [? праходзячы?] у галаву з пералічыць тут і некаторыя адвольнае значэнне, 61 00:02:55,280 --> 00:02:58,600 і мы хочам, каб атрымаць новы кіраўнік спісу з гэтай функцыі. 62 00:02:58,600 --> 00:03:01,414 Вось чаму ён вяртае dllnode зорку. 63 00:03:01,414 --> 00:03:02,330 Такім чынам, якія крокі? 64 00:03:02,330 --> 00:03:04,496 Яны, ізноў жа, вельмі падобныя у односвязный спіс 65 00:03:04,496 --> 00:03:05,670 з адной дадатковай таго. 66 00:03:05,670 --> 00:03:08,900 Мы хочам, каб вылучае прастору для новага вузел і праверка, каб пераканацца, што гэта дзейнічае. 67 00:03:08,900 --> 00:03:11,510 Мы хочам, каб запоўніць гэты вузел да з тым, што інфармацыя, якую мы 68 00:03:11,510 --> 00:03:12,564 хачу паставіць у ім. 69 00:03:12,564 --> 00:03:15,480 Апошняе, што нам трэба, каб do-- дадатковая рэч, якую мы павінны зрабіць, rather-- 70 00:03:15,480 --> 00:03:19,435 гэта выправіць Папярэдні паказальнік старога чале спісу. 71 00:03:19,435 --> 00:03:21,310 Памятаеце, што з-за з двусвязных спісаў, 72 00:03:21,310 --> 00:03:23,110 мы можам рухацца наперад і backwards-- якія 73 00:03:23,110 --> 00:03:27,080 азначае, што кожны вузел на самай справе паказвае каб замест двух іншых вузлоў толькі адзін. 74 00:03:27,080 --> 00:03:29,110 І таму мы павінны выправіць стары галава спісу 75 00:03:29,110 --> 00:03:32,151 пазначыць таму, каб новы кіраўнік звязаны спіс, які быў чымсьці 76 00:03:32,151 --> 00:03:33,990 мы не павінны зрабіць, перш чым. 77 00:03:33,990 --> 00:03:37,420 І, як і раней, мы проста вяртаць паказальнік на новы чале спісу. 78 00:03:37,420 --> 00:03:38,220 >> Дык вось спіс. 79 00:03:38,220 --> 00:03:40,144 Мы хочам, каб ўставіць 12 у гэтым спісе. 80 00:03:40,144 --> 00:03:42,060 Звярніце ўвагу, што схема трохі адрозніваецца. 81 00:03:42,060 --> 00:03:47,710 Кожны вузел ўтрымлівае тры fields-- Дадзеныя і наступны паказальнік ў чырвоным, 82 00:03:47,710 --> 00:03:50,170 і паказальнік Папярэдні сінім. 83 00:03:50,170 --> 00:03:54,059 Нічога не прыходзіць да 15 вузла, так што яго Папярэдні паказальнік NULL. 84 00:03:54,059 --> 00:03:55,350 Гэта пачатак спісу. 85 00:03:55,350 --> 00:03:56,560 Там няма нічога перад ім. 86 00:03:56,560 --> 00:04:03,350 І нічога не прыходзіць пасля 10 вузла, а так што наступны паказальнік з'яўляецца несапраўдным, а таксама. 87 00:04:03,350 --> 00:04:05,616 >> Так давайце дадамо 12 да гэтага спісу. 88 00:04:05,616 --> 00:04:08,070 Мы павінны [неразборліва] прастору для вузла. 89 00:04:08,070 --> 00:04:11,480 Ставім 12 ўнутры яго. 90 00:04:11,480 --> 00:04:14,840 І зноў жа, мы павінны быць вельмі асцярожныя, каб не разарваць ланцуг. 91 00:04:14,840 --> 00:04:17,144 Мы хочам, каб пераставіць ўказальнікі ў правільным парадку. 92 00:04:17,144 --> 00:04:19,519 А часам, што, магчыма, mean-- як мы ўбачым у прыватнасці, 93 00:04:19,519 --> 00:04:24,120 з delete--, што ў нас ёсць некаторыя залішнія паказальнікі, але гэта нармальна. 94 00:04:24,120 --> 00:04:25,750 >> Так што мы хочам зрабіць у першую чаргу? 95 00:04:25,750 --> 00:04:28,290 Я б рэкамендаваў рэчы, якія вы павінны, верагодна, 96 00:04:28,290 --> 00:04:35,350 зрабіць гэта, каб запоўніць паказальнікі 12 вузел, перш чым дакранацца хто-небудзь яшчэ. 97 00:04:35,350 --> 00:04:38,640 Так што 12 будзе паказваць на наступны? 98 00:04:38,640 --> 00:04:39,860 15. 99 00:04:39,860 --> 00:04:42,430 Тое, што прыходзіць да 12? 100 00:04:42,430 --> 00:04:43,640 Нічога. 101 00:04:43,640 --> 00:04:46,280 Цяпер мы запоўнілі дадатковая інфармацыя ў 12 102 00:04:46,280 --> 00:04:49,320 таму ён мае папярэдні, наступны, і каштоўнасць. 103 00:04:49,320 --> 00:04:53,505 >> Цяпер мы можам мець гэты дадатковы 15-- крок, які мы казалі about-- мы 104 00:04:53,505 --> 00:04:56,590 можа мець 15 кропку назад да 12. 105 00:04:56,590 --> 00:04:59,634 А зараз мы можам перайсці галаву звязаны спіс, каб быць 12. 106 00:04:59,634 --> 00:05:02,550 Так што гэта вельмі падобна на тое, што мы рабілі з аднакратна звязаных спісаў, 107 00:05:02,550 --> 00:05:06,940 для дадатковай стадыі, за выключэннем падлучэння старую галаву спісу 108 00:05:06,940 --> 00:05:09,810 вярнуцца да новай чале спісу. 109 00:05:09,810 --> 00:05:12,170 >> Зараз давайце, нарэшце, выдаліць вузел з звязанага спісу. 110 00:05:12,170 --> 00:05:14,350 Так што давайце, у нас ёсць некаторыя іншыя функцыі, якія 111 00:05:14,350 --> 00:05:18,080 знаходзіць вузел, мы хочам, каб выдаліць і даў нам паказальнік дакладна 112 00:05:18,080 --> 00:05:19,710 вузел, які мы хочам выдаліць. 113 00:05:19,710 --> 00:05:22,360 Мы нават не need-- сказаць Галава ўсё яшчэ глабальна абвешчаныя. 114 00:05:22,360 --> 00:05:23,590 Нам не трэба галаву тут. 115 00:05:23,590 --> 00:05:26,830 Усё гэта функцыя робіць гэта мы ў знайшоў паказальнік на сапраўды вузла мы 116 00:05:26,830 --> 00:05:28,090 хачу, каб пазбавіцца ад. 117 00:05:28,090 --> 00:05:28,940 Давайце пазбавіцца ад яго. 118 00:05:28,940 --> 00:05:31,859 Гэта нашмат прасцей з двойчы звязаныя спісы. 119 00:05:31,859 --> 00:05:33,650 First-- гэта на самай справе ўсяго пару рэчаў. 120 00:05:33,650 --> 00:05:38,760 Нам проста трэба, каб выправіць навакольны паказальнікі вузлоў, так што яны Прапусціць 121 00:05:38,760 --> 00:05:40,240 вузел, мы хочам, каб выдаліць. 122 00:05:40,240 --> 00:05:43,484 І тады мы можам выдаліць гэты вузел. 123 00:05:43,484 --> 00:05:45,150 Такім чынам, яшчэ раз, мы проста перажывае тут. 124 00:05:45,150 --> 00:05:49,625 Мы, відаць, вырашыў, што мы хочам, каб выдаліць вузел X. 125 00:05:49,625 --> 00:05:51,500 І зноў, што я рабіць here-- па way-- 126 00:05:51,500 --> 00:05:54,580 гэта агульны выпадак для вузел, які знаходзіцца ў сярэдзіне. 127 00:05:54,580 --> 00:05:56,547 Ёсць пара дадатковыя агаворкі, якія вы 128 00:05:56,547 --> 00:05:59,380 неабходна ўлічваць, калі вы выдаліце самы пачатак спісу 129 00:05:59,380 --> 00:06:01,040 або ў самым канцы спісу. 130 00:06:01,040 --> 00:06:03,730 Там ёсць пара спецыяльных вуглавыя выпадкі, каб мець справу з там. 131 00:06:03,730 --> 00:06:07,960 >> Так гэта працуе для выдалення любога вузла У сярэдзіне list-- той, які 132 00:06:07,960 --> 00:06:11,550 мае законнае паказальнік наперад і законным паказальнік таму, 133 00:06:11,550 --> 00:06:14,460 законным Папярэдняя і Наступны паказальнік. 134 00:06:14,460 --> 00:06:16,530 Зноў жа, калі вы працуеце з канцамі, вы 135 00:06:16,530 --> 00:06:18,500 трэба апрацоўваць тыя крыху па-іншаму, 136 00:06:18,500 --> 00:06:19,570 і мы не збіраемся казаць аб тым, што ў цяперашні час. 137 00:06:19,570 --> 00:06:21,319 Але вы, верагодна, высветліць, што трэба 138 00:06:21,319 --> 00:06:24,610 зрабіць, проста назіраючы гэта відэа. 139 00:06:24,610 --> 00:06:28,910 >> Такім чынам, мы ізаляваныя Х. Х вузел мы хочам, каб выдаліць з спісу. 140 00:06:28,910 --> 00:06:30,140 Што мы робім? 141 00:06:30,140 --> 00:06:32,800 Па-першае, мы павінны пераставіць вонкавыя паказальнікі. 142 00:06:32,800 --> 00:06:35,815 Мы павінны перабудаваць 9-х побач з прапусціць 13 143 00:06:35,815 --> 00:06:38,030 і паказваюць на 10-- якія гэта тое, што мы толькі што зрабілі. 144 00:06:38,030 --> 00:06:41,180 І мы таксама павінны змяніць 10-х Папярэдні 145 00:06:41,180 --> 00:06:44,610 пазначыць да 9, а не паказваючы на ​​13. 146 00:06:44,610 --> 00:06:46,490 >> Такім чынам, яшчэ раз, гэта было схема, каб пачаць з. 147 00:06:46,490 --> 00:06:47,730 Гэта была наша ланцуг. 148 00:06:47,730 --> 00:06:51,027 Мы павінны прапусціць 13, але мы павінны таксама захаваць 149 00:06:51,027 --> 00:06:52,110 цэласнасць спісу. 150 00:06:52,110 --> 00:06:54,680 Мы не хочам страціць ні Інфармацыя ў любым кірунку. 151 00:06:54,680 --> 00:06:59,620 Такім чынам, мы павінны пераставіць паказальнікі старанна 152 00:06:59,620 --> 00:07:02,240 такім чынам, мы не разарваць ланцуг наогул. 153 00:07:02,240 --> 00:07:05,710 >> Такім чынам, мы можам сказаць, 9 у наступным паказальнік паказвае на тое ж месца 154 00:07:05,710 --> 00:07:08,040 што Трынаццатай Наступны паказальнік паказвае прама цяпер. 155 00:07:08,040 --> 00:07:10,331 Таму што мы ў канчатковым выніку захочуць прапусціць 13. 156 00:07:10,331 --> 00:07:13,750 Так, дзе 13 балаў Далей, вы хачу дзевяць пазначыць там замест. 157 00:07:13,750 --> 00:07:15,200 Дык вось, што. 158 00:07:15,200 --> 00:07:20,370 А потым, дзе 13 балаў таму каб, усё, што прыходзіць да 13, 159 00:07:20,370 --> 00:07:24,800 мы хочам, каб паказаць 10 да таго, што замест 13. 160 00:07:24,800 --> 00:07:29,290 Зараз звернеце ўвагу, калі вы будзеце прытрымлівацца стрэлкі, мы можам зваліцца 13 161 00:07:29,290 --> 00:07:32,380 фактычна не страты інфармацыі. 162 00:07:32,380 --> 00:07:36,002 Мы захавалі цэласнасць спісу, рухацца як наперад, так і назад. 163 00:07:36,002 --> 00:07:38,210 І тады мы можам проста накшталт з яго прыбраць трохі 164 00:07:38,210 --> 00:07:40,930 пацягнуўшы спіс разам. 165 00:07:40,930 --> 00:07:43,270 Такім чынам, мы пераставілі паказальнікі на абодва бакі. 166 00:07:43,270 --> 00:07:46,231 А потым мы вызвалілі Х вузел, які утрымліваў 13, 167 00:07:46,231 --> 00:07:47,480 і мы не разарваць ланцуг. 168 00:07:47,480 --> 00:07:50,980 Так мы і зрабілі добра. 169 00:07:50,980 --> 00:07:53,000 >> Канчатковая нота тут на звязаных спісах. 170 00:07:53,000 --> 00:07:55,990 Так як адназарадных і двойчы звязаны спісы, як мы бачылі, 171 00:07:55,990 --> 00:07:58,959 падтрымка сапраўды эфектыўным ўстаўкі і выдаленне элементаў. 172 00:07:58,959 --> 00:08:00,750 Вы можаце вельмі шмат зрабіць ён ў пастаянным часу. 173 00:08:00,750 --> 00:08:03,333 Што мы павінны зрабіць, каб выдаліць элемент проста другі таму? 174 00:08:03,333 --> 00:08:04,440 Мы пераехалі адзін паказальнік. 175 00:08:04,440 --> 00:08:05,920 Мы пераехалі іншы паказальнік. 176 00:08:05,920 --> 00:08:07,915 Мы вызвалілі x-- ўзяў тры аперацыі. 177 00:08:07,915 --> 00:08:14,500 Ён заўсёды займае тры аперацыі на выдаліць гэтую node-- вызваліць вузел. 178 00:08:14,500 --> 00:08:15,280 >> Як мы ўстаўляем? 179 00:08:15,280 --> 00:08:17,280 Ну, мы проста заўсёды лавіруючы на ​​пачатак 180 00:08:17,280 --> 00:08:19,400 калі мы ўстаўкі эфектыўна. 181 00:08:19,400 --> 00:08:21,964 Такім чынам, мы павінны rearrange-- у залежнасці ад таго, калі гэта 182 00:08:21,964 --> 00:08:24,380 адназарадных або двойчы звязаны Спіс, мы, магчыма, спатрэбіцца зрабіць тры 183 00:08:24,380 --> 00:08:26,824 ці чатыры аперацыі макс. 184 00:08:26,824 --> 00:08:28,365 Але, зноў жа, гэта заўсёды тры ці чатыры. 185 00:08:28,365 --> 00:08:30,531 Гэта не мае значэння, колькі элементы знаходзяцца ў нашым спісе, 186 00:08:30,531 --> 00:08:33,549 гэта заўсёды тры ці чатыры operations-- гэтак жа, як выдаленне заўсёды 187 00:08:33,549 --> 00:08:35,320 тры ці чатыры аперацыі. 188 00:08:35,320 --> 00:08:36,919 Гэта пастаянная часу. 189 00:08:36,919 --> 00:08:38,169 Так што гэта сапраўды выдатна. 190 00:08:38,169 --> 00:08:40,620 >> З масівамі, мы рабілі нешта накшталт ўстаўкі роду. 191 00:08:40,620 --> 00:08:44,739 Вы, напэўна, нагадаць, што ўвядзенне Сартаваць не з'яўляецца пастаяннай алгарытм раз. 192 00:08:44,739 --> 00:08:46,030 Гэта на самай справе даволі дорага. 193 00:08:46,030 --> 00:08:48,840 Так што гэта значна лепш, для ўстаўкі. 194 00:08:48,840 --> 00:08:51,840 Але як я ўжо казаў у односвязный спіс відэа, 195 00:08:51,840 --> 00:08:54,030 мы атрымалі зваротную тут таксама, праўда? 196 00:08:54,030 --> 00:08:57,580 Мы страцілі здольнасць да адвольны доступ да элементаў. 197 00:08:57,580 --> 00:09:02,310 Мы не можам сказаць, я хачу, элемент нумар чатыры або элемент нумар 10 з звязанага спісу 198 00:09:02,310 --> 00:09:04,990 гэтак жа, як мы можам зрабіць з масівам 199 00:09:04,990 --> 00:09:08,630 або мы можам проста наўпрост індэкс у элеменце нашай масіва. 200 00:09:08,630 --> 00:09:10,930 >> І такім чынам спрабуючы знайсці элемент у звязаным list-- 201 00:09:10,930 --> 00:09:15,880 калі пошук па important-- Цяпер можна ўзяць лінейнае час. 202 00:09:15,880 --> 00:09:18,330 Як спіс становіцца больш, гэта можа заняць адзін дадатковы крок 203 00:09:18,330 --> 00:09:22,644 для кожнага элемента ў спісе ў каб знайсці тое, што мы шукаем. 204 00:09:22,644 --> 00:09:23,560 Так што кампрамісы. 205 00:09:23,560 --> 00:09:25,780 Там гэта трохі пра і супраць элементам тут. 206 00:09:25,780 --> 00:09:29,110 >> І ўдвая-звязаныя спісы не з'яўляюцца Апошні выгляд камбінацыі структуры дадзеных 207 00:09:29,110 --> 00:09:32,840 што мы будзем казаць, прымаючы ўсё асноўнае будынак 208 00:09:32,840 --> 00:09:34,865 блокі З разам. 209 00:09:34,865 --> 00:09:37,900 Таму што на самой справе, мы можам нават лепш, чым гэта 210 00:09:37,900 --> 00:09:41,970 стварыць структуру дадзеных, што Вы маглі б быць у стане шукаць праз 211 00:09:41,970 --> 00:09:43,360 ў пастаянным часу таксама. 212 00:09:43,360 --> 00:09:46,080 Але пра гэта ў іншы відэа. 213 00:09:46,080 --> 00:09:47,150 >> Я Дуг Лойд. 214 00:09:47,150 --> 00:09:49,050 Гэта CS50. 215 00:09:49,050 --> 00:09:50,877