1 00:00:00,000 --> 00:00:03,381 >> [Musikwiedergabe] 2 00:00:03,381 --> 00:00:04,604 3 00:00:04,604 --> 00:00:05,520 DOUG LLOYD: Alles klar. 4 00:00:05,520 --> 00:00:07,860 Also, wenn Sie gerade, dass Video-on einfach verkettete Listen leid, 5 00:00:07,860 --> 00:00:09,568 Ich ließ sie weg auf ein wenig ein Cliffhanger. 6 00:00:09,568 --> 00:00:12,790 Aber ich bin froh, dass Sie hier sind, um zu beenden die Geschichte von doppelt verketteten Listen. 7 00:00:12,790 --> 00:00:15,250 >> Also, wenn Sie von erinnern dass Video, sprachen wir 8 00:00:15,250 --> 00:00:18,500 wie einfach verknüpften Listen Sie besuchen unsere Fähigkeit, 9 00:00:18,500 --> 00:00:22,090 mit Informationen umzugehen wobei die Anzahl der Elemente, 10 00:00:22,090 --> 00:00:24,442 oder die Anzahl der Elemente in eine Liste können wachsen oder schrumpfen. 11 00:00:24,442 --> 00:00:26,400 Jetzt können wir behandeln so was, wo 12 00:00:26,400 --> 00:00:28,310 wir konnten nicht damit umgehen mit Arrays. 13 00:00:28,310 --> 00:00:30,560 >> Aber sie wissen von einem leiden kritischen Beschränkung, 14 00:00:30,560 --> 00:00:33,790 ist, dass mit einer einfach verknüpften Liste, die wir immer nur bewegen kann 15 00:00:33,790 --> 00:00:36,200 in einer einzigen Richtung durch die Liste. 16 00:00:36,200 --> 00:00:39,010 Und die einzige wirkliche Situation wobei das kann ein Problem werden, 17 00:00:39,010 --> 00:00:41,250 war, als wir wurden zu versuchen, ein einzelnes Element zu löschen. 18 00:00:41,250 --> 00:00:46,000 Und wir haben nicht einmal zu diskutieren, wie es geht in einer einfach verknüpften Liste in Pseudocode. 19 00:00:46,000 --> 00:00:48,797 Es ist sicherlich machbar, aber kann es ein bisschen wie ein Streit. 20 00:00:48,797 --> 00:00:50,630 Also, wenn Sie sich selbst zu finden in einer Situation, in der 21 00:00:50,630 --> 00:00:53,175 Sie versuchen, zu löschen sind einzelne Elemente aus der Liste 22 00:00:53,175 --> 00:00:55,430 oder es wird erforderlich sein dass Sie werden Löschen 23 00:00:55,430 --> 00:00:57,970 Einzelelemente aus Die folgende Liste enthält, möchten Sie vielleicht 24 00:00:57,970 --> 00:01:02,090 zu prüfen, mit einer doppelt verketteten Liste anstelle einer einfach verknüpften Liste. 25 00:01:02,090 --> 00:01:06,320 Weil doppelt verknüpfte Listen können Sie um sowohl vorwärts und rückwärts bewegen, 26 00:01:06,320 --> 00:01:09,340 durch die Liste statt nur vorwärts durch die list-- 27 00:01:09,340 --> 00:01:13,950 nur durch Zugabe von einem zusätzlichen Element um unsere Strukturdefinition 28 00:01:13,950 --> 00:01:16,690 die doppelt verkettete Liste Knoten. 29 00:01:16,690 --> 00:01:19,770 >> Auch wenn Sie nicht zu gehen Löschen werden einzelne Elemente 30 00:01:19,770 --> 00:01:24,810 vom list-- weil wir das Hinzufügen ein extra Feld, um unsere Struktur 31 00:01:24,810 --> 00:01:28,340 Definition, die Knoten selbst für doppelt verknüpfte Listen 32 00:01:28,340 --> 00:01:29,550 gehen, größer zu sein. 33 00:01:29,550 --> 00:01:31,600 Sie gehen zu nehmen mehr Byte Speicher. 34 00:01:31,600 --> 00:01:34,160 Und so, wenn das ist nicht etwas, Sie gehen zu müssen, um zu tun, 35 00:01:34,160 --> 00:01:36,300 könnten Sie sich entscheiden, es ist nicht wert, die Trade-off 36 00:01:36,300 --> 00:01:39,360 zu haben, um das extra Byte Speicher erforderlich 37 00:01:39,360 --> 00:01:43,940 für eine doppelt verknüpfte Liste, wenn Sie nicht sein werden, das Löschen einzelner Elemente. 38 00:01:43,940 --> 00:01:46,760 Aber sie sind auch cool für andere Dinge auch. 39 00:01:46,760 --> 00:01:51,260 >> Also wie gesagt, wir müssen nur hinzufügen, ein einziges Feld, um unsere Struktur 40 00:01:51,260 --> 00:01:55,360 definition-- diese Vorstellung eine vorherige Zeiger. 41 00:01:55,360 --> 00:01:58,620 Also mit einer einfach verknüpften Liste, die wir haben den Wert und die Next-Zeiger, 42 00:01:58,620 --> 00:02:02,850 so dass die doppelt verknüpfte Liste nur hat ein Weg, um rückwärts zu bewegen als auch. 43 00:02:02,850 --> 00:02:04,960 >> Jetzt in der einfach verknüpften Liste Video, sprachen wir 44 00:02:04,960 --> 00:02:07,210 über diese fünf der wichtigsten Dinge, die Sie benötigen zu sein 45 00:02:07,210 --> 00:02:09,449 der Lage zu tun, um mit verketteten Listen arbeiten. 46 00:02:09,449 --> 00:02:12,880 Und für die meisten von diesen ist die Tatsache, dass es eine doppelt verknüpfte Liste 47 00:02:12,880 --> 00:02:14,130 ist nicht wirklich ein großer Sprung. 48 00:02:14,130 --> 00:02:17,936 Wir können immer noch durch eine Suche nach gerade Vorwärtsbewegung von Anfang bis Ende. 49 00:02:17,936 --> 00:02:20,810 Wir können immer noch einen Knoten aus erstellen Luft, so ziemlich die gleiche Weise. 50 00:02:20,810 --> 00:02:23,591 Wir können Listen ziemlich löschen der gleichen Weise zu. 51 00:02:23,591 --> 00:02:25,340 Die einzigen Dinge, sind auf subtile Weise anders, 52 00:02:25,340 --> 00:02:28,970 wirklich, sind Einfügen neue Knoten in die Liste, 53 00:02:28,970 --> 00:02:33,722 und wir werden schließlich über das Löschen zu sprechen ein einzelnes Element aus der Liste als gut. 54 00:02:33,722 --> 00:02:35,430 Auch ziemlich die anderen drei sind wir 55 00:02:35,430 --> 00:02:37,888 nicht gehen, um über sie zu sprechen gerade jetzt, weil sie einfach sind 56 00:02:37,888 --> 00:02:43,920 sehr kleinere Verbesserungen auf den Ideen diskutiert in der einfach verknüpften Liste Video. 57 00:02:43,920 --> 00:02:46,292 >> Lassen Sie uns also legen Sie einen neuen Knoten in einer doppelt verketteten Liste. 58 00:02:46,292 --> 00:02:48,750 Wir sprachen über das tun dies für einfach verkettete Listen sowie, 59 00:02:48,750 --> 00:02:52,020 aber es gibt ein paar zusätzliche einholt doppelt verketteten Listen. 60 00:02:52,020 --> 00:02:55,280 Wurden [? vorbei?] in den Kopf des Liste hier und einige willkürlicher Wert, 61 00:02:55,280 --> 00:02:58,600 und wir wollen, um den neuen Kopf zu bekommen der Liste aus dieser Funktion. 62 00:02:58,600 --> 00:03:01,414 Deshalb ist es eine dllnode Sterne zurück. 63 00:03:01,414 --> 00:03:02,330 Also, was sind die Schritte? 64 00:03:02,330 --> 00:03:04,496 Sie sind wiederum sehr ähnlich auf einfach verkettete Listen 65 00:03:04,496 --> 00:03:05,670 mit einem zusätzlichen hinaus. 66 00:03:05,670 --> 00:03:08,900 Wir wollen Platz für eine neue zuordnet Knoten und überprüfen, um sicherzustellen, es ist gültig. 67 00:03:08,900 --> 00:03:11,510 Wir wollen, dass der Knoten zu füllen mit dem, was Informationen, die wir 68 00:03:11,510 --> 00:03:12,564 wollen in sie. 69 00:03:12,564 --> 00:03:15,480 Das letzte, was wir brauchen, um die do-- zusätzliche Sache, die wir tun müssen, rather-- 70 00:03:15,480 --> 00:03:19,435 ist es, die vorherige Zeiger beheben der alten Kopf der Liste. 71 00:03:19,435 --> 00:03:21,310 Denken Sie daran, dass, weil der doppelt verketteten Listen, 72 00:03:21,310 --> 00:03:23,110 können wir vorankommen und die backwards-- 73 00:03:23,110 --> 00:03:27,080 bedeutet, dass jeder Knoten zeigt tatsächlich zu zwei anderen Knoten statt nur einem. 74 00:03:27,080 --> 00:03:29,110 Und so müssen wir beheben der alte Kopf der Liste 75 00:03:29,110 --> 00:03:32,151 um rückwärts an den neuen Chef der Punkt der verknüpften Liste, die etwas nicht 76 00:03:32,151 --> 00:03:33,990 wir haben nicht vor zu tun. 77 00:03:33,990 --> 00:03:37,420 Und nach wie vor, wir haben nur eine Rück Zeiger auf die neue Spitze der Liste. 78 00:03:37,420 --> 00:03:38,220 >> So, hier ist eine Liste. 79 00:03:38,220 --> 00:03:40,144 Wir wollen in diese Liste einfügen 12. 80 00:03:40,144 --> 00:03:42,060 Bemerkt, daß das Diagramm ist etwas anders. 81 00:03:42,060 --> 00:03:47,710 Jeder Knoten enthält drei fields-- Daten und eine nächste Zeiger in rot, 82 00:03:47,710 --> 00:03:50,170 und eine vorherige Zeiger in blau. 83 00:03:50,170 --> 00:03:54,059 Nichts kommt, bevor die 15 Knoten, so seine früheren Zeiger ist null. 84 00:03:54,059 --> 00:03:55,350 Es ist der Anfang der Liste. 85 00:03:55,350 --> 00:03:56,560 Es gibt nichts, bevor es. 86 00:03:56,560 --> 00:04:03,350 Und nichts kommt nach der 10 Knoten und so ist es nächste Zeiger NULL ist als gut. 87 00:04:03,350 --> 00:04:05,616 >> Lassen Sie uns also zu dieser Liste hinzufügen 12. 88 00:04:05,616 --> 00:04:08,070 Wir müssen [unverständlich] Raum für den Knoten. 89 00:04:08,070 --> 00:04:11,480 Wir stellen 12 darin. 90 00:04:11,480 --> 00:04:14,840 Und dann wieder, wir müssen wirklich sein, Achten Sie darauf, um die Kette zu brechen. 91 00:04:14,840 --> 00:04:17,144 Wir wollen die neu anordnen Zeiger in der richtigen Reihenfolge. 92 00:04:17,144 --> 00:04:19,519 Und manchmal, dass vielleicht mean-- wie wir vor allem sehen, 93 00:04:19,519 --> 00:04:24,120 mit delete--, die wir tun müssen, einige redundanten Zeiger, aber das ist OK. 94 00:04:24,120 --> 00:04:25,750 >> Also, was wollen wir zuerst tun? 95 00:04:25,750 --> 00:04:28,290 Ich würde das empfehlen Dinge, die Sie wahrscheinlich 96 00:04:28,290 --> 00:04:35,350 zu tun, um die Zeiger der 12 zu füllen Knoten, bevor Sie berühren alle anderen. 97 00:04:35,350 --> 00:04:38,640 Also, was ist 12 als nächstes zeigen auf? 98 00:04:38,640 --> 00:04:39,860 15. 99 00:04:39,860 --> 00:04:42,430 Was kommt vor dem 12.? 100 00:04:42,430 --> 00:04:43,640 Gar nichts. 101 00:04:43,640 --> 00:04:46,280 Jetzt haben wir ausgefüllt haben die Zusatzinformationen in 12 102 00:04:46,280 --> 00:04:49,320 so hat es Zurück, Weiter und Wert. 103 00:04:49,320 --> 00:04:53,505 >> Jetzt können wir diese zusätzliche 15-- Schritt wurden wir about-- wir sprechen 104 00:04:53,505 --> 00:04:56,590 können 15 Punkt wieder auf 12. 105 00:04:56,590 --> 00:04:59,634 Und jetzt können wir den Kopf zu bewegen der verknüpften Liste, um auch 12 sein. 106 00:04:59,634 --> 00:05:02,550 So ist es ziemlich ähnlich, was wir wurden mit einfach verknüpften Listen machen, 107 00:05:02,550 --> 00:05:06,940 mit Ausnahme der zusätzlichen Schritt Anschluss des alten Kopf der Liste 108 00:05:06,940 --> 00:05:09,810 zurück zu den neuen Kopf der Liste. 109 00:05:09,810 --> 00:05:12,170 >> Lassen Sie uns nun endgültig zu löschen ein Knoten aus einer verketteten Liste. 110 00:05:12,170 --> 00:05:14,350 Also lassen Sie uns sagen, wir haben eine andere Funktion, 111 00:05:14,350 --> 00:05:18,080 ist das Finden eines Knotens wir löschen möchten und hat uns einen Zeiger auf Gewissheit angegebn 112 00:05:18,080 --> 00:05:19,710 der Knoten, die wir löschen möchten. 113 00:05:19,710 --> 00:05:22,360 Wir wissen nicht einmal sagen, die need-- Kopf ist immer noch global deklariert. 114 00:05:22,360 --> 00:05:23,590 Wir haben nicht den Kopf brauchen hier. 115 00:05:23,590 --> 00:05:26,830 All diese Funktion tut, wir haben fanden einen Zeiger auf den Knoten genau wir 116 00:05:26,830 --> 00:05:28,090 wollen loswerden. 117 00:05:28,090 --> 00:05:28,940 Lassen Sie es loswerden. 118 00:05:28,940 --> 00:05:31,859 Es ist viel einfacher, mit doppelt verketteten Listen. 119 00:05:31,859 --> 00:05:33,650 First-- es ist eigentlich nur ein paar Dinge. 120 00:05:33,650 --> 00:05:38,760 Wir müssen nur fix die umliegende Knoten 'Zeiger, so dass sie zu überspringen 121 00:05:38,760 --> 00:05:40,240 der Knoten wir wollen, um zu löschen. 122 00:05:40,240 --> 00:05:43,484 Und dann können wir diesen Knoten zu löschen. 123 00:05:43,484 --> 00:05:45,150 Also noch einmal, wir sind gerade dabei durch hier. 124 00:05:45,150 --> 00:05:49,625 Wir haben offenbar beschlossen, dass wir den Knoten X löschen möchten 125 00:05:49,625 --> 00:05:51,500 Und wieder, was ich Dabei hier-- vom way-- 126 00:05:51,500 --> 00:05:54,580 ist ein allgemeiner Fall für ein Knoten, der in der Mitte ist. 127 00:05:54,580 --> 00:05:56,547 Es gibt ein paar zusätzliche Einschränkungen, die Sie 128 00:05:56,547 --> 00:05:59,380 beachten müssen, wenn Sie das Löschen der Anfang der Liste 129 00:05:59,380 --> 00:06:01,040 oder ganz am Ende der Liste. 130 00:06:01,040 --> 00:06:03,730 Es gibt ein paar spezielle Grenzfälle mit dort behandeln. 131 00:06:03,730 --> 00:06:07,960 >> So funktioniert das zum Löschen jeder Knoten in der Mitte des list-- eine, 132 00:06:07,960 --> 00:06:11,550 ein berechtigtes Zeiger vorwärts und eine legitime Zeiger rückwärts, 133 00:06:11,550 --> 00:06:14,460 legitime Zurück und Weiter-Zeiger. 134 00:06:14,460 --> 00:06:16,530 Auch wenn Sie gerade arbeiten wobei die Enden Sie 135 00:06:16,530 --> 00:06:18,500 brauchen, um diejenigen zu behandeln etwas anders, 136 00:06:18,500 --> 00:06:19,570 und wir sind nicht zu gehen reden über das jetzt. 137 00:06:19,570 --> 00:06:21,319 Aber man kann wohl herauszufinden, was benötigt 138 00:06:21,319 --> 00:06:24,610 um nur durch die Beobachtung dieses Video durchgeführt werden. 139 00:06:24,610 --> 00:06:28,910 >> Also haben wir getrennt habe X. X ist der Knoten Wir wollen aus der Liste löschen. 140 00:06:28,910 --> 00:06:30,140 Was machen wir? 141 00:06:30,140 --> 00:06:32,800 Zuerst müssen wir neu anordnen die außerhalb von Zeigern. 142 00:06:32,800 --> 00:06:35,815 Wir müssen neu anordnen 9 ist neben über 13 überspringen 143 00:06:35,815 --> 00:06:38,030 und weisen auf die 10-- ist, was wir gerade getan haben. 144 00:06:38,030 --> 00:06:41,180 Und wir müssen auch neu anordnen 10 die vorherige 145 00:06:41,180 --> 00:06:44,610 bis zu 9 statt auf 13 Punkt. 146 00:06:44,610 --> 00:06:46,490 >> Also noch einmal, das war die Diagramm für den Anfang. 147 00:06:46,490 --> 00:06:47,730 Dies war unser Kette. 148 00:06:47,730 --> 00:06:51,027 Wir müssen über 13 überspringen, aber wir müssen auch zu bewahren 149 00:06:51,027 --> 00:06:52,110 die Integrität der Liste. 150 00:06:52,110 --> 00:06:54,680 Wir wollen nicht zu einem zu verlieren Informationen in beide Richtungen. 151 00:06:54,680 --> 00:06:59,620 Also müssen wir ordnen die Zeiger genau 152 00:06:59,620 --> 00:07:02,240 so dass wir die Kette nicht brechen überhaupt. 153 00:07:02,240 --> 00:07:05,710 >> So können wir sagen 9 Next-Zeiger Punkte an der gleichen Stelle 154 00:07:05,710 --> 00:07:08,040 dass dreizehn Next Zeiger verweist jetzt. 155 00:07:08,040 --> 00:07:10,331 Weil wir irgendwann gehen, um mehr als 13 überspringen zu wollen. 156 00:07:10,331 --> 00:07:13,750 Also überall dort, wo mit 13 Punkten weiter, Sie soll neun bis es stattdessen zeigen. 157 00:07:13,750 --> 00:07:15,200 So ist das also. 158 00:07:15,200 --> 00:07:20,370 Und dann, wo immer 13 Punkte zurück zu, was auch immer vor 13 kommt, 159 00:07:20,370 --> 00:07:24,800 wir wollen, dass 10 zu Punkt auf, dass anstelle von 13. 160 00:07:24,800 --> 00:07:29,290 Nun beachtet, wenn Sie folgen die Pfeile, können wir 13 fallen 161 00:07:29,290 --> 00:07:32,380 ohne wirklich zu verlieren, keine Informationen. 162 00:07:32,380 --> 00:07:36,002 Wir haben die Integrität der Liste gehalten wird, Bewegen sowohl vorwärts und rückwärts. 163 00:07:36,002 --> 00:07:38,210 Und dann können wir einfach so von reinigen Sie es oben ein wenig 164 00:07:38,210 --> 00:07:40,930 durch Ziehen der Liste zusammen. 165 00:07:40,930 --> 00:07:43,270 So neu arrangiert wir die Zeiger auf beiden Seiten. 166 00:07:43,270 --> 00:07:46,231 Und dann befreiten wir die X Knoten, 13 enthalten sind, 167 00:07:46,231 --> 00:07:47,480 und wir haben die Kette nicht brechen. 168 00:07:47,480 --> 00:07:50,980 Also haben wir gut. 169 00:07:50,980 --> 00:07:53,000 >> Abschließender Hinweis hier auf verkettete Listen. 170 00:07:53,000 --> 00:07:55,990 Also sowohl einzeln-und doppelt verketteten Listen, wie wir gesehen haben, 171 00:07:55,990 --> 00:07:58,959 Unterstützung wirklich effizient Insertion und Löschen von Elementen. 172 00:07:58,959 --> 00:08:00,750 Sie können ziemlich viel zu tun es in konstanter Zeit. 173 00:08:00,750 --> 00:08:03,333 Was haben wir zu tun, um zu löschen ein Element nur eine Sekunde vor? 174 00:08:03,333 --> 00:08:04,440 Wir zogen einen Zeiger. 175 00:08:04,440 --> 00:08:05,920 Wir zogen einen anderen Zeiger. 176 00:08:05,920 --> 00:08:07,915 Wir befreiten X-- dauerte drei Operationen. 177 00:08:07,915 --> 00:08:14,500 Es dauert immer drei Operationen zu löschen Sie diesen node--, um einen Knoten zu befreien. 178 00:08:14,500 --> 00:08:15,280 >> Wie können wir ein? 179 00:08:15,280 --> 00:08:17,280 Nun, wir sind einfach immer Heften auf Beginn 180 00:08:17,280 --> 00:08:19,400 wenn wir effizient Einfügen. 181 00:08:19,400 --> 00:08:21,964 Also müssen wir rearrange-- je nachdem, ob es 182 00:08:21,964 --> 00:08:24,380 eine einfach oder doppelt verknüpfte Liste, könnten wir zu drei tun müssen 183 00:08:24,380 --> 00:08:26,824 oder vier Operationen max. 184 00:08:26,824 --> 00:08:28,365 Aber noch einmal, es ist immer drei oder vier. 185 00:08:28,365 --> 00:08:30,531 Es spielt keine Rolle, wie viele Elemente sind in unserer Liste, 186 00:08:30,531 --> 00:08:33,549 es ist immer drei oder vier operations-- wie Löschen ist immer 187 00:08:33,549 --> 00:08:35,320 drei oder vier Operationen. 188 00:08:35,320 --> 00:08:36,919 Es ist konstante Zeit. 189 00:08:36,919 --> 00:08:38,169 Also das ist wirklich toll. 190 00:08:38,169 --> 00:08:40,620 >> Bei Arrays wurden wir tun so etwas wie Insertion Sort. 191 00:08:40,620 --> 00:08:44,739 Sie erinnern sich vielleicht, dass die Insertion Art ist keine Konstante Algorithmus. 192 00:08:44,739 --> 00:08:46,030 Es ist eigentlich ziemlich teuer. 193 00:08:46,030 --> 00:08:48,840 Also das ist viel besser für das Einfügen. 194 00:08:48,840 --> 00:08:51,840 Aber als ich in den genannten einfach verknüpften Liste Video, 195 00:08:51,840 --> 00:08:54,030 wir haben eine Kehrseite auch hier richtig gemacht? 196 00:08:54,030 --> 00:08:57,580 Wir haben die Fähigkeit, verlorene zufällig auf Elemente. 197 00:08:57,580 --> 00:09:02,310 Wir können nicht sagen, ich will Element Nummer vier oder Elementnummer 10 einer verketteten Liste 198 00:09:02,310 --> 00:09:04,990 So wie wir können, zu tun, dass mit einer Reihe 199 00:09:04,990 --> 00:09:08,630 oder wir können einfach direkt Index in Elements unser Angebot. 200 00:09:08,630 --> 00:09:10,930 >> Und so versuchen, ein zu finden Element einer verketteten list-- 201 00:09:10,930 --> 00:09:15,880 wenn Suche ist important-- kann nun die lineare Zeit. 202 00:09:15,880 --> 00:09:18,330 Da die Liste wird immer länger, es könnte eine zusätzliche Schritt zu machen 203 00:09:18,330 --> 00:09:22,644 für jedes einzelne Element in der Liste in um zu finden, was wir suchen. 204 00:09:22,644 --> 00:09:23,560 Also gibt es Kompromisse. 205 00:09:23,560 --> 00:09:25,780 Es ist ein bisschen wie ein Profi und con Element. 206 00:09:25,780 --> 00:09:29,110 >> Und doppelt verknüpfte Listen sind nicht letzten Art von Datenstruktur-Kombination 207 00:09:29,110 --> 00:09:32,840 dass wir darüber zu sprechen, wobei alle grundlegenden Gebäude 208 00:09:32,840 --> 00:09:34,865 Blöcke von C eine Zusammenstellung. 209 00:09:34,865 --> 00:09:37,900 Denn in der Tat können wir sogar besser als dies tun 210 00:09:37,900 --> 00:09:41,970 um eine Datenstruktur zu schaffen, dass Sie könnten durch zu suchen sein, 211 00:09:41,970 --> 00:09:43,360 in konstanter Zeit auch. 212 00:09:43,360 --> 00:09:46,080 Aber mehr dazu in einem anderen Video. 213 00:09:46,080 --> 00:09:47,150 >> Ich bin Doug Lloyd. 214 00:09:47,150 --> 00:09:49,050 Dies ist CS50. 215 00:09:49,050 --> 00:09:50,877