1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:05,120 [MUZYKA GRY] 3 00:00:05,120 --> 00:00:12,026 4 00:00:12,026 --> 00:00:12,900 GŁOŚNIK 1: W porządku. 5 00:00:12,900 --> 00:00:14,600 Każdy, witamy z powrotem do sekcji. 6 00:00:14,600 --> 00:00:18,660 Mam nadzieję, że wszyscy są z powodzeniem odzyskane z quizu 7 00:00:18,660 --> 00:00:19,510 z ostatniego tygodnia. 8 00:00:19,510 --> 00:00:22,564 Wiem, że to trochę szalony czasami. 9 00:00:22,564 --> 00:00:25,230 Jak mówiłem wcześniej, jeśli jesteś w odchyleniu standardowym 10 00:00:25,230 --> 00:00:28,188 tak naprawdę nie martw się o to, zwłaszcza, do mniej wygodne sekcji. 11 00:00:28,188 --> 00:00:30,230 To o tym, gdzie powinieneś być. 12 00:00:30,230 --> 00:00:32,850 >> Jeśli tak wielka, to niesamowite. 13 00:00:32,850 --> 00:00:33,650 Kudos do Ciebie. 14 00:00:33,650 --> 00:00:36,149 A jeśli czujesz się jak trzeba trochę więcej pomocy, proszę 15 00:00:36,149 --> 00:00:38,140 prosimy, aby osiągnąć z któregokolwiek z TF. 16 00:00:38,140 --> 00:00:40,030 Wszyscy jesteśmy tutaj, aby pomóc. 17 00:00:40,030 --> 00:00:40,960 >> Dlatego uczymy. 18 00:00:40,960 --> 00:00:44,550 Dlatego jestem tutaj, w każdy poniedziałek dla Ciebie chłopaki i w biurze godziny w czwartki. 19 00:00:44,550 --> 00:00:48,130 Więc prosimy o poinformowanie mnie jeśli martwisz się o nic 20 00:00:48,130 --> 00:00:52,450 lub czy jest coś na quiz że chcesz naprawdę chcesz rozwiązać. 21 00:00:52,450 --> 00:00:56,940 >> Więc dzisiaj jest porządek o strukturach danych. 22 00:00:56,940 --> 00:01:01,520 Niektóre z nich są po prostu będzie tylko aby Państwo zapoznali się z nich. 23 00:01:01,520 --> 00:01:04,870 Nie możesz kiedykolwiek realizacji je w tej klasie. 24 00:01:04,870 --> 00:01:08,690 Część z nich będzie, jak do ortografii Pset. 25 00:01:08,690 --> 00:01:11,380 >> Będziesz miał wybór między tabelami z cebulą i prób. 26 00:01:11,380 --> 00:01:13,680 Tak więc będziemy na pewno będzie nad tymi. 27 00:01:13,680 --> 00:01:18,690 To będzie na pewno więcej od rodzaju odcinka wysokim poziomie obecnie, chociaż 28 00:01:18,690 --> 00:01:22,630 ponieważ istnieje wiele z nich, a jeśli udaliśmy się w szczegóły implementacji 29 00:01:22,630 --> 00:01:26,490 na wszystkie z nich, nie będzie nawet dotrzeć powiązanych list 30 00:01:26,490 --> 00:01:28,520 i może trochę tabel hash. 31 00:01:28,520 --> 00:01:31,200 >> Tak więc pokrywa się ze mną. 32 00:01:31,200 --> 00:01:33,530 Nie będziemy robić Kodowanie to tak dużo czasu. 33 00:01:33,530 --> 00:01:36,870 Jeśli masz jakieś pytania na ten temat lub chcesz zobaczyć, że realizowane 34 00:01:36,870 --> 00:01:39,260 lub spróbować samemu, Zdecydowanie polecam 35 00:01:39,260 --> 00:01:44,250 będzie study.cs50.net, które ma przykłady wszystkich. 36 00:01:44,250 --> 00:01:46,400 To będzie mieć moje PowerPoints z pouczeniem, że 37 00:01:46,400 --> 00:01:50,860 mają tendencję do używania, a także odrobiny programowania ćwiczenia, szczególnie na rzeczy 38 00:01:50,860 --> 00:01:55,250 jak i binarnych powiązanych list drzewa stosy i kije. 39 00:01:55,250 --> 00:01:59,590 Więc trochę więcej wysoki poziom, który może być ładne dla was. 40 00:01:59,590 --> 00:02:01,320 >> Więc z tym, będziemy zacząć. 41 00:02:01,320 --> 00:02:03,060 A także, yes-- quizy. 42 00:02:03,060 --> 00:02:06,550 Myślę, że większość z was, którzy są w moja sekcja ma swoje quizy, 43 00:02:06,550 --> 00:02:12,060 ale ktoś przychodzi lub jakiegoś powodu nie, oni są tutaj z przodu. 44 00:02:12,060 --> 00:02:12,740 >> Tak połączone list. 45 00:02:12,740 --> 00:02:15,650 Wiem, że tego rodzaju wykracza do tyłu przed quizu. 46 00:02:15,650 --> 00:02:17,940 To było tydzień przed że dowiedzieliśmy się o tym. 47 00:02:17,940 --> 00:02:21,040 Ale w tym przypadku, będziemy po prostu iść trochę bardziej w głębi. 48 00:02:21,040 --> 00:02:25,900 >> Dlaczego więc możemy wybrać powiązane listę ponad tablicy? 49 00:02:25,900 --> 00:02:27,130 Co je wyróżnia? 50 00:02:27,130 --> 00:02:27,630 Tak? 51 00:02:27,630 --> 00:02:30,464 >> Publiczność: Możesz poszerzyć związane listy w porównaniu stałej wielkości tablicy w. 52 00:02:30,464 --> 00:02:31,171 GŁOŚNIK 1: Prawo. 53 00:02:31,171 --> 00:02:33,970 Tablica ma stały rozmiar, podczas gdy powiązane lista ma zmienną wielkość. 54 00:02:33,970 --> 00:02:36,970 Tak więc, jeśli nie wiemy, w jaki sposób bardzo chcemy przechowywać, 55 00:02:36,970 --> 00:02:39,880 powiązane lista daje nam wielki sposobem, aby to zrobić, ponieważ możemy tylko 56 00:02:39,880 --> 00:02:43,730 dodać na inny węzeł i dodać na inny węzeł i dodać na innym węźle. 57 00:02:43,730 --> 00:02:45,750 Ale co może być kompromis? 58 00:02:45,750 --> 00:02:49,521 Czy ktoś pamięta ten kompromis między tablicami i powiązanych list? 59 00:02:49,521 --> 00:02:50,020 MMHMM? 60 00:02:50,020 --> 00:02:51,460 >> PUBLICZNOŚCI: Musisz przejść przez całą drogę 61 00:02:51,460 --> 00:02:53,738 dzięki połączonej listy znaleźć element na liście. 62 00:02:53,738 --> 00:02:55,570 W tablicy, można tylko znaleźć element. 63 00:02:55,570 --> 00:02:56,278 >> GŁOŚNIK 1: Prawo. 64 00:02:56,278 --> 00:02:57,120 Więc z arrays-- 65 00:02:57,120 --> 00:02:58,500 >> PUBLICZNOŚCI: [niesłyszalne]. 66 00:02:58,500 --> 00:03:01,090 >> GŁOŚNIK 1: Z tablic, mamy co nazywa dostępie swobodnym. 67 00:03:01,090 --> 00:03:04,820 Oznacza to, że jeśli chcemy, co jest kiedykolwiek piąty punkt z listy 68 00:03:04,820 --> 00:03:07,230 lub piąty punkt naszego tablica, możemy po prostu chwyć ją. 69 00:03:07,230 --> 00:03:10,440 Jeśli jest to związane lista mamy iterację, prawda? 70 00:03:10,440 --> 00:03:14,020 Więc dostęp element w tablica jest stała czasowa, 71 00:03:14,020 --> 00:03:19,530 natomiast z listy związane byłoby najprawdopodobniej dlatego, że być może w czasie liniowym 72 00:03:19,530 --> 00:03:21,370 Nasz elementem jest cały sposób, na końcu. 73 00:03:21,370 --> 00:03:23,446 Musimy przeszukać wszystko. 74 00:03:23,446 --> 00:03:25,320 Tak więc wszystkie te dane Jedziemy struktury 75 00:03:25,320 --> 00:03:29,330 należy poświęcić trochę więcej czasu, jakie są plusy i negatywy. 76 00:03:29,330 --> 00:03:31,480 Kiedy możemy chcieć użyć jednej nad innymi? 77 00:03:31,480 --> 00:03:34,970 I to jest rodzaj większe rzeczy zabrać. 78 00:03:34,970 --> 00:03:40,140 >> Tak więc mamy tutaj Definicja węzła. 79 00:03:40,140 --> 00:03:43,040 To tak, jakby jeden z elementów naszej listy, prawda? 80 00:03:43,040 --> 00:03:46,180 Więc wszyscy jesteśmy zaznajomieni z naszych strukturach typedef, 81 00:03:46,180 --> 00:03:47,980 którą przeszedł w przeglądzie ostatni raz. 82 00:03:47,980 --> 00:03:53,180 To było w zasadzie tylko tworzenie inny typ danych, które możemy wykorzystać. 83 00:03:53,180 --> 00:03:57,930 >> I w tym przypadku, to jakiś węzeł które odbędzie się w pewną liczbę całkowitą. 84 00:03:57,930 --> 00:04:00,210 A potem co druga część tutaj? 85 00:04:00,210 --> 00:04:03,192 86 00:04:03,192 --> 00:04:05,677 Każdy, kto? 87 00:04:05,677 --> 00:04:06,680 >> PUBLICZNOŚCI: [niesłyszalne]. 88 00:04:06,680 --> 00:04:07,020 >> 1 głośnik: Tak. 89 00:04:07,020 --> 00:04:08,400 Jest to wskaźnik do następnego węzła. 90 00:04:08,400 --> 00:04:12,610 Tak to powinno rzeczywiście być tutaj. 91 00:04:12,610 --> 00:04:18,790 Jest to wskaźnik typu węzeł do następnej rzeczy. 92 00:04:18,790 --> 00:04:22,410 I to jest to, co oni obejmuje nasz węzeł. 93 00:04:22,410 --> 00:04:24,060 Fajne. 94 00:04:24,060 --> 00:04:29,390 >> W porządku, więc w poszukiwaniu, jak my tylko, że przed strony, jeśli jesteś 95 00:04:29,390 --> 00:04:31,840 zamiar przeszukać, trzeba rzeczywiście iteracji 96 00:04:31,840 --> 00:04:33,660 za pośrednictwem połączonej listy. 97 00:04:33,660 --> 00:04:38,530 Więc jeśli szukamy liczby 9, chcielibyśmy rozpocząć na naszej głowie 98 00:04:38,530 --> 00:04:41,520 i wskazuje nam na początku z naszej listy, prawda? 99 00:04:41,520 --> 00:04:44,600 I możemy powiedzieć, OK, robi to węzeł zawierać numer 9? 100 00:04:44,600 --> 00:04:45,690 Nie? 101 00:04:45,690 --> 00:04:47,500 >> Wszystko w porządku, przejdź do następnego. 102 00:04:47,500 --> 00:04:48,312 Śledź go. 103 00:04:48,312 --> 00:04:49,520 Czy zawiera numer 9? 104 00:04:49,520 --> 00:04:50,570 Nie. 105 00:04:50,570 --> 00:04:51,550 Śledź następny. 106 00:04:51,550 --> 00:04:55,490 >> Musimy więc rzeczywiście iteracji za pośrednictwem naszej listy. 107 00:04:55,490 --> 00:05:00,070 Nie możemy po prostu przejść bezpośrednio do miejsca, gdzie 9 jest. 108 00:05:00,070 --> 00:05:05,860 A jeśli faceci rzeczywiście chcesz zobaczyć jakąś pseudo-kodu tam w górę. 109 00:05:05,860 --> 00:05:10,420 Mamy tu jakąś funkcję wyszukiwania że bierze in-- co trwa w? 110 00:05:10,420 --> 00:05:13,110 111 00:05:13,110 --> 00:05:14,320 Co o tym sądzisz? 112 00:05:14,320 --> 00:05:15,960 Tak łatwe. 113 00:05:15,960 --> 00:05:17,784 Co to jest? 114 00:05:17,784 --> 00:05:18,700 PUBLICZNOŚCI: [niesłyszalne]. 115 00:05:18,700 --> 00:05:20,366 GŁOŚNIK 1: liczba szukamy. 116 00:05:20,366 --> 00:05:20,980 Prawda? 117 00:05:20,980 --> 00:05:22,875 A co będzie to odpowiadać? 118 00:05:22,875 --> 00:05:25,020 Jest to wskaźnik do? 119 00:05:25,020 --> 00:05:26,000 >> Publiczność: węzeł. 120 00:05:26,000 --> 00:05:28,980 >> GŁOŚNIK 1: węzeł do listy że patrzymy, prawda? 121 00:05:28,980 --> 00:05:33,700 Mamy więc niektóre węzły są wskaźnikiem tutaj. 122 00:05:33,700 --> 00:05:37,240 Jest to punkt, który zamierza faktycznie iterację naszej liście. 123 00:05:37,240 --> 00:05:39,630 Stawiamy to równa listy dlatego, że jest po prostu 124 00:05:39,630 --> 00:05:44,380 Ustawienie jest równa początek naszej listy. 125 00:05:44,380 --> 00:05:50,660 >> I choć nie jest to NULL, natomiast wciąż mamy rzeczy w naszej liście, 126 00:05:50,660 --> 00:05:55,580 sprawdzić, czy, że węzeł ma liczba szukamy. 127 00:05:55,580 --> 00:05:57,740 Return true. 128 00:05:57,740 --> 00:06:01,070 W przeciwnym razie, należy zaktualizować go, prawda? 129 00:06:01,070 --> 00:06:04,870 >> Jeśli to jest NULL, zakończymy pętli while i return false 130 00:06:04,870 --> 00:06:08,340 bo to oznacza, że ​​nie znalazłem. 131 00:06:08,340 --> 00:06:11,048 Czy wszyscy się, jak to działa? 132 00:06:11,048 --> 00:06:11,548 OK. 133 00:06:11,548 --> 00:06:14,940 134 00:06:14,940 --> 00:06:20,260 >> Więc z wstawiania, to trzy różne sposoby. 135 00:06:20,260 --> 00:06:25,250 Możesz poprzedzić można dołączyć i można wstawić do dobrane. 136 00:06:25,250 --> 00:06:28,215 W tym przypadku mamy zamiar zrobić prepend. 137 00:06:28,215 --> 00:06:33,380 Czy ktoś wie jak te, trzy przypadki mogą się różnić? 138 00:06:33,380 --> 00:06:36,920 >> Więc poprzedzić oznacza, że ​​można umieścić to z przodu listy. 139 00:06:36,920 --> 00:06:39,770 Tak, oznaczałoby to, że bez względu na co węzeł jest, bez względu na 140 00:06:39,770 --> 00:06:43,160 co wartość, będziesz umieścić go tutaj z przodu, OK? 141 00:06:43,160 --> 00:06:45,160 To będzie pierwszy element listy. 142 00:06:45,160 --> 00:06:49,510 >> Jeśli go dodać, to będzie aby przejść do tyłu listy. 143 00:06:49,510 --> 00:06:54,010 I wstawić do dobrane oznacza, że ​​jesteś zamiar umieścić w miejscu, w rzeczywistości 144 00:06:54,010 --> 00:06:57,700 gdzie utrzymuje powiązana lista posortowana. 145 00:06:57,700 --> 00:07:00,810 Ponownie, jak korzystać tych, a podczas korzystania z 146 00:07:00,810 --> 00:07:02,530 im będzie się różnić w zależności od przypadku. 147 00:07:02,530 --> 00:07:05,834 148 00:07:05,834 --> 00:07:07,750 Jeśli tak nie jest konieczne być sortowane, poprzedzić ma tendencję 149 00:07:07,750 --> 00:07:10,460 za co większość ludzi używać, ponieważ nie 150 00:07:10,460 --> 00:07:15,680 przejść przez całą listę znaleźć koniec dodać go, prawda? 151 00:07:15,680 --> 00:07:17,720 Możesz po prostu trzymać go tuż. 152 00:07:17,720 --> 00:07:21,930 >> Więc przechodzimy wstawiania 1 teraz. 153 00:07:21,930 --> 00:07:26,360 Więc jedna rzecz, że będę Bardzo polecam tego Pset 154 00:07:26,360 --> 00:07:29,820 jest zwrócenie rzeczy, jak zawsze. 155 00:07:29,820 --> 00:07:35,130 To bardzo ważne, aby uaktualnić Twoje wskaźniki w odpowiedniej kolejności 156 00:07:35,130 --> 00:07:38,620 bo jeśli ich aktualizacji nieco z celem, 157 00:07:38,620 --> 00:07:42,210 masz zamiar skończyć utraty części listy. 158 00:07:42,210 --> 00:07:49,680 >> Tak na przykład w tym przypadku mamy mówi tylko głowę do punktu 1. 159 00:07:49,680 --> 00:07:56,070 Jeśli po prostu zrobić bez zapisywania to jedno, 160 00:07:56,070 --> 00:07:58,570 nie mamy pojęcia, co 1 powinien wskazywać teraz 161 00:07:58,570 --> 00:08:02,490 bo straciliśmy co Szef wskazał. 162 00:08:02,490 --> 00:08:05,530 Więc jedna rzecz do zapamiętania kiedy robisz prepend 163 00:08:05,530 --> 00:08:09,630 jest, aby zapisać to, co punktów, głowa do pierwszego 164 00:08:09,630 --> 00:08:15,210 następnie ich przekazania, a następnie zaktualizować co twój nowy węzeł powinien wskazywać. 165 00:08:15,210 --> 00:08:20,870 166 00:08:20,870 --> 00:08:22,560 W tym przypadku, jest to jeden ze sposobów, aby to zrobić. 167 00:08:22,560 --> 00:08:25,440 >> Jeśli więc zrobiłem to w ten sposób gdzie po prostu przeniesiony głowę, 168 00:08:25,440 --> 00:08:30,320 tracimy zasadzie NASZEGO Cała lista, prawda? 169 00:08:30,320 --> 00:08:38,000 Jednym ze sposobów, aby to zrobić jest mieć jeden punkt do obok, a następnie mają głowy do 1 punktu. 170 00:08:38,000 --> 00:08:42,650 Lub możesz zrobić coś w rodzaju czasowego składowania, które mówiłem o. 171 00:08:42,650 --> 00:08:45,670 >> Ale przesunięcia your wskaźniki w odpowiedniej kolejności 172 00:08:45,670 --> 00:08:48,750 będzie bardzo, bardzo ważne dla tego Pset. 173 00:08:48,750 --> 00:08:53,140 W przeciwnym razie będziemy mieć hash stół lub spróbować, że to tylko będzie 174 00:08:53,140 --> 00:08:56,014 tylko część z tych słów, że chcą, a następnie you're-- MMHMM? 175 00:08:56,014 --> 00:08:58,930 Publiczność: Co było tymczasowe rzeczą przechowywania ty mówisz? 176 00:08:58,930 --> 00:09:00,305 GŁOŚNIK 1: czasowego składowania. 177 00:09:00,305 --> 00:09:02,760 Więc w zasadzie inny sposób można to zrobić 178 00:09:02,760 --> 00:09:07,650 jest przechowywać głowę czymś, jak przechowywać zmienną tymczasową. 179 00:09:07,650 --> 00:09:11,250 Przypisać go na 1 i następnie zaktualizować jeden punkt 180 00:09:11,250 --> 00:09:13,830 do tego, co szef używane do wskazać. 181 00:09:13,830 --> 00:09:16,920 W ten sposób jest oczywiście bardziej elegancki, bo Ciebie 182 00:09:16,920 --> 00:09:20,770 nie potrzebują wartość czasową, ale tylko oferując inny sposób, aby to zrobić. 183 00:09:20,770 --> 00:09:23,999 184 00:09:23,999 --> 00:09:25,790 I rzeczywiście mają jakiś kod do tego. 185 00:09:25,790 --> 00:09:28,080 Więc dla połączonej listy, możemy rzeczywiście mają jakiś kod. 186 00:09:28,080 --> 00:09:31,930 Wstaw tu tak, to jest poprzedzenie. 187 00:09:31,930 --> 00:09:34,290 Więc to wchodzi to w głowie. 188 00:09:34,290 --> 00:09:38,820 >> Tak więc pierwszą rzeczą, musisz utworzyć nowy węzeł, oczywiście, 189 00:09:38,820 --> 00:09:40,790 i sprawdzić, NULL. 190 00:09:40,790 --> 00:09:43,250 Zawsze dobre. 191 00:09:43,250 --> 00:09:47,840 A następnie należy przypisać wartości. 192 00:09:47,840 --> 00:09:51,260 Jeśli chcesz utworzyć nowy węzeł, ty nie wiem co to jest wskazując na następny, 193 00:09:51,260 --> 00:09:54,560 więc chcesz zainicjować go na NULL. 194 00:09:54,560 --> 00:09:58,760 Jeśli to nie kończy się wskazując na coś innego, to dostaje przeniesiony i jest w porządku. 195 00:09:58,760 --> 00:10:00,740 Jeśli jest to pierwsza rzecz, na liście, to musi 196 00:10:00,740 --> 00:10:04,270 zwrócić NULL, ponieważ to koniec listy. 197 00:10:04,270 --> 00:10:12,410 >> Tak więc, aby go wstawić, widzimy tu przypisujemy następną wartość naszego węzła 198 00:10:12,410 --> 00:10:17,380 za co głowa, czyli to, co mieliśmy tutaj. 199 00:10:17,380 --> 00:10:19,930 To, co właśnie zrobił. 200 00:10:19,930 --> 00:10:25,820 A potem mamy przypisując głowę do punktu do naszego nowego węzła, bo pamiętam, 201 00:10:25,820 --> 00:10:31,090 Jest jakiś nowy wskaźnik do węzła, i to jest dokładnie to, co jest głowa. 202 00:10:31,090 --> 00:10:34,370 Dlatego właśnie my strzałki mają ten akcesor. 203 00:10:34,370 --> 00:10:37,030 204 00:10:37,030 --> 00:10:37,530 Cool? 205 00:10:37,530 --> 00:10:38,130 MMHMM? 206 00:10:38,130 --> 00:10:41,100 >> Publiczność: Czy mamy do zainicjować Następny NULL pierwszy, 207 00:10:41,100 --> 00:10:44,240 lub możemy po prostu zainicjować go do głowy? 208 00:10:44,240 --> 00:10:48,210 >> GŁOŚNIK 1: Nowa obok musi być NULL rozpocząć 209 00:10:48,210 --> 00:10:53,760 bo nie wiem gdzie to będzie. 210 00:10:53,760 --> 00:10:56,100 Ponadto, jest to rodzaj podobnie jak paradygmat. 211 00:10:56,100 --> 00:10:59,900 Ustawić go równa NULL tylko do się, że wszystkie zasady są objęte 212 00:10:59,900 --> 00:11:04,070 zanim zrobisz tak, że żadnej zmiany przeznaczenia jesteś zawsze gwarantuje, że będzie 213 00:11:04,070 --> 00:11:08,880 być skierowane do określonej wartości w porównaniu do wartości jak śmieci. 214 00:11:08,880 --> 00:11:12,210 Ponieważ, tak, możemy przypisać Następny automatycznie, 215 00:11:12,210 --> 00:11:15,420 ale to bardziej jak dobra praktyka, aby go zainicjować 216 00:11:15,420 --> 00:11:19,270 w ten sposób, a następnie przypisać. 217 00:11:19,270 --> 00:11:23,420 >> OK, więc teraz podwójnie związane list. 218 00:11:23,420 --> 00:11:24,601 Co mamy na myśli? 219 00:11:24,601 --> 00:11:26,350 Czym różni się podwójnie związane list? 220 00:11:26,350 --> 00:11:30,750 221 00:11:30,750 --> 00:11:34,300 >> Tak więc w naszych połączonych list, możemy poruszać się tylko w jednym kierunku, tak? 222 00:11:34,300 --> 00:11:35,270 Mamy tylko obok. 223 00:11:35,270 --> 00:11:36,760 Możemy tylko iść do przodu. 224 00:11:36,760 --> 00:11:40,300 >> Z podwójnie połączonej listy, możemy również przejść do tyłu. 225 00:11:40,300 --> 00:11:44,810 Mamy więc nie tylko numer, który chcemy zapisać, 226 00:11:44,810 --> 00:11:50,110 mamy gdzie wskazuje na następny i gdzie po prostu wziął. 227 00:11:50,110 --> 00:11:52,865 Więc to pozwala niektóre lepsze przechodzenie. 228 00:11:52,865 --> 00:11:56,620 229 00:11:56,620 --> 00:12:01,240 >> Więc podwójnie związane węzły, bardzo podobne, prawda? 230 00:12:01,240 --> 00:12:05,000 Jedyną różnicą jest to teraz mieć następny i poprzedni. 231 00:12:05,000 --> 00:12:06,235 To jedyna różnica. 232 00:12:06,235 --> 00:12:09,570 233 00:12:09,570 --> 00:12:14,790 >> Więc gdybyśmy poprzedzić lub append-- mamy nie mają na to żadnego kodu do here-- 234 00:12:14,790 --> 00:12:17,830 ale jeśli było spróbować włożyć, ważne 235 00:12:17,830 --> 00:12:19,980 jest konieczne, aby się, że jesteś przypisywanie 236 00:12:19,980 --> 00:12:23,360 zarówno poprzedniego i Twoich Następny wskaźnik prawidłowo. 237 00:12:23,360 --> 00:12:29,010 Tak więc w tym przypadku będzie nie tylko zainicjować następne, 238 00:12:29,010 --> 00:12:31,820 zainicjować poprzednia. 239 00:12:31,820 --> 00:12:36,960 Jeśli jesteśmy na czele listy, możemy nie tylko aby głowa równa nowa, 240 00:12:36,960 --> 00:12:41,750 ale nasza nowa poprzednia powinna wskazują na głowie, prawda? 241 00:12:41,750 --> 00:12:43,380 >> To jedyna różnica. 242 00:12:43,380 --> 00:12:47,200 A jeśli chcesz więcej praktyki z tych z list, z powiązanych wkładania, 243 00:12:47,200 --> 00:12:49,900 z usunięciem, z wkładką w liście z bukietem, 244 00:12:49,900 --> 00:12:52,670 proszę sprawdzić study.cs50.net. 245 00:12:52,670 --> 00:12:54,870 Istnieje kilka wielkich ćwiczeń. 246 00:12:54,870 --> 00:12:55,870 Gorąco polecam je. 247 00:12:55,870 --> 00:12:59,210 Szkoda, że ​​nie miał czasu, aby przejść przez nich ale jest wiele struktur danych 248 00:12:59,210 --> 00:13:01,530 do przejść. 249 00:13:01,530 --> 00:13:02,650 >> OK, więc tabele mieszania. 250 00:13:02,650 --> 00:13:07,070 Jest to prawdopodobnie najbardziej przydatne nieco za Pset 251 00:13:07,070 --> 00:13:11,090 tutaj, bo masz zamiar być realizacji jednego z nich, lub spróbować. 252 00:13:11,090 --> 00:13:12,200 Bardzo lubię tabel mieszania. 253 00:13:12,200 --> 00:13:13,110 Są bardzo fajne. 254 00:13:13,110 --> 00:13:17,080 >> Więc w zasadzie to, co dzieje tabeli mieszania 255 00:13:17,080 --> 00:13:22,050 jest wtedy, gdy naprawdę potrzebują szybkiego wstawianie, usuwanie i wyszukiwanie. 256 00:13:22,050 --> 00:13:25,010 To są rzeczy, które jesteśmy priorytetów w tabeli mieszania. 257 00:13:25,010 --> 00:13:29,500 Mogą one uzyskać bardzo duże, ale jak zobaczymy z prób, 258 00:13:29,500 --> 00:13:33,040 są rzeczy, które są znacznie większe. 259 00:13:33,040 --> 00:13:38,330 >> Ale w zasadzie, wszystkie hash Stół jest funkcja skrótu 260 00:13:38,330 --> 00:13:47,215 które mówi, że aby umieścić każde wiadro swoich danych, każdego z elementów. 261 00:13:47,215 --> 00:13:51,140 Prosty sposób myśleć o tabeli mieszania jest to, że to tylko wiadra rzeczy, 262 00:13:51,140 --> 00:13:51,770 prawda? 263 00:13:51,770 --> 00:13:59,720 Więc jeśli są rzeczy, przez sortowanie jak pierwszej litery ich nazwy, 264 00:13:59,720 --> 00:14:01,820 to trochę jak tabeli mieszania. 265 00:14:01,820 --> 00:14:06,180 >> Więc gdybym grupy wy jest na grupy, kto zaczyna się nazywa 266 00:14:06,180 --> 00:14:11,670 z tutaj, lub kto ma urodziny w styczniu, lutym, marcu, 267 00:14:11,670 --> 00:14:15,220 cokolwiek, to skutecznie tworzenia tabeli mieszania. 268 00:14:15,220 --> 00:14:18,120 To jest po prostu tworzenie wiadra, że można sortować elementy w 269 00:14:18,120 --> 00:14:19,520 tak, że można je znaleźć łatwiej. 270 00:14:19,520 --> 00:14:22,300 Więc ten sposób, gdy trzeba znaleźć jeden z was, 271 00:14:22,300 --> 00:14:24,680 Nie muszę szukać przez każdego z nazwami. 272 00:14:24,680 --> 00:14:29,490 Mogę być jak, och, wiem, że Danielle urodziny in-- 273 00:14:29,490 --> 00:14:30,240 Publiczność: --April. 274 00:14:30,240 --> 00:14:30,948 GŁOŚNIK 1: Kwiecień. 275 00:14:30,948 --> 00:14:33,120 Więc patrzę w moim kwietnia wiadro, a przy odrobinie szczęścia, 276 00:14:33,120 --> 00:14:38,270 ona będzie tylko jeden tam i mój czas był stały w tym sensie, 277 00:14:38,270 --> 00:14:41,230 natomiast jeśli mam szukać przez całą masę ludzi, 278 00:14:41,230 --> 00:14:43,090 to będzie znacznie dłużej. 279 00:14:43,090 --> 00:14:45,830 Stoły są tak naprawdę tylko hash wiadra. 280 00:14:45,830 --> 00:14:48,630 Łatwy sposób, aby myśleć o nich. 281 00:14:48,630 --> 00:14:52,930 >> Więc bardzo ważne rzeczą tabeli mieszania jest funkcja skrótu. 282 00:14:52,930 --> 00:14:58,140 Więc rzeczy, po prostu mówił o, jak Twoja pierwsza litera twojego imienia 283 00:14:58,140 --> 00:15:01,450 lub twój miesiącu urodziny, są to pomysły, które 284 00:15:01,450 --> 00:15:03,070 bardzo korelują z funkcji skrótu. 285 00:15:03,070 --> 00:15:08,900 To tylko sposób na podejmowaniu decyzji, które wiadro jesteś elementem idzie do, OK? 286 00:15:08,900 --> 00:15:14,850 Więc dla tego Pset można patrzeć prawie każda funkcja skrótu chcesz. 287 00:15:14,850 --> 00:15:16,030 >> Nie muszą być własne. 288 00:15:16,030 --> 00:15:21,140 Istnieje kilka naprawdę fajne te się tam, że nie wszystkie rodzaje szalony matematyki. 289 00:15:21,140 --> 00:15:25,170 A jeśli chcesz, aby Państwa sprawdzania pisowni super szybki, 290 00:15:25,170 --> 00:15:27,620 Zdecydowanie zajrzeć do jednego z nich. 291 00:15:27,620 --> 00:15:32,390 >> Ale są też najprostsze, jak obliczeniowych 292 00:15:32,390 --> 00:15:39,010 Suma słowy, jak każda litera ma swój numer. 293 00:15:39,010 --> 00:15:39,940 Obliczyć sumę. 294 00:15:39,940 --> 00:15:42,230 Który określa wiadro. 295 00:15:42,230 --> 00:15:45,430 Mają również łatwe te, które są jak wszystko jest tutaj, 296 00:15:45,430 --> 00:15:47,050 wszystkie B jest tutaj. 297 00:15:47,050 --> 00:15:48,920 Każdy z tych. 298 00:15:48,920 --> 00:15:55,770 >> Zasadniczo, to po prostu mówi, które indeks tablicy twój element powinien wchodzić. 299 00:15:55,770 --> 00:15:58,690 Tylko decydując bucket-- to wszystko jest funkcja skrótu jest. 300 00:15:58,690 --> 00:16:04,180 Więc tutaj mamy przykład, który jest tylko pierwsza litera napisu 301 00:16:04,180 --> 00:16:05,900 że właśnie chodzi. 302 00:16:05,900 --> 00:16:11,900 >> Więc masz jakiś skrót, który jest po prostu Pierwsza litera twojego smyczkowy minus A, 303 00:16:11,900 --> 00:16:16,090 które daje pewne liczba z zakresu od 0 do 25. 304 00:16:16,090 --> 00:16:20,790 A to, co chcesz zrobić, to upewnij się, że jest to 305 00:16:20,790 --> 00:16:24,110 wielkość swojej hash table-- ile wiader istnieją. 306 00:16:24,110 --> 00:16:25,860 Wiele z nich Funkcje mieszania, są one 307 00:16:25,860 --> 00:16:31,630 będzie powrót wartości, które mogłoby znacznie powyżej liczby wiader 308 00:16:31,630 --> 00:16:33,610 że rzeczywiście mają w tabeli mieszania, 309 00:16:33,610 --> 00:16:37,240 tak trzeba zrobić pewny i mod ci. 310 00:16:37,240 --> 00:16:42,190 W przeciwnym razie, to będzie powiedzieć, oh, powinno być w wiaderku 5000 311 00:16:42,190 --> 00:16:46,040 ale masz tylko 30 Wiadra w swojej tabeli mieszania. 312 00:16:46,040 --> 00:16:49,360 Oczywiście, wszyscy wiemy, że to będzie prowadzić do pewnych szalonych błędów. 313 00:16:49,360 --> 00:16:52,870 Więc upewnij się, że przez mod Wielkość tabeli mieszania. 314 00:16:52,870 --> 00:16:58,430 315 00:16:58,430 --> 00:16:58,930 Fajne. 316 00:16:58,930 --> 00:17:00,506 Więc kolizji. 317 00:17:00,506 --> 00:17:02,620 Czy każdy dobry do tej pory? 318 00:17:02,620 --> 00:17:03,120 MMHMM? 319 00:17:03,120 --> 00:17:05,900 >> Publiczność: dlaczego to powrót taki ogromny wartość? 320 00:17:05,900 --> 00:17:09,210 >> SPEAKER 1: W zależności od wykorzystywanego algorytmu że funkcja skrótu używa. 321 00:17:09,210 --> 00:17:12,270 Niektóre z nich zrobi szalony mnożenie. 322 00:17:12,270 --> 00:17:16,270 I to wszystko o uzyskanie nawet dystrybucji, 323 00:17:16,270 --> 00:17:18,490 więc zrobić kilka naprawdę szalone rzeczy czasami. 324 00:17:18,490 --> 00:17:20,960 To wszystko. 325 00:17:20,960 --> 00:17:22,140 Coś jeszcze? 326 00:17:22,140 --> 00:17:22,829 OK. 327 00:17:22,829 --> 00:17:24,480 >> Więc kolizji. 328 00:17:24,480 --> 00:17:29,270 Zasadniczo, jak powiedziałem wcześniej, w najlepszym przypadku, 329 00:17:29,270 --> 00:17:32,040 każdy wiadro patrzę w to będzie mieć jedno, 330 00:17:32,040 --> 00:17:34,160 więc nie muszę patrzeć na wszystko, prawda? 331 00:17:34,160 --> 00:17:37,040 I czy wiesz, że tam jest i to Nie, i to jest to, czego naprawdę chcą. 332 00:17:37,040 --> 00:17:43,960 Ale jeśli mamy dziesiątki tysięcy punkty danych i mniej niż tego numeru 333 00:17:43,960 --> 00:17:48,700 wiader, będziemy mieć gdzie w końcu coś kolizji 334 00:17:48,700 --> 00:17:54,210 będzie miał do końca się w wiadro, że ma już elementu. 335 00:17:54,210 --> 00:17:57,390 >> Więc pytanie, co robimy w tej sprawie? 336 00:17:57,390 --> 00:17:58,480 Co robimy? 337 00:17:58,480 --> 00:17:59,300 Mamy już coś tam? 338 00:17:59,300 --> 00:18:00,060 Czy po prostu ją wyrzucić? 339 00:18:00,060 --> 00:18:00,700 >> Nie. 340 00:18:00,700 --> 00:18:01,980 Musimy mieć obu. 341 00:18:01,980 --> 00:18:06,400 Tak więc sposób, że zazwyczaj zrobić to co? 342 00:18:06,400 --> 00:18:08,400 Jaka jest struktura danych po prostu mówił o? 343 00:18:08,400 --> 00:18:09,316 Publiczność: Związany lista. 344 00:18:09,316 --> 00:18:10,500 GŁOŚNIK 1: powiązana lista. 345 00:18:10,500 --> 00:18:16,640 Więc teraz, zamiast każdego z tych wiadra tylko o jeden element, 346 00:18:16,640 --> 00:18:24,020 to będzie zawierać listę połączoną elementy, które zostały zakodowane w nim. 347 00:18:24,020 --> 00:18:27,588 OK, nie każdy rodzaj się ten pomysł? 348 00:18:27,588 --> 00:18:30,546 Dlatego, że nie może mieć tablicę dlatego, że nie wiem, jak wiele rzeczy, 349 00:18:30,546 --> 00:18:31,730 będą tam. 350 00:18:31,730 --> 00:18:36,540 Powiązane lista pozwala nam mamy tylko dokładną liczbę, która 351 00:18:36,540 --> 00:18:38,465 są zakodowane w tym wiadrze, prawda? 352 00:18:38,465 --> 00:18:42,260 353 00:18:42,260 --> 00:18:50,500 >> Więc jest liniowa próbkowania w zasadzie to idea-- 354 00:18:50,500 --> 00:18:52,300 to jest jeden sposób, aby radzić sobie z kolizji. 355 00:18:52,300 --> 00:18:58,010 Co możesz zrobić, to jeśli w tym Sprawa, Jagoda był mieszany w 1 356 00:18:58,010 --> 00:19:01,130 i już mamy coś tam, po prostu 357 00:19:01,130 --> 00:19:04,840 nie poddawać się, aż można znaleźć puste miejsce. 358 00:19:04,840 --> 00:19:06,370 To jest jeden sposób, aby sobie z tym poradzić. 359 00:19:06,370 --> 00:19:09,020 Innym sposobem, aby obsługiwać jest to z tym, co po prostu 360 00:19:09,020 --> 00:19:12,280 called-- związane lista nazywa łańcuchowym. 361 00:19:12,280 --> 00:19:20,510 >> Więc jeśli ten pomysł działa tabela mieszania myślisz 362 00:19:20,510 --> 00:19:24,150 jest znacznie większe niż ustawić dane lub jeśli 363 00:19:24,150 --> 00:19:28,870 chcesz spróbować zminimalizować łańcuchowym dopóki nie jest to absolutnie konieczne. 364 00:19:28,870 --> 00:19:34,050 Więc jedno jest liniowe Oczywiście oznacza sondowania 365 00:19:34,050 --> 00:19:37,290 że swojej funkcji skrótu nie jest tak użyteczne 366 00:19:37,290 --> 00:19:42,200 bo masz zamiar skończyć się przy użyciu Twoja funkcja skrótu, dotarcie do punktu, 367 00:19:42,200 --> 00:19:46,400 LINEAR można sondować do jakieś miejsce, które jest dostępne. 368 00:19:46,400 --> 00:19:49,670 Ale teraz, oczywiście, nic inny, że kończy się tam, 369 00:19:49,670 --> 00:19:52,050 będziesz musiał szukać jeszcze bardziej w dół. 370 00:19:52,050 --> 00:19:55,650 >> I o wiele więcej Wyszukiwarka, że ​​koszty 371 00:19:55,650 --> 00:19:59,820 idzie do wprowadzania elementu w hash tabeli teraz, prawda? 372 00:19:59,820 --> 00:20:05,640 A teraz, gdy idziesz i spróbować znaleźć Jagoda znowu będziesz go mieszania, 373 00:20:05,640 --> 00:20:07,742 i powie, Och, spójrz w wiadrze 1, 374 00:20:07,742 --> 00:20:09,700 i nie będzie w wiadrze 1, więc jesteś 375 00:20:09,700 --> 00:20:11,970 będzie musiał przemierzać przez reszty z nich. 376 00:20:11,970 --> 00:20:17,720 Więc to jest czasami przydatne, ale w większości przypadków 377 00:20:17,720 --> 00:20:22,660 mamy zamiar powiedzieć, że Łańcuch jest to, co chcesz zrobić. 378 00:20:22,660 --> 00:20:25,520 >> Więc rozmawialiśmy o tym wcześniej. 379 00:20:25,520 --> 00:20:27,812 Mam trochę przed siebie. 380 00:20:27,812 --> 00:20:33,560 Ale to jest w zasadzie łańcuchowym każde wiadro w tabeli mieszania 381 00:20:33,560 --> 00:20:36,120 związane jest tylko lista. 382 00:20:36,120 --> 00:20:39,660 >> Tak inny sposób, lub bardziej techniczne sposób, aby myśleć o tabeli mieszania 383 00:20:39,660 --> 00:20:44,490 jest to, że jest to po prostu tablica połączonych list, który 384 00:20:44,490 --> 00:20:49,330 kiedy piszesz słownika i starasz się go załadować, 385 00:20:49,330 --> 00:20:52,070 myśląc o tym, jak szereg powiązanych list 386 00:20:52,070 --> 00:20:54,390 będzie o wiele łatwiej , aby zainicjować. 387 00:20:54,390 --> 00:20:57,680 >> Publiczność: Tak tabeli mieszania ma ustaloną wielkość, 388 00:20:57,680 --> 00:20:58,980 jak [niesłyszalne] wiader? 389 00:20:58,980 --> 00:20:59,220 >> GŁOŚNIK 1: Prawo. 390 00:20:59,220 --> 00:21:01,655 Więc ma określoną liczbę wiadra, że ​​determine-- 391 00:21:01,655 --> 00:21:03,530 które faceci powinni zapraszam do zabawy. 392 00:21:03,530 --> 00:21:05,269 To może być całkiem fajne aby zobaczyć, co się dzieje, 393 00:21:05,269 --> 00:21:06,810 jak zmienić ilość segmentów. 394 00:21:06,810 --> 00:21:09,410 395 00:21:09,410 --> 00:21:11,510 Ale tak, to ma ustawić kilka wiader. 396 00:21:11,510 --> 00:21:15,360 Co pozwala na dopasowanie się wiele elementów, jak trzeba 397 00:21:15,360 --> 00:21:19,350 Jest to osobny łańcuchowym, gdzie Listy zostały połączone w każdym segmencie. 398 00:21:19,350 --> 00:21:22,850 To oznacza, że ​​stolik hash będzie dokładnie rozmiar 399 00:21:22,850 --> 00:21:25,440 że trzeba go będzie, prawda? 400 00:21:25,440 --> 00:21:27,358 To cały punkt połączonych listach. 401 00:21:27,358 --> 00:21:30,850 402 00:21:30,850 --> 00:21:32,480 Fajne. 403 00:21:32,480 --> 00:21:38,780 >> Więc wszyscy tam w porządku? 404 00:21:38,780 --> 00:21:39,801 Dobrze. 405 00:21:39,801 --> 00:21:40,300 Ach. 406 00:21:40,300 --> 00:21:41,860 Co się stało? 407 00:21:41,860 --> 00:21:42,960 Naprawdę teraz. 408 00:21:42,960 --> 00:21:45,250 Zgadnij, ktoś mnie zabija. 409 00:21:45,250 --> 00:21:52,060 >> OK, mamy zamiar iść do próbuje, które są trochę szalony. 410 00:21:52,060 --> 00:21:53,140 Lubię tabel mieszania. 411 00:21:53,140 --> 00:21:54,460 Myślę, że są naprawdę fajne. 412 00:21:54,460 --> 00:21:56,710 Próby są fajne, też. 413 00:21:56,710 --> 00:21:59,590 >> Więc czy ktoś pamięta, co próba jest? 414 00:21:59,590 --> 00:22:01,740 Powinien Pan się krótko w wykładzie? 415 00:22:01,740 --> 00:22:04,570 416 00:22:04,570 --> 00:22:06,377 Pamiętasz rodzaju, jak to działa? 417 00:22:06,377 --> 00:22:08,460 Publiczność: Ja tylko kiwając że poszedł nad nim. 418 00:22:08,460 --> 00:22:09,626 GŁOŚNIK 1: Mamy udać się nad nim. 419 00:22:09,626 --> 00:22:13,100 OK, tak naprawdę pójdzie ponad to, co jest teraz mówimy. 420 00:22:13,100 --> 00:22:14,860 >> PUBLICZNOŚCI: To na drzewa pobierania. 421 00:22:14,860 --> 00:22:15,280 >> 1 głośnik: Tak. 422 00:22:15,280 --> 00:22:16,196 To drzewo pobierania. 423 00:22:16,196 --> 00:22:16,960 Niesamowite. 424 00:22:16,960 --> 00:22:23,610 Więc jedno uwagi jest to, że patrząc na pojedynczych znaków 425 00:22:23,610 --> 00:22:24,480 tutaj, prawda? 426 00:22:24,480 --> 00:22:29,710 >> Więc zanim z naszej funkcji skrótu, możemy patrzyli na słowa jako całości, 427 00:22:29,710 --> 00:22:32,270 i teraz szukamy więcej w postaci, prawda? 428 00:22:32,270 --> 00:22:38,380 Mamy więc tutaj i Maxwell Mendel. 429 00:22:38,380 --> 00:22:47,840 Więc w zasadzie try-- sposób myślenia o to, że każdy poziom tutaj 430 00:22:47,840 --> 00:22:49,000 jest tablicą liter. 431 00:22:49,000 --> 00:22:53,310 432 00:22:53,310 --> 00:22:55,790 Więc to jest twój węzeł główny tutaj, prawda? 433 00:22:55,790 --> 00:23:01,980 Ten ma wszystkie znaki alfabet na początku każdego słowa. 434 00:23:01,980 --> 00:23:06,480 >> A to, co chcesz zrobić, to powiedzmy, OK, mamy pewne słowo M. 435 00:23:06,480 --> 00:23:10,590 Idziemy szukać Maxwell, więc idziemy do M. A M punktów, aby cały 436 00:23:10,590 --> 00:23:14,800 druga tablica, gdzie każdy Słowo dopóki 437 00:23:14,800 --> 00:23:17,044 Jest to słowo, które ma w drugim liście, 438 00:23:17,044 --> 00:23:19,460 tak długo, jak to słowo, które ma B jako drugi list, 439 00:23:19,460 --> 00:23:24,630 będzie miał wskaźnik będzie jakiś następny tablicy. 440 00:23:24,630 --> 00:23:29,290 >> Nie ma chyba Słowo, które MP coś, 441 00:23:29,290 --> 00:23:32,980 więc w pozycji P w tym tablicy, to po prostu być NULL. 442 00:23:32,980 --> 00:23:38,840 To znaczy, w porządku, nie ma ani słowa który M następnie P, OK? 443 00:23:38,840 --> 00:23:43,100 Jeśli więc myślimy o nim, każdego jeden z tych mniejszych rzeczy 444 00:23:43,100 --> 00:23:47,990 jest w rzeczywistości jednym z nich duże tablice od A do Z. 445 00:23:47,990 --> 00:23:55,064 Więc co może być jedną z rzeczy, że to rodzaj zwrotu spróbować? 446 00:23:55,064 --> 00:23:56,500 >> Publiczność: dużo pamięci. 447 00:23:56,500 --> 00:23:59,940 >> GŁOŚNIK 1: Jest mnóstwo pamięci, prawda? 448 00:23:59,940 --> 00:24:08,750 Każdy z tych bloków tutaj reprezentuje 26 miejsc, 26 element tablicy. 449 00:24:08,750 --> 00:24:13,680 Więc próbuje się niezwykle przestrzeń ciężkie. 450 00:24:13,680 --> 00:24:17,100 >> Ale są one bardzo szybko. 451 00:24:17,100 --> 00:24:22,540 Tak niesamowicie szybko, ale naprawdę przestrzeń nieefektywne. 452 00:24:22,540 --> 00:24:24,810 Rodzaju muszą zrozumieć się, co chcesz. 453 00:24:24,810 --> 00:24:29,470 Są to naprawdę fajne dla Pset, ale one zajmują dużo pamięci, 454 00:24:29,470 --> 00:24:30,290 więc kompromis. 455 00:24:30,290 --> 00:24:31,480 Tak? 456 00:24:31,480 --> 00:24:34,300 >> Publiczność: Czy byłoby możliwe skonfigurować, a następnie spróbuj 457 00:24:34,300 --> 00:24:37,967 skoro masz wszystko Dane w nim, że need-- 458 00:24:37,967 --> 00:24:39,550 Nie wiem, czy to miałoby sens. 459 00:24:39,550 --> 00:24:42,200 Byłem pozbycie się wszystkich NULL znaków, ale wtedy 460 00:24:42,200 --> 00:24:42,910 nie będzie w stanie indeksować them-- 461 00:24:42,910 --> 00:24:43,275 >> GŁOŚNIK 1: nadal są potrzebne. 462 00:24:43,275 --> 00:24:44,854 >> Odbiorcy: - w taki sam sposób za każdym razem. 463 00:24:44,854 --> 00:24:45,520 1 głośnik: Tak. 464 00:24:45,520 --> 00:24:50,460 Musisz się NULL znaków pozwolić wiesz, czy tam nie ma ani słowa. 465 00:24:50,460 --> 00:24:52,040 Ben nie masz coś chcesz? 466 00:24:52,040 --> 00:24:52,540 OK. 467 00:24:52,540 --> 00:24:54,581 W porządku, więc jedziemy iść trochę więcej 468 00:24:54,581 --> 00:24:58,920 do szczegółów technicznych za spróbować pracy na przykładzie. 469 00:24:58,920 --> 00:25:01,490 >> OK, więc to jest to samo. 470 00:25:01,490 --> 00:25:06,290 Podczas gdy w połączonej listy, naszym głównym rodzaj of-- co to słowo chcę? - 471 00:25:06,290 --> 00:25:08,350 jak budulcem był węzeł. 472 00:25:08,350 --> 00:25:12,280 W próbie, mamy także węzeł, ale nie jest to zdefiniowane inaczej. 473 00:25:12,280 --> 00:25:17,000 >> Więc mamy trochę bool, że reprezentuje, czy rzeczywiście słowa 474 00:25:17,000 --> 00:25:23,530 istnieje w tej lokalizacji, a następnie mamy trochę tablicę here-- a raczej 475 00:25:23,530 --> 00:25:27,840 jest to wskaźnik do Tablica z 27 znaków. 476 00:25:27,840 --> 00:25:33,339 A to za, w tym przypadku jest 27-- Jestem pewien, że wszyscy z was są jak, poczekaj, 477 00:25:33,339 --> 00:25:34,880 jest 26 liter w alfabecie. 478 00:25:34,880 --> 00:25:36,010 Dlaczego mamy 27? 479 00:25:36,010 --> 00:25:37,870 >> Tak więc w zależności od sposób realizacji tego, 480 00:25:37,870 --> 00:25:43,240 jest to, że ze zbior pozwoliło na apostrofy. 481 00:25:43,240 --> 00:25:46,010 Więc dlatego dodatkowy jeden. 482 00:25:46,010 --> 00:25:50,500 Będziesz mieć również w niektórych przypadki terminatora null 483 00:25:50,500 --> 00:25:53,230 jest ujęte jako jeden z znaków, że to jest dozwolone, 484 00:25:53,230 --> 00:25:56,120 i to w jaki sposób sprawdzić, zobaczyć, czy to koniec słowa. 485 00:25:56,120 --> 00:26:01,340 Jeśli jesteś zainteresowany, sprawdź Film Kevina na study.cs50, 486 00:26:01,340 --> 00:26:04,790 jak Wikipedia ma kilka dobrych zasobów tam. 487 00:26:04,790 --> 00:26:09,000 >> Ale mamy zamiar przejść po prostu rodzaj w jaki sposób można pracować przez try 488 00:26:09,000 --> 00:26:11,010 Jeśli dostaniesz jeden. 489 00:26:11,010 --> 00:26:16,230 Tak więc mamy tu bardzo proste, że jeden ma słowa "nietoperz" i "zoom" w nich. 490 00:26:16,230 --> 00:26:18,920 I jak widzimy tutaj, to mało tu miejsca 491 00:26:18,920 --> 00:26:22,560 bool, który reprezentuje naszą mówi: tak, to jest słowo. 492 00:26:22,560 --> 00:26:27,060 I wtedy to ma nasze tablice znaków, prawda? 493 00:26:27,060 --> 00:26:33,480 >> Więc mamy zamiar przejść przez znalezienie "bat" w tej próbie. 494 00:26:33,480 --> 00:26:38,340 Tak rozpoczyna się na górze, prawda? 495 00:26:38,340 --> 00:26:46,290 I wiemy, że b odpowiada drugi indeks, drugi element 496 00:26:46,290 --> 00:26:47,840 w tej tablicy, gdyż b. 497 00:26:47,840 --> 00:26:51,340 Więc ok drugi. 498 00:26:51,340 --> 00:26:58,820 >> I mówi, OK, fajnie, że się przestrzegać obok tablicy, bo jeśli pamiętamy, 499 00:26:58,820 --> 00:27:02,160 nie jest to, że każdy z nich faktycznie zawiera element. 500 00:27:02,160 --> 00:27:07,110 Każda z tych tablic zawiera wskaźnik, prawda? 501 00:27:07,110 --> 00:27:10,030 To ważne rozróżnienie zrobić. 502 00:27:10,030 --> 00:27:13,450 >> Wiem, że to ma być: próbuje się naprawdę trudno dostać się na po raz pierwszy, 503 00:27:13,450 --> 00:27:15,241 tak więc nawet jeżeli jest to drugim lub trzecim razem 504 00:27:15,241 --> 00:27:18,370 i to jeszcze rodzaj z pozornie trudne, 505 00:27:18,370 --> 00:27:21,199 Obiecuję, że jeśli się zegarek krótki jutro, 506 00:27:21,199 --> 00:27:22,740 to prawdopodobnie zrobić dużo więcej sensu. 507 00:27:22,740 --> 00:27:23,890 To zajmuje dużo do strawienia. 508 00:27:23,890 --> 00:27:27,800 I jeszcze czasami jestem jak, czekaj, co jest spróbować? 509 00:27:27,800 --> 00:27:29,080 Jak tego używać? 510 00:27:29,080 --> 00:27:33,880 >> Mamy więc b, w tym przypadku, który jest nasz drugi wskaźnik. 511 00:27:33,880 --> 00:27:40,240 Jeśli mieliśmy, powiedzmy, c lub d lub inny list 512 00:27:40,240 --> 00:27:45,810 musimy map, że z powrotem do indeksu nasz wybór że odpowiada. 513 00:27:45,810 --> 00:27:56,930 Więc bierzemy jak rchar i po prostu odjąć od mapować go do 0 do 25. 514 00:27:56,930 --> 00:27:58,728 Wszyscy dobrze jak my map naszych bohaterów? 515 00:27:58,728 --> 00:28:00,440 OK. 516 00:28:00,440 --> 00:28:05,980 >> Więc idziemy do drugiego i my zobaczyć, że tak, to nie jest NULL. 517 00:28:05,980 --> 00:28:07,780 Możemy przejść do tej następnej tablicy. 518 00:28:07,780 --> 00:28:12,300 Więc idziemy do tej kolejnej tablicy tutaj. 519 00:28:12,300 --> 00:28:15,500 >> I możemy powiedzieć, OK, teraz jesteśmy należy sprawdzić, czy jest tutaj. 520 00:28:15,500 --> 00:28:18,590 Jest zerowy lub robi to rzeczywiście iść do przodu? 521 00:28:18,590 --> 00:28:21,880 Więc rzeczywiście porusza przekazania w tej tablicy. 522 00:28:21,880 --> 00:28:24,570 I możemy powiedzieć, OK, t jest nasz ostatni list. 523 00:28:24,570 --> 00:28:27,580 Więc idziemy do t w indeksie. 524 00:28:27,580 --> 00:28:30,120 A potem ruszyć do przodu ponieważ jest jeszcze jeden. 525 00:28:30,120 --> 00:28:38,340 A ten mówi, w zasadzie, że tak, mówi, że nie jest to słowo here-- 526 00:28:38,340 --> 00:28:41,750 że jeśli się to Ścieżka, po przyjeździe, 527 00:28:41,750 --> 00:28:43,210 na słowa, które wiemy, jest "bat". 528 00:28:43,210 --> 00:28:43,800 Tak? 529 00:28:43,800 --> 00:28:46,770 >> PUBLICZNOŚCI: Czy to, że mają standardowe w indeksie 0, a potem mieć na jeden rodzaj 530 00:28:46,770 --> 00:28:47,660 lub mieć na końcu? 531 00:28:47,660 --> 00:28:48,243 >> 1 głośnik: Nie 532 00:28:48,243 --> 00:28:55,360 Więc jeśli spojrzymy na nasze Deklaracja tutaj, to bool, 533 00:28:55,360 --> 00:28:59,490 więc własny element węzła. 534 00:28:59,490 --> 00:29:03,331 Więc nie jest to część tablicy. 535 00:29:03,331 --> 00:29:03,830 Fajne. 536 00:29:03,830 --> 00:29:08,370 Więc kiedy skończymy nasze słowo i jesteśmy w tej tablicy, co chcemy zrobić 537 00:29:08,370 --> 00:29:12,807 jest to czek na to słowo. 538 00:29:12,807 --> 00:29:14,390 I w tym przypadku, to wrócić tak. 539 00:29:14,390 --> 00:29:17,220 540 00:29:17,220 --> 00:29:24,090 >> Więc na tej notatce, wiemy, że "zoo" - wiemy, jak ludzie, że "zoo" to słowo, 541 00:29:24,090 --> 00:29:24,820 prawda? 542 00:29:24,820 --> 00:29:28,990 Ale są tu by spróbować powiedzieć, nie, to nie. 543 00:29:28,990 --> 00:29:33,980 A to znaczy, że dlatego, że nie oznaczono go jako słowa tutaj. 544 00:29:33,980 --> 00:29:40,440 Mimo, że możemy przechodzić dzięki tej tablicy, 545 00:29:40,440 --> 00:29:43,890 to próba powiedziałbym, że nie, z oo nie jest w słowniku 546 00:29:43,890 --> 00:29:47,070 dlatego, że nie mają oznaczono go jako taki. 547 00:29:47,070 --> 00:29:52,870 >> Więc jeden sposób that-- och, przepraszam, ten. 548 00:29:52,870 --> 00:29:59,450 Tak więc w tym przypadku, "oo" nie jest słowo, ale to jest w naszej próbie. 549 00:29:59,450 --> 00:30:05,690 Ale w tym jednym, że chcemy go wprowadzenia słowa "kąpiel", co się dzieje, 550 00:30:05,690 --> 00:30:08,260 jest kierujemy through-- B, A, t. 551 00:30:08,260 --> 00:30:11,820 Jesteśmy w tej tablicy, i idziemy szukać godz. 552 00:30:11,820 --> 00:30:15,220 >> W tym przypadku, gdy spojrzeć na wskaźnik na h, 553 00:30:15,220 --> 00:30:17,890 to wskazuje na NULL, OK? 554 00:30:17,890 --> 00:30:20,780 Więc jeśli nie jest to wyraźnie wskazuje na inny tablicy 555 00:30:20,780 --> 00:30:25,000 można zakładać, że wszystkie wskaźniki w tej tablicy wskazują na null. 556 00:30:25,000 --> 00:30:28,270 Tak więc w tym przypadku h wskazuje null, więc nie możemy nic zrobić, 557 00:30:28,270 --> 00:30:31,540 więc to również powrót fałszywe, "kąpiel" nie jest tutaj. 558 00:30:31,540 --> 00:30:34,102 559 00:30:34,102 --> 00:30:35,810 Więc teraz jesteśmy naprawdę zamiar przejść przez 560 00:30:35,810 --> 00:30:39,790 jak byśmy rzeczywiście powiedzieć że "zoo" jest w naszej próbie. 561 00:30:39,790 --> 00:30:42,920 Jak wstawić "zoo" w naszej próbie? 562 00:30:42,920 --> 00:30:47,810 Tak więc w taki sam sposób, że rozpoczęła się z naszej listy, zaczynamy u podstaw. 563 00:30:47,810 --> 00:30:50,600 W przypadku wątpliwości, zaczynają się Korzeń z tych rzeczy. 564 00:30:50,600 --> 00:30:53,330 >> A my powiedzieć, OK, z. 565 00:30:53,330 --> 00:30:55,650 z istnieje w tym, i to robi. 566 00:30:55,650 --> 00:30:58,370 Więc jesteś w ruchu na następnym tablica, OK? 567 00:30:58,370 --> 00:31:01,482 A następnie na następnego, powiedzieć, OK, nie o istnieje? 568 00:31:01,482 --> 00:31:03,000 To nie. 569 00:31:03,000 --> 00:31:04,330 To ponownie. 570 00:31:04,330 --> 00:31:08,670 >> I tak na naszej następnej, już powiedzieliśmy, OK, "zoo" już istnieje tutaj. 571 00:31:08,670 --> 00:31:12,440 Wszystko, co musimy zrobić, to ustawić to równe z prawdą, że nie ma tam ani słowa. 572 00:31:12,440 --> 00:31:15,260 Jeśli wszystko się po nawet przed tym punkcie, 573 00:31:15,260 --> 00:31:17,030 to słowo, tak po prostu ustawiony jest równa np. 574 00:31:17,030 --> 00:31:17,530 Tak? 575 00:31:17,530 --> 00:31:22,550 >> Publiczność: Tak to robi oznacza to, że "ba", to słowo również? 576 00:31:22,550 --> 00:31:24,120 >> 1 głośnik: Nie 577 00:31:24,120 --> 00:31:28,870 Więc w tym przypadku, "ba", że dostanie tu, by powiedzieć, jest to słowo, 578 00:31:28,870 --> 00:31:31,590 i to nadal nie ma. 579 00:31:31,590 --> 00:31:32,822 OK? 580 00:31:32,822 --> 00:31:33,740 MMHMM? 581 00:31:33,740 --> 00:31:36,360 >> Publiczność: Więc kiedy jest to Słowo i mówisz tak, to 582 00:31:36,360 --> 00:31:38,380 zawierać będzie udać się do m? 583 00:31:38,380 --> 00:31:42,260 >> GŁOŚNIK 1: Więc to ma with-- masz ładowania to w. 584 00:31:42,260 --> 00:31:43,640 Mówisz "zoo" jest słowo. 585 00:31:43,640 --> 00:31:47,020 Gdy idziesz do check-- jak, że chcesz powiedzieć, 586 00:31:47,020 --> 00:31:49,400 oznacza "zoo" istnieje w tym słowniku? 587 00:31:49,400 --> 00:31:54,200 Jesteś tylko będzie szukać "zoo" a następnie sprawdzić, czy jest to słowo. 588 00:31:54,200 --> 00:31:57,291 Nigdy nie będziemy poruszać aż do m, ponieważ to nie jest 589 00:31:57,291 --> 00:31:58,290 czego szukasz. 590 00:31:58,290 --> 00:32:02,690 591 00:32:02,690 --> 00:32:08,070 >> Jeśli więc rzeczywiście chciał dodać "kąpiel" w tej próbie, 592 00:32:08,070 --> 00:32:11,390 chcemy zrobić to samo jak my z "zoo" 593 00:32:11,390 --> 00:32:15,380 chyba że widzimy, że kiedy spróbować i dostać się do godziny, to nie istnieje. 594 00:32:15,380 --> 00:32:20,090 Tak więc można myśleć o tym, jak stara aby dodać nowy węzeł w połączonej listy, 595 00:32:20,090 --> 00:32:27,210 więc musimy dodać kolejny jedna z tych tablic, jak tak. 596 00:32:27,210 --> 00:32:35,670 A potem, co robimy jest po prostu ustawić godzinę elementem tej tablicy wskazując na to. 597 00:32:35,670 --> 00:32:39,430 >> A potem to, co chcemy zrobić tutaj? 598 00:32:39,430 --> 00:32:43,110 Dodaj jest równe true bo to słowo. 599 00:32:43,110 --> 00:32:46,350 600 00:32:46,350 --> 00:32:48,150 Fajne. 601 00:32:48,150 --> 00:32:48,700 Wiem. 602 00:32:48,700 --> 00:32:51,170 Próby nie są najbardziej ekscytujące. 603 00:32:51,170 --> 00:32:54,250 Zaufaj mi, wiem. 604 00:32:54,250 --> 00:32:58,040 >> Więc jedna rzecz do zrealizowania z prób, Powiedziałem, że są bardzo skuteczne. 605 00:32:58,040 --> 00:33:00,080 Więc oni widzieliśmy zajmują mnóstwo miejsca. 606 00:33:00,080 --> 00:33:01,370 Oni rodzaj mylące. 607 00:33:01,370 --> 00:33:03,367 Więc dlaczego kiedykolwiek użyć tych? 608 00:33:03,367 --> 00:33:05,450 Korzystamy z nich, ponieważ są one niezwykle wydajne. 609 00:33:05,450 --> 00:33:08,130 >> Więc jeśli kiedykolwiek patrzy się słowa, jesteś tylko 610 00:33:08,130 --> 00:33:10,450 ograniczona jest przez długość słowa. 611 00:33:10,450 --> 00:33:15,210 Więc jeśli szukasz Słowo to jest o długości od pięciu, 612 00:33:15,210 --> 00:33:20,940 jesteś tylko kiedykolwiek będzie musiał wykonanie w większości pięciu porównań, OK? 613 00:33:20,940 --> 00:33:25,780 Więc to sprawia, że ​​w zasadzie stała. 614 00:33:25,780 --> 00:33:29,150 Jak wkładanie i odnośnika są w zasadzie stała czasowa. 615 00:33:29,150 --> 00:33:33,750 >> Więc jeśli można kiedykolwiek coś w stałym czasie, 616 00:33:33,750 --> 00:33:35,150 że jest tak dobry jak on. 617 00:33:35,150 --> 00:33:37,990 Nie można się lepiej niż Stała czasowa dla tych rzeczy. 618 00:33:37,990 --> 00:33:43,150 Tak, że jeden z ogromne plusy prób. 619 00:33:43,150 --> 00:33:46,780 >> Ale jest dużo miejsca. 620 00:33:46,780 --> 00:33:50,380 Więc niby zdecydować, co jest dla ciebie ważniejsze. 621 00:33:50,380 --> 00:33:54,700 I na współczesnych komputerach, przestrzeń, która może trwać try 622 00:33:54,700 --> 00:33:57,740 być może nie ma wpływu można, że ​​dużo, ale może 623 00:33:57,740 --> 00:34:01,350 masz do czynienia z czymś, że ma wiele, wiele więcej rzeczy, 624 00:34:01,350 --> 00:34:02,810 i spróbować po prostu nie jest to uzasadnione. 625 00:34:02,810 --> 00:34:03,000 Tak? 626 00:34:03,000 --> 00:34:05,610 >> Publiczność: Czekaj, więc masz 26 Litery w każdy jeden? 627 00:34:05,610 --> 00:34:07,440 >> GŁOŚNIK 1: MMHMM. 628 00:34:07,440 --> 00:34:08,570 Tak, masz 26. 629 00:34:08,570 --> 00:34:16,984 Masz jakiś jest słowo, a następnie znacznik masz 26 wskaźników w każdego. 630 00:34:16,984 --> 00:34:17,775 A oni point-- 631 00:34:17,775 --> 00:34:20,280 >> Grupa docelowa: I co 26, oni mają po 26? 632 00:34:20,280 --> 00:34:21,500 >> 1 głośnik: Tak. 633 00:34:21,500 --> 00:34:27,460 I dlatego, jak można zobaczyć, dość szybko powiększa. 634 00:34:27,460 --> 00:34:28,130 Dobrze. 635 00:34:28,130 --> 00:34:32,524 Więc mamy zamiar dostać się do drzew, które Czuję się jak jest łatwiejsze i prawdopodobnie 636 00:34:32,524 --> 00:34:36,150 być miły mały wytchnienie z prób nie. 637 00:34:36,150 --> 00:34:39,620 Więc mam nadzieję, że większość z was widziałem drzewo przed. 638 00:34:39,620 --> 00:34:41,820 Nie jak dość te, które ja na zewnątrz 639 00:34:41,820 --> 00:34:44,340 nie wiem, czy ktoś udał się na zewnątrz niedawno. 640 00:34:44,340 --> 00:34:49,230 Poszedłem jabłko zbierając w ten weekend, i O mój Boże, to było piękne. 641 00:34:49,230 --> 00:34:52,250 Nie wiedziałem, liści może wyglądać, że ładna. 642 00:34:52,250 --> 00:34:53,610 >> Więc jest to tylko drzewo, prawda? 643 00:34:53,610 --> 00:34:56,790 To tylko niektóre węzeł, i to wskazuje na kilka innych węzłów. 644 00:34:56,790 --> 00:34:59,570 Jak widać tutaj, to jest rodzaju powracającym tematem. 645 00:34:59,570 --> 00:35:03,720 Węzły skierowana jest rodzajem węzłów Istotą wielu struktur danych. 646 00:35:03,720 --> 00:35:06,670 To po prostu zależy od tego, jak wskazać je wzajemnie 647 00:35:06,670 --> 00:35:08,600 i jak przechodzić przez nich i jak 648 00:35:08,600 --> 00:35:14,500 wkładać rzeczy, które określa ich różne cechy. 649 00:35:14,500 --> 00:35:17,600 >> Więc po prostu trochę terminologii, którego użyłem wcześniej. 650 00:35:17,600 --> 00:35:20,010 Więc to, co jest korzeniem na samym szczycie. 651 00:35:20,010 --> 00:35:21,200 to gdzie zawsze zacząć. 652 00:35:21,200 --> 00:35:23,610 Możesz myśleć o tym jako szef również. 653 00:35:23,610 --> 00:35:28,750 Ale dla drzew, mamy tendencję do odnoszą się do niego jako administrator. 654 00:35:28,750 --> 00:35:32,820 >> Wszystko na dole here-- w bardzo, bardzo bottom-- 655 00:35:32,820 --> 00:35:34,500 są uważane liście. 656 00:35:34,500 --> 00:35:37,210 Więc to idzie w parze z Całe drzewo rzecz, prawda? 657 00:35:37,210 --> 00:35:39,860 Liście na brzegach drzewa. 658 00:35:39,860 --> 00:35:45,820 >> A potem mamy także kilka Terminy mówić o węzłach w stosunku 659 00:35:45,820 --> 00:35:46,680 do siebie. 660 00:35:46,680 --> 00:35:49,700 Mamy więc rodziców, dzieci i rodzeństwo. 661 00:35:49,700 --> 00:35:56,260 Tak więc w tym przypadku, 3 Rodzic z 5, 6 i 7. 662 00:35:56,260 --> 00:36:00,370 Więc to, co jest rodzic jeden krok wyżej, co masz 663 00:36:00,370 --> 00:36:02,940 odnosząc się do, tak po prostu jak drzewo genealogiczne. 664 00:36:02,940 --> 00:36:07,090 Miejmy nadzieję, że to wszystko jest trochę nieco bardziej intuicyjny niż stara. 665 00:36:07,090 --> 00:36:10,970 >> Rodzeństwo są te, które mają sam rodzic, prawda? 666 00:36:10,970 --> 00:36:13,470 Są na tym samym poziomie, tutaj. 667 00:36:13,470 --> 00:36:16,960 A potem, jak ja mówiąc, dzieci są po prostu 668 00:36:16,960 --> 00:36:22,630 co jest o krok niżej węzeł w pytaniu, OK? 669 00:36:22,630 --> 00:36:23,470 Fajne. 670 00:36:23,470 --> 00:36:25,610 Tak drzewo binarne. 671 00:36:25,610 --> 00:36:31,450 Czy ktoś może zaryzykować na jednym z charakterystyka drzewa binarnego? 672 00:36:31,450 --> 00:36:32,770 >> Publiczność: Max dwa liście. 673 00:36:32,770 --> 00:36:33,478 >> GŁOŚNIK 1: Prawo. 674 00:36:33,478 --> 00:36:34,640 Więc max dwóch liści. 675 00:36:34,640 --> 00:36:39,730 Więc w tym jeden przed, mieliśmy ten jeden który miał trzy, ale w binarnym drzewie 676 00:36:39,730 --> 00:36:45,000 masz maksymalnie dwóch dzieci na rodziców, prawda? 677 00:36:45,000 --> 00:36:46,970 Jest jeszcze jedna ciekawa cecha. 678 00:36:46,970 --> 00:36:51,550 Czy ktoś wie? 679 00:36:51,550 --> 00:36:52,620 Drzewo binarne. 680 00:36:52,620 --> 00:37:00,350 >> Więc binarne drzewo będzie mieć wszystko na the-- to nie jest sorted-- 681 00:37:00,350 --> 00:37:05,320 ale w posortowanej drzewa binarnego, wszystko na prawo 682 00:37:05,320 --> 00:37:08,530 jest większa niż rodzic a wszystko z lewej 683 00:37:08,530 --> 00:37:10,035 jest mniejsza niż rodzic. 684 00:37:10,035 --> 00:37:15,690 I to jest quiz pytanie wcześniej, więc dobrze wiedzieć. 685 00:37:15,690 --> 00:37:19,500 Więc ten sposób możemy określić, znowu mamy kolejny węzeł. 686 00:37:19,500 --> 00:37:21,880 To wygląda bardzo podobnie do tego, co? 687 00:37:21,880 --> 00:37:28,336 688 00:37:28,336 --> 00:37:28,836 Podwójnie 689 00:37:28,836 --> 00:37:29,320 >> Publiczność: Linked list 690 00:37:29,320 --> 00:37:31,100 >> GŁOŚNIK 1: podwójne lista powiązana, prawda? 691 00:37:31,100 --> 00:37:33,690 Jeśli więc zastąpić to z poprzednim i następnym, 692 00:37:33,690 --> 00:37:35,670 to będzie podwójnie związany lista. 693 00:37:35,670 --> 00:37:40,125 Jednak w tym przypadku, w rzeczywistości mają prawo i lewo i to wszystko. 694 00:37:40,125 --> 00:37:41,500 W przeciwnym razie, jest to dokładnie to samo. 695 00:37:41,500 --> 00:37:43,374 Mamy jeszcze element szukasz, 696 00:37:43,374 --> 00:37:45,988 i po prostu mieć dwa wskaźniki będzie co będzie dalej. 697 00:37:45,988 --> 00:37:49,210 698 00:37:49,210 --> 00:37:51,870 Tak, tak, drzewo binarne wyszukiwania. 699 00:37:51,870 --> 00:37:57,665 Jeśli zauważymy, wszystko na tutaj jest większa than-- 700 00:37:57,665 --> 00:37:59,850 czy wszystko od razu się tutaj 701 00:37:59,850 --> 00:38:02,840 jest większa niż wszystko, tutaj jest mniejsza. 702 00:38:02,840 --> 00:38:06,980 703 00:38:06,980 --> 00:38:14,000 >> Więc gdybyśmy przeszukiwać, to powinien wyglądać bardzo blisko wyszukiwania binarnego 704 00:38:14,000 --> 00:38:14,910 tutaj, prawda? 705 00:38:14,910 --> 00:38:17,640 Chyba zamiast szukać na pół tablicy, 706 00:38:17,640 --> 00:38:21,720 jesteśmy po prostu patrząc na obu lewo strona lub prawej stronie drzewa. 707 00:38:21,720 --> 00:38:24,850 Tak robi się trochę prostsze, myślę. 708 00:38:24,850 --> 00:38:29,300 >> Więc jeśli korzeń jest NULL, oczywiście to tylko fałszywe. 709 00:38:29,300 --> 00:38:33,470 A jeśli to nie, oczywiście, że to prawda. 710 00:38:33,470 --> 00:38:35,320 Jeśli jest mniej niż, szukamy lewego. 711 00:38:35,320 --> 00:38:37,070 Jeśli jest większy niż, szukamy prawo. 712 00:38:37,070 --> 00:38:39,890 Jest dokładnie tak, jak wyszukiwanie binarne, tylko inna struktura danych 713 00:38:39,890 --> 00:38:40,600 że używamy. 714 00:38:40,600 --> 00:38:42,790 Zamiast tablicy to tylko binarne drzewo. 715 00:38:42,790 --> 00:38:45,820 716 00:38:45,820 --> 00:38:48,090 >> OK, stosy. 717 00:38:48,090 --> 00:38:51,550 A także, że wygląda jak my może mieć trochę czasu. 718 00:38:51,550 --> 00:38:54,460 Jeśli to zrobimy, jestem szczęśliwy, aby przejść nad żadnym z tego ponownie. 719 00:38:54,460 --> 00:38:56,856 OK, więc stosy. 720 00:38:56,856 --> 00:39:02,695 Czy ktoś pamięta co stacks-- wszelkie cechy stosie? 721 00:39:02,695 --> 00:39:05,550 722 00:39:05,550 --> 00:39:10,400 >> OK, więc większość z nas, jak sądzę, jeść w restauracji halls-- 723 00:39:10,400 --> 00:39:13,100 tak samo jak nie może jak. 724 00:39:13,100 --> 00:39:16,900 Ale oczywiście, można myśleć stos dosłownie jako stos tacek 725 00:39:16,900 --> 00:39:18,460 lub stos rzeczy. 726 00:39:18,460 --> 00:39:21,820 I co ważne, zdać sobie sprawę, że jest to 727 00:39:21,820 --> 00:39:26,850 something-- charakterystyczne że nazywamy to by-- jest LIFO. 728 00:39:26,850 --> 00:39:28,450 Czy ktoś wie, co to oznacza? 729 00:39:28,450 --> 00:39:29,070 MMHMM? 730 00:39:29,070 --> 00:39:30,650 >> PUBLICZNOŚCI: ostatnie weszło, pierwsze wyszło. 731 00:39:30,650 --> 00:39:32,250 >> GŁOŚNIK 1: Prawo, trwać, pierwsze wyszło. 732 00:39:32,250 --> 00:39:36,585 Więc jeśli wiemy, czy mamy do układania rzeczy się, najłatwiej złapać off-- 733 00:39:36,585 --> 00:39:39,570 i być może jedyną rzeczą, możemy chwycić się, czy nasz stos jest duży enough-- 734 00:39:39,570 --> 00:39:40,850 jest to, że górny element. 735 00:39:40,850 --> 00:39:43,460 Więc co było umieścić na last-- jak widzimy tutaj, 736 00:39:43,460 --> 00:39:46,370 co został zepchnięty Jest on najbardziej recently-- 737 00:39:46,370 --> 00:39:51,160 Będzie pierwszy rzeczą, która nam zasnąć, dobrze? 738 00:39:51,160 --> 00:39:56,324 >> Tak więc to, co mamy tutaj jest inna struktura typedef. 739 00:39:56,324 --> 00:39:58,740 To jest naprawdę tak jak Crash Course w strukturze danych, 740 00:39:58,740 --> 00:40:01,650 tak jest dużo rzucone na was. 741 00:40:01,650 --> 00:40:02,540 Wiem. 742 00:40:02,540 --> 00:40:04,970 Więc kolejna struktura. 743 00:40:04,970 --> 00:40:06,740 Yay dla struktur. 744 00:40:06,740 --> 00:40:16,660 >> I w tym przypadku, jest to jakiś wskaźnik do tablicy, która ma pewne możliwości. 745 00:40:16,660 --> 00:40:20,830 Więc to reprezentuje nasz stos tutaj, jak nasz rzeczywisty tablicy 746 00:40:20,830 --> 00:40:22,520 że trzyma nasze elementy. 747 00:40:22,520 --> 00:40:24,850 A potem mamy tutaj pewną wielkość. 748 00:40:24,850 --> 00:40:31,170 >> I zazwyczaj, chcesz zachować utwór jak duży stos jest 749 00:40:31,170 --> 00:40:36,180 bo to, co się dzieje, aby umożliwić można zrobić to, jeśli wiesz, rozmiar, 750 00:40:36,180 --> 00:40:39,170 pozwala powiedzieć, OK, jestem w mocy? 751 00:40:39,170 --> 00:40:40,570 Czy mogę dodać coś więcej? 752 00:40:40,570 --> 00:40:44,650 I to też mówi, gdzie górna część swojego stosu 753 00:40:44,650 --> 00:40:48,180 jest tak, że wiesz co może faktycznie zdjąć. 754 00:40:48,180 --> 00:40:51,760 I to rzeczywiście będzie być trochę bardziej jasne tutaj. 755 00:40:51,760 --> 00:40:57,350 >> Więc dla naciśnięciem, jednej rzeczy, jeśli Ciebie kiedykolwiek wdrożyć pchania, 756 00:40:57,350 --> 00:41:01,330 jak mi tylko powiedzieć, twój Stos ma ograniczony rozmiar, prawda? 757 00:41:01,330 --> 00:41:03,990 Nasza tablica miał jakieś zdolności. 758 00:41:03,990 --> 00:41:04,910 Jest to tablica. 759 00:41:04,910 --> 00:41:08,930 Jest stałym rozmiarze, więc musimy upewnić się, że nie jesteśmy oddanie więcej 760 00:41:08,930 --> 00:41:11,950 na naszej tablicy, niż rzeczywiście mają miejsca na. 761 00:41:11,950 --> 00:41:16,900 >> Więc podczas tworzenia push Funkcja, pierwszą rzeczą zrobić, to powiedzieć, OK, 762 00:41:16,900 --> 00:41:18,570 mam miejsce w moim stosie? 763 00:41:18,570 --> 00:41:23,330 Bo jeśli nie, przepraszam, Nie mogę zapisać element. 764 00:41:23,330 --> 00:41:28,980 Jeśli to zrobię, to chcesz zapisać ono w górnej części komina, tak? 765 00:41:28,980 --> 00:41:31,325 >> I dlatego mamy śledzić swojej wielkości. 766 00:41:31,325 --> 00:41:35,290 Jeśli nie śledzić naszej wielkości, nie wiemy, gdzie go umieścić. 767 00:41:35,290 --> 00:41:39,035 Nie wiemy, jak wiele rzeczy, Już są w naszej tablicy. 768 00:41:39,035 --> 00:41:41,410 Jak oczywiście istnieją sposoby że może można to zrobić. 769 00:41:41,410 --> 00:41:44,610 Można zainicjować wszystko NULL a następnie sprawdzić najnowsze NULL, 770 00:41:44,610 --> 00:41:47,950 ale o wiele łatwiej jest to po prostu powiedzieć, OK, śledzić wielkości. 771 00:41:47,950 --> 00:41:51,840 Jak wiem, że mam cztery elementy w mojej tablicy, więc następna rzecz 772 00:41:51,840 --> 00:41:55,930 że stawiamy na, jesteśmy zamiar przechowywać w indeksie 4. 773 00:41:55,930 --> 00:42:00,940 A następnie, oczywiście oznacza to, że pomyślnym pchnął coś 774 00:42:00,940 --> 00:42:03,320 na swoim stosie, to chcą zwiększyć rozmiar 775 00:42:03,320 --> 00:42:08,880 tak, że wiesz, gdzie jesteś tak że można wcisnąć więcej rzeczy. 776 00:42:08,880 --> 00:42:12,730 >> Więc jeśli staramy się pop coś ze stosu, 777 00:42:12,730 --> 00:42:16,072 co może być pierwszą rzeczą, że chcemy sprawdzić? 778 00:42:16,072 --> 00:42:18,030 Starasz się wziąć coś się swojego stosu. 779 00:42:18,030 --> 00:42:21,710 780 00:42:21,710 --> 00:42:24,781 Czy jesteś pewien, że coś w stosie? 781 00:42:24,781 --> 00:42:25,280 Nie. 782 00:42:25,280 --> 00:42:26,894 Więc co możemy chcieć sprawdzić? 783 00:42:26,894 --> 00:42:27,810 >> PUBLICZNOŚCI: [niesłyszalne]. 784 00:42:27,810 --> 00:42:29,880 GŁOŚNIK 1: Sprawdź rozmiar? 785 00:42:29,880 --> 00:42:31,840 Rozmiar. 786 00:42:31,840 --> 00:42:38,520 Dlatego chcemy, aby sprawdzić, czy nasza wielkość jest większa niż 0, OK? 787 00:42:38,520 --> 00:42:44,970 A jeśli tak jest, to chcemy, aby zmniejszyć nasz rozmiar o 0 i wrócić tego. 788 00:42:44,970 --> 00:42:45,840 Dlaczego? 789 00:42:45,840 --> 00:42:49,950 >> W pierwszym my popychanie, że go popchnął 790 00:42:49,950 --> 00:42:52,460 na wielkość i następnie zaktualizowane wielkości. 791 00:42:52,460 --> 00:42:57,850 W tym przypadku mamy do zmniejszanie rozmiaru a następnie biorąc go, wyrywanie go 792 00:42:57,850 --> 00:42:58,952 z naszej tablicy. 793 00:42:58,952 --> 00:42:59,826 Dlaczego możemy zrobić? 794 00:42:59,826 --> 00:43:04,800 795 00:43:04,800 --> 00:43:11,811 Więc jeśli mam jedną rzecz na moim stosie, jaki byłby mój rozmiar w tym momencie? 796 00:43:11,811 --> 00:43:13,140 1. 797 00:43:13,140 --> 00:43:15,180 >> A gdzie jest elementem 1 przechowywane? 798 00:43:15,180 --> 00:43:17,621 Na co wskaźnik? 799 00:43:17,621 --> 00:43:18,120 Publiczność: 0. 800 00:43:18,120 --> 00:43:19,060 GŁOŚNIK 1: 0. 801 00:43:19,060 --> 00:43:22,800 Tak więc w tym przypadku zawsze trzeba zrobić sure-- 802 00:43:22,800 --> 00:43:27,630 zamiast wrócić wielkość minus 1, bo 803 00:43:27,630 --> 00:43:31,730 wiemy, że nasz element ma będzie przechowywany w jeden mniej 804 00:43:31,730 --> 00:43:34,705 co nasza wielkość jest to po prostu dba o niego. 805 00:43:34,705 --> 00:43:36,080 Jest to nieco bardziej elegancki sposób. 806 00:43:36,080 --> 00:43:41,220 A my po prostu zmniejszyć NASZEGO rozmiar, a następnie powrót rozmiar. 807 00:43:41,220 --> 00:43:42,330 MMHMM? 808 00:43:42,330 --> 00:43:45,300 >> Publiczność: Chyba po prostu w ogóle, dlaczego to struktura danych 809 00:43:45,300 --> 00:43:47,800 być korzystne? 810 00:43:47,800 --> 00:43:50,660 >> GŁOŚNIK 1: To zależy od kontekstu. 811 00:43:50,660 --> 00:43:57,420 Tak więc dla niektórych z teorią jeśli pracujesz with-- OK, 812 00:43:57,420 --> 00:44:02,750 pozwól mi sprawdzić, czy jest korzystne jeden jest to bardziej korzystne niż na zewnątrz 813 00:44:02,750 --> 00:44:05,420 CS. 814 00:44:05,420 --> 00:44:15,780 W stosy, za każdym razem trzeba śledzić coś, 815 00:44:15,780 --> 00:44:20,456 jest ostatnio dodany jest, gdy masz zamiar użyć stosu. 816 00:44:20,456 --> 00:44:24,770 >> I nie mogę myśleć o dobru Przykładem, że teraz. 817 00:44:24,770 --> 00:44:29,955 Ale gdy ostatnie co jest najważniejsze dla ciebie, 818 00:44:29,955 --> 00:44:31,705 to kiedy stos będzie przydatna. 819 00:44:31,705 --> 00:44:35,797 820 00:44:35,797 --> 00:44:39,330 Staram się, że jeśli nie jest dobry do tego. 821 00:44:39,330 --> 00:44:43,720 Jeśli myślę o dobry przykład w następny 20 minut na pewno powiedzieć. 822 00:44:43,720 --> 00:44:49,455 >> Ale ogólnie rzecz biorąc, czy jest coś, jak powiedziałem najbardziej, gdzie ostatnie 823 00:44:49,455 --> 00:44:52,470 najważniejsze, że jest gdzie stos wchodzi w grę. 824 00:44:52,470 --> 00:44:58,860 Podczas gdy kolejki są trochę odwrotnie. 825 00:44:58,860 --> 00:44:59,870 I wszystkie małe psy. 826 00:44:59,870 --> 00:45:00,890 Czy to nie wspaniałe, prawda? 827 00:45:00,890 --> 00:45:03,299 Czuję, że powinienem Wystarczy króliczka wideo 828 00:45:03,299 --> 00:45:05,090 w samym środku sekcja dla was 829 00:45:05,090 --> 00:45:08,870 ponieważ jest to intensywny odcinek. 830 00:45:08,870 --> 00:45:10,480 >> Więc kolejka. 831 00:45:10,480 --> 00:45:12,710 Zasadniczo jest jak kolejka linii. 832 00:45:12,710 --> 00:45:15,780 Chłopaki jestem pewien, że stosowanie tego codziennie, tak jak w naszych salach jadalnych. 833 00:45:15,780 --> 00:45:18,160 Więc musimy iść w i dostać nasze tace, jestem 834 00:45:18,160 --> 00:45:21,260 czy masz czekać w kolejce aby przesunąć lub dostać się do jedzenia. 835 00:45:21,260 --> 00:45:24,650 >> Więc różnica tutaj jest to, że jest to FIFO. 836 00:45:24,650 --> 00:45:30,090 Więc jeśli LIFO był ostatnio w pierwszy się, FIFO jest pierwszy, pierwsze wyszło. 837 00:45:30,090 --> 00:45:33,400 Tak to jest, gdy cokolwiek umieścić na pierwszy jest najbardziej istotne. 838 00:45:33,400 --> 00:45:35,540 Więc jeśli czekali w line-- można 839 00:45:35,540 --> 00:45:39,130 Wyobraźcie sobie, że udał się do przejdź się nowy iPhone 840 00:45:39,130 --> 00:45:42,800 i to, gdy stos Ostatnia osoba w kolejce dostał pierwszy, 841 00:45:42,800 --> 00:45:44,160 ludzie zabijają się nawzajem. 842 00:45:44,160 --> 00:45:49,800 >> Więc FIFO, wszyscy jesteśmy bardzo znane się w świecie rzeczywistym tutaj, 843 00:45:49,800 --> 00:45:54,930 i to wszystko ma do czynienia z rzeczywiście rodzaj odtworzyć całą tę linię 844 00:45:54,930 --> 00:45:56,900 i kolejkowanie strukturę. 845 00:45:56,900 --> 00:46:02,390 Tak więc podczas gdy w stosie, mamy impuls i pop. 846 00:46:02,390 --> 00:46:06,440 Z kolejce, mamy enqueue i usunie. 847 00:46:06,440 --> 00:46:10,910 Więc w zasadzie oznacza enqueue umieścić go na plecy, 848 00:46:10,910 --> 00:46:13,680 i usunie z niej środki podjąć off od przodu. 849 00:46:13,680 --> 00:46:18,680 Więc nasza struktura danych jest trochę bardziej skomplikowane. 850 00:46:18,680 --> 00:46:21,060 Mamy drugą rzeczą do śledzenia. 851 00:46:21,060 --> 00:46:25,950 >> Więc bez głowy, to jest dokładnie stos, prawda? 852 00:46:25,950 --> 00:46:27,900 To jest taka sama struktura postaci stosu. 853 00:46:27,900 --> 00:46:32,480 Jedyne co teraz jest to inna mają tę głowę, co to, co myślisz 854 00:46:32,480 --> 00:46:34,272 zamierza śledzić? 855 00:46:34,272 --> 00:46:35,510 >> Publiczność: pierwszy. 856 00:46:35,510 --> 00:46:38,685 >> GŁOŚNIK 1: Prawo, Pierwszą rzeczą, którą możemy umieścić w. 857 00:46:38,685 --> 00:46:41,130 Szef naszej kolejki. 858 00:46:41,130 --> 00:46:42,240 Kto jest pierwszy w kolejce. 859 00:46:42,240 --> 00:46:45,300 860 00:46:45,300 --> 00:46:49,420 W porządku, więc jeśli zrobimy Kolejkuj. 861 00:46:49,420 --> 00:46:52,720 862 00:46:52,720 --> 00:46:55,920 Ponownie, z dowolnym te struktury danych, 863 00:46:55,920 --> 00:46:59,760 ponieważ mamy do czynienia z tablicy, musimy sprawdzić, czy mamy miejsca. 864 00:46:59,760 --> 00:47:03,290 >> To jest trochę jak mi mówią wy, jeśli otworzysz plik, 865 00:47:03,290 --> 00:47:04,760 trzeba sprawdzić, null. 866 00:47:04,760 --> 00:47:08,330 W każdym z tych stosów i kolejki, trzeba 867 00:47:08,330 --> 00:47:13,420 aby sprawdzić, czy nie ma miejsca, bo jesteśmy do czynienia ze stałą tablicy wielkości, 868 00:47:13,420 --> 00:47:16,030 jak widzimy here-- 0, 1 wszystko do 5. 869 00:47:16,030 --> 00:47:20,690 Więc co możemy zrobić w tym przypadku jest kontrola aby sprawdzić, czy mamy jeszcze miejsca. 870 00:47:20,690 --> 00:47:23,110 Jest mniejsza niż rozmiar naszej mocy? 871 00:47:23,110 --> 00:47:28,480 >> Jeśli tak, musimy przechowywać go w ogon i aktualizujemy naszą wielkość. 872 00:47:28,480 --> 00:47:30,250 Więc co może być ogonem w tym przypadku? 873 00:47:30,250 --> 00:47:32,360 To nie jest wyraźnie zapisana. 874 00:47:32,360 --> 00:47:33,380 Jak będziemy przechowywać go? 875 00:47:33,380 --> 00:47:34,928 Co ogon będzie? 876 00:47:34,928 --> 00:47:38,600 877 00:47:38,600 --> 00:47:40,190 >> Warto więc przejść przez ten przykład. 878 00:47:40,190 --> 00:47:44,590 Więc to jest tablica wielkości 6, prawda? 879 00:47:44,590 --> 00:47:49,220 I mamy teraz nasz rozmiar jest 5. 880 00:47:49,220 --> 00:47:55,240 A kiedy go umieścić w, to będzie , aby przejść do piątego indeksu, prawda? 881 00:47:55,240 --> 00:47:57,030 Więc przechowywać w ogonie. 882 00:47:57,030 --> 00:48:05,600 >> Innym sposobem byłoby po prostu napisać ogon Tablica w naszym indeksie wielkości, prawda? 883 00:48:05,600 --> 00:48:07,560 Jest to rozmiar 5. 884 00:48:07,560 --> 00:48:11,490 Następna rzecz pójdzie do 5. 885 00:48:11,490 --> 00:48:12,296 Cool? 886 00:48:12,296 --> 00:48:13,290 OK. 887 00:48:13,290 --> 00:48:16,350 To staje się nieco bardziej skomplikowana, kiedy zaczynamy bawić się z głową. 888 00:48:16,350 --> 00:48:17,060 Tak? 889 00:48:17,060 --> 00:48:20,090 >> Publiczność: Czy to oznacza, że ​​mamy byłby uznany tablicę 890 00:48:20,090 --> 00:48:23,880 była długa i pięć elementów Następnie dodajemy na nią? 891 00:48:23,880 --> 00:48:24,730 >> 1 głośnik: Nie 892 00:48:24,730 --> 00:48:27,560 Tak więc w tym przypadku jest to stosu. 893 00:48:27,560 --> 00:48:31,760 To być zadeklarowane jako tablica wielkości 6. 894 00:48:31,760 --> 00:48:37,120 I w tym przypadku mamy Wystarczy jedno miejsce w lewo. 895 00:48:37,120 --> 00:48:42,720 >> OK, więc jedno jest w tym przypadku, jeśli nasz szef jest na 0, 896 00:48:42,720 --> 00:48:45,270 następnie po prostu je dodać w rozmiarze. 897 00:48:45,270 --> 00:48:51,020 Ale robi się trochę trudniejsze bo rzeczywiście, oni 898 00:48:51,020 --> 00:48:52,840 nie ma slajdów za to, więc idę 899 00:48:52,840 --> 00:48:56,670 wyciągnąć jeden, bo to nie jest dość, że proste, gdy Ciebie 900 00:48:56,670 --> 00:48:59,230 rozpocznie pozbyciu rzeczy. 901 00:48:59,230 --> 00:49:03,920 Tak więc, podczas gdy w stos tylko kiedykolwiek 902 00:49:03,920 --> 00:49:08,920 martwić się o to, co rozmiar jest podczas dodawania coś na, 903 00:49:08,920 --> 00:49:15,710 w kolejce trzeba także dokonać pewność, że twoja głowa jest rozliczane, 904 00:49:15,710 --> 00:49:20,760 bo fajna rzecz o kolejkach jest to, że jeśli nie jesteś w mocy, 905 00:49:20,760 --> 00:49:23,040 rzeczywiście można uczynić go otaczają. 906 00:49:23,040 --> 00:49:28,810 >> OK, więc jeden thing-- oh, to jest straszne kreda. 907 00:49:28,810 --> 00:49:31,815 Jedną rzeczą do rozważenia jest. 908 00:49:31,815 --> 00:49:35,514 909 00:49:35,514 --> 00:49:37,140 Będziemy po prostu zrób pięć. 910 00:49:37,140 --> 00:49:41,810 OK, więc mamy zamiar powiedzieć głowa jest tutaj. 911 00:49:41,810 --> 00:49:46,140 Ten ma wartość 0, 1, 2, 3, 4. 912 00:49:46,140 --> 00:49:54,210 >> Głowa tam, i proszę mieć rzeczy w nich. 913 00:49:54,210 --> 00:49:58,340 I chcemy dodać coś, prawda? 914 00:49:58,340 --> 00:50:01,170 Więc rzeczą, że musimy wiedzieć, jest to, że szef jest zawsze 915 00:50:01,170 --> 00:50:05,620 będzie się poruszać w ten sposób i następnie zawrócić się, OK? 916 00:50:05,620 --> 00:50:10,190 >> Więc ta kolejka ma miejsce, prawda? 917 00:50:10,190 --> 00:50:13,950 Ma miejsce na początku rodzaju przeciwieństwo tego. 918 00:50:13,950 --> 00:50:17,920 Więc to, co musimy zrobić, to my trzeba obliczyć ogon. 919 00:50:17,920 --> 00:50:20,530 Jeśli wiesz, że Szef nie przeniósł, ogon 920 00:50:20,530 --> 00:50:24,630 jest tylko w macierzy Wskaźnik wielkości. 921 00:50:24,630 --> 00:50:30,000 >> Ale w rzeczywistości, jeśli używasz kolejkę, Twoja głowa jest prawdopodobnie aktualizowany. 922 00:50:30,000 --> 00:50:33,890 Więc co trzeba zrobić, to właściwie obliczyć ogon. 923 00:50:33,890 --> 00:50:39,990 Więc co możemy zrobić, to ta formuła tu, które mam zamiar dać wam 924 00:50:39,990 --> 00:50:42,680 Chłopaki myśleć, i wtedy będziemy o tym rozmawiać. 925 00:50:42,680 --> 00:50:49,567 926 00:50:49,567 --> 00:50:50,400 Więc to jest pojemność. 927 00:50:50,400 --> 00:50:55,890 928 00:50:55,890 --> 00:50:59,660 >> Więc to będzie w rzeczywistości dać sposób to zrobić. 929 00:50:59,660 --> 00:51:03,205 930 00:51:03,205 --> 00:51:04,330 Ponieważ w tym przypadku co? 931 00:51:04,330 --> 00:51:09,205 Nasz szef jest w stanie 1, nasz rozmiar wynosi 4. 932 00:51:09,205 --> 00:51:11,760 933 00:51:11,760 --> 00:51:18,490 Jeśli mod, który przez 5, otrzymujemy 0, czyli tam, gdzie powinniśmy wejście to. 934 00:51:18,490 --> 00:51:23,320 935 00:51:23,320 --> 00:51:26,080 >> Tak więc w następnym przypadku gdybyśmy mieli to zrobić, 936 00:51:26,080 --> 00:51:33,390 powiedzieć, OK, niech usunie z niej coś. 937 00:51:33,390 --> 00:51:34,390 Mamy z kolejki to. 938 00:51:34,390 --> 00:51:37,740 Bierzemy się ten element, prawda? 939 00:51:37,740 --> 00:51:47,930 >> A teraz nasza głowa jest skierowana tutaj, i chcemy dodać w innej rzeczy. 940 00:51:47,930 --> 00:51:52,470 Jest to w zasadzie z powrotem z naszej linii, prawda? 941 00:51:52,470 --> 00:51:55,450 Kolejki mogą owinąć się wokół tablicy. 942 00:51:55,450 --> 00:51:57,310 To jedna z głównych różnic. 943 00:51:57,310 --> 00:51:58,780 Stosy, nie możesz tego zrobić. 944 00:51:58,780 --> 00:52:01,140 >> Z kolejki, można bo wszystko, co się liczy 945 00:52:01,140 --> 00:52:03,940 jest to, że wiesz, co został ostatnio dodany. 946 00:52:03,940 --> 00:52:10,650 Skoro wszystko ma być dodany w Ten kierunek w lewo, w tym przypadku, 947 00:52:10,650 --> 00:52:16,480 a następnie owinąć wokół, można nadal wprowadzenie nowych elementów 948 00:52:16,480 --> 00:52:18,830 w przedniej części tablicy bo to naprawdę nie jest 949 00:52:18,830 --> 00:52:20,640 Przód tablicy już. 950 00:52:20,640 --> 00:52:26,320 Można myśleć o początku Tablica jak gdzie twoja głowa jest w rzeczywistości. 951 00:52:26,320 --> 00:52:29,710 >> Tak to jest, jak formuła obliczyć swój ogon. 952 00:52:29,710 --> 00:52:32,780 953 00:52:32,780 --> 00:52:35,610 Czy to ma sens? 954 00:52:35,610 --> 00:52:36,110 OK. 955 00:52:36,110 --> 00:52:39,400 956 00:52:39,400 --> 00:52:44,040 OK, usunie z niej, a następnie macie 10 minut 957 00:52:44,040 --> 00:52:48,840 zadać mi jakieś pytania wyjaśnienia chcesz, bo wiem, że jest szalony. 958 00:52:48,840 --> 00:52:51,980 >> W porządku, więc w tym samym way-- Nie wiem, czy wy zauważyliście, 959 00:52:51,980 --> 00:52:53,450 ale CS jest o wzory. 960 00:52:53,450 --> 00:52:57,370 Rzeczy są bardzo samo, tylko z drobnymi ulepszeniami. 961 00:52:57,370 --> 00:52:58,950 Tak samo tutaj. 962 00:52:58,950 --> 00:53:04,040 Musimy sprawdzić, czy rzeczywiście coś w naszym kolejce, prawda? 963 00:53:04,040 --> 00:53:05,960 Powiedzieć, OK, to nasz rozmiar większy niż 0? 964 00:53:05,960 --> 00:53:06,730 Fajne. 965 00:53:06,730 --> 00:53:10,690 >> Jeśli nie, to możemy przenieść naszą głowę, co jest to, co ja po prostu wykazać tutaj. 966 00:53:10,690 --> 00:53:13,870 Aktualizujemy naszą głowę za jeden więcej. 967 00:53:13,870 --> 00:53:18,390 A potem zmniejszać nasze Wielkość i powrócić element. 968 00:53:18,390 --> 00:53:21,000 969 00:53:21,000 --> 00:53:26,250 >> Jest o wiele bardziej konkretne Kod na study.cs50.net, 970 00:53:26,250 --> 00:53:29,440 a ja bardzo polecam przez to, jeśli masz czas, 971 00:53:29,440 --> 00:53:30,980 nawet jeśli jest to tylko pseudo-kod. 972 00:53:30,980 --> 00:53:35,980 A jeśli chcecie rozmawiać przez że ze mną jeden na jednego, poinformuj mnie 973 00:53:35,980 --> 00:53:37,500 wiem. 974 00:53:37,500 --> 00:53:38,770 Byłbym szczęśliwy. 975 00:53:38,770 --> 00:53:42,720 Struktury danych, jeśli wziąć CS 124, będziesz 976 00:53:42,720 --> 00:53:47,830 wiem, że bardzo się struktury danych zabawy i to jest dopiero początek. 977 00:53:47,830 --> 00:53:50,350 >> Tak wiem, że to trudne. 978 00:53:50,350 --> 00:53:51,300 Jest OK. 979 00:53:51,300 --> 00:53:52,410 Zmagamy. 980 00:53:52,410 --> 00:53:53,630 I jeszcze zrobić. 981 00:53:53,630 --> 00:53:56,660 Więc nie martw się zbytnio o tym. 982 00:53:56,660 --> 00:54:02,390 >> Ale to jest w zasadzie your Crash Course w strukturach danych. 983 00:54:02,390 --> 00:54:03,400 Wiem, że to dużo. 984 00:54:03,400 --> 00:54:06,860 Czy jest coś, że chciałbym przejść jeszcze raz? 985 00:54:06,860 --> 00:54:09,400 Wszystko, co chcemy rozmawiać przez? 986 00:54:09,400 --> 00:54:10,060 Tak? 987 00:54:10,060 --> 00:54:16,525 >> Publiczność: W tym przykładzie, więc nowy ogon jest na 0 nad tym? 988 00:54:16,525 --> 00:54:17,150 1 głośnik: Tak. 989 00:54:17,150 --> 00:54:18,230 Publiczność: OK. 990 00:54:18,230 --> 00:54:24,220 Tak to przeżywa, że masz jeden plus 4 or-- 991 00:54:24,220 --> 00:54:27,671 >> GŁOŚNIK 1: Więc mówisz, gdy chcemy iść to zrobić jeszcze raz? 992 00:54:27,671 --> 00:54:28,296 Publiczność: Tak. 993 00:54:28,296 --> 00:54:38,290 Więc jeśli były zastanawianie out-- gdzie są uzyskanie informacji od ogona w tym? 994 00:54:38,290 --> 00:54:44,260 >> 1 głośnik: Tak ogon był in-- zmieniłem to. 995 00:54:44,260 --> 00:54:52,010 Tak więc w tym przypadku tutaj, to było Tablica patrzymy, OK? 996 00:54:52,010 --> 00:54:54,670 Tak więc mamy co w 1, 2, 3 i 4. 997 00:54:54,670 --> 00:55:05,850 Mamy więc nasza głowa jest równa 1 w ten punkt, a nasza wielkość jest równa 4 998 00:55:05,850 --> 00:55:07,050 w tym miejscu, prawda? 999 00:55:07,050 --> 00:55:08,960 >> Wszyscy zgadzają się, że to przypadek? 1000 00:55:08,960 --> 00:55:14,620 Więc robimy głowę plus rozmiar, który daje 5, a potem mod przez 5. 1001 00:55:14,620 --> 00:55:20,690 Dostajemy 0, który mówi nam, że 0 jest gdzie jest nasz ogon, gdzie mamy miejsca. 1002 00:55:20,690 --> 00:55:22,010 >> Publiczność: Co czapka? 1003 00:55:22,010 --> 00:55:23,520 >> GŁOŚNIK 1: pojemność. 1004 00:55:23,520 --> 00:55:24,020 Przepraszam. 1005 00:55:24,020 --> 00:55:29,640 Tak, że jest rozmiar macierzy. 1006 00:55:29,640 --> 00:55:35,210 1007 00:55:35,210 --> 00:55:36,047 Tak? 1008 00:55:36,047 --> 00:55:39,210 >> PUBLICZNOŚCI: [niesłyszalne] przed wracamy element? 1009 00:55:39,210 --> 00:55:46,270 >> GŁOŚNIK 1: Więc ruszamy głowy lub powrót moment? 1010 00:55:46,270 --> 00:55:52,680 Jeśli więc przenieść jeden, zmniejszyć rozmiar? 1011 00:55:52,680 --> 00:55:54,150 Trzymaj się. 1012 00:55:54,150 --> 00:55:55,770 I na pewno zapomniał drugiego. 1013 00:55:55,770 --> 00:56:00,646 1014 00:56:00,646 --> 00:56:01,990 Nic nie szkodzi. 1015 00:56:01,990 --> 00:56:04,980 Nie ma inny wzór. 1016 00:56:04,980 --> 00:56:09,980 Tak, co chcesz, aby powrócić głowa, a następnie przenieść go z powrotem. 1017 00:56:09,980 --> 00:56:13,270 >> Publiczność: OK, ponieważ w tym punktem, głowa była na 0, 1018 00:56:13,270 --> 00:56:18,452 a następnie chcesz powrócić indeksu 0, a następnie dokonać głową 1? 1019 00:56:18,452 --> 00:56:19,870 >> GŁOŚNIK 1: Prawo. 1020 00:56:19,870 --> 00:56:22,820 Myślę, że nie ma innego formuła trochę jak ten. 1021 00:56:22,820 --> 00:56:26,970 Nie mam go na szczycie mojej głowy, jak Nie chcę dać niewłaściwy. 1022 00:56:26,970 --> 00:56:35,470 Ale myślę, że to ważne, aby idealnie powiedzmy, OK, nie przechowuj element-- cokolwiek 1023 00:56:35,470 --> 00:56:40,759 Element HEAD is-- zmniejszyć swoje rozmiar, przesunąć głowę nad i powrót 1024 00:56:40,759 --> 00:56:41,800 co ten element jest. 1025 00:56:41,800 --> 00:56:44,760 To jest całkowicie poprawny. 1026 00:56:44,760 --> 00:56:45,260 OK. 1027 00:56:45,260 --> 00:56:48,360 1028 00:56:48,360 --> 00:56:53,560 Czuję, że to nie jest jak most-- nie jesteś 1029 00:56:53,560 --> 00:56:55,740 zamiar stąd wyjść jak, tak, wiem, że próbuje. 1030 00:56:55,740 --> 00:56:56,880 Mam wszystko. 1031 00:56:56,880 --> 00:56:57,670 To jest OK. 1032 00:56:57,670 --> 00:57:00,200 Obiecuję. 1033 00:57:00,200 --> 00:57:05,240 Ale struktury danych są czymś, zajmuje dużo czasu, aby się przyzwyczaić. 1034 00:57:05,240 --> 00:57:10,010 Prawdopodobnie jednym z najtrudniejszych rzeczy, myślę, że w toku. 1035 00:57:10,010 --> 00:57:15,330 >> Więc to na pewno ma powtarzanie i patrząc at-- I 1036 00:57:15,330 --> 00:57:20,050 tak naprawdę nie wiem, związane list aż zrobiłem zbyt wiele z nich, 1037 00:57:20,050 --> 00:57:22,550 w ten sam sposób, że nie naprawdę zrozumieć wskaźniki 1038 00:57:22,550 --> 00:57:27,040 aż musiałem nauczyć go dla dwóch lat i zrobić własne psets z nim. 1039 00:57:27,040 --> 00:57:28,990 To zajmuje dużo powtórzył i czasu. 1040 00:57:28,990 --> 00:57:32,600 I w końcu, będzie to rodzaj kliknij. 1041 00:57:32,600 --> 00:57:36,320 >> Ale w międzyczasie, jeśli masz rodzaj o wysoki poziom zrozumienia tego, co 1042 00:57:36,320 --> 00:57:39,321 to zrobić, ich plusy i cons-- który jest co 1043 00:57:39,321 --> 00:57:41,820 naprawdę mają tendencję do podkreślenia, w szczególności w trakcie intra. 1044 00:57:41,820 --> 00:57:45,511 Jak, dlaczego używamy spróbuj na tablicy? 1045 00:57:45,511 --> 00:57:48,010 Jak, jakie są pozytywy i negatywy każdego z tych? 1046 00:57:48,010 --> 00:57:51,610 >> I zrozumienia kompromisów pomiędzy każdą z tych struktur 1047 00:57:51,610 --> 00:57:54,910 to, co jest o wiele ważniejsze teraz. 1048 00:57:54,910 --> 00:57:58,140 Nie może być jeden szalony pytanie lub dwa to 1049 00:57:58,140 --> 00:58:03,710 zamiar poprosić pchania lub wdrożyć wdrożenie pop lub Kolejkuj i usunie. 1050 00:58:03,710 --> 00:58:07,340 Jednak dla większości, mającej tę wyższy poziom i więcej zrozumienia 1051 00:58:07,340 --> 00:58:09,710 z intuicyjne zrozumienie jest ważniejsze niż w rzeczywistości 1052 00:58:09,710 --> 00:58:11,250 możliwość jego realizacji. 1053 00:58:11,250 --> 00:58:14,880 >> Byłoby naprawdę super, jeśli was wszystkich może wyjść i przejść wdrożenia spróbować, 1054 00:58:14,880 --> 00:58:19,720 ale rozumiem, że nie koniecznie Najbardziej rozsądna rzecz teraz. 1055 00:58:19,720 --> 00:58:23,370 Ale można w Pset, jeśli chcesz się, a następnie dostaniesz praktyki, 1056 00:58:23,370 --> 00:58:27,200 i wtedy może będziesz naprawdę zrozumieć. 1057 00:58:27,200 --> 00:58:27,940 Tak? 1058 00:58:27,940 --> 00:58:30,440 >> Publiczność: OK, więc, które z nich są rozumie się, że do stosowania w zbior? 1059 00:58:30,440 --> 00:58:31,916 Czy muszę korzystać z jednego z nich? 1060 00:58:31,916 --> 00:58:32,540 1 głośnik: Tak. 1061 00:58:32,540 --> 00:58:34,199 Więc masz wybór. 1062 00:58:34,199 --> 00:58:36,740 Myślę, że w tym przypadku, możemy mówić o Pset trochę bitowym 1063 00:58:36,740 --> 00:58:40,480 bo prowadził przez nich. 1064 00:58:40,480 --> 00:58:47,779 Więc w Pset, masz Wybór prób lub tabel hash. 1065 00:58:47,779 --> 00:58:49,570 Niektórzy ludzie będą próbować i używać filtrów rozkwicie, 1066 00:58:49,570 --> 00:58:51,840 ale ci, technicznie nie są poprawne. 1067 00:58:51,840 --> 00:58:55,804 Ze względu na ich charakter probabilistyczny, dają fałszywe alarmy czasami. 1068 00:58:55,804 --> 00:58:57,095 Są fajne spojrzenie na, choć. 1069 00:58:57,095 --> 00:58:59,030 Polecamy zapoznanie w nich co najmniej. 1070 00:58:59,030 --> 00:59:03,260 Ale masz wybór między tabeli mieszania i spróbować. 1071 00:59:03,260 --> 00:59:06,660 I że będzie gdzie ładowany do słownika. 1072 00:59:06,660 --> 00:59:09,230 >> I musisz wybrać Twoja funkcja skrótu, 1073 00:59:09,230 --> 00:59:13,420 musisz wybrać ile Wiadra masz, i będzie się zmieniać. 1074 00:59:13,420 --> 00:59:17,440 Jak, jeśli masz więcej wiader, być może będzie to działać szybciej. 1075 00:59:17,440 --> 00:59:22,790 Ale może marnujesz dużo miejsca w ten sposób, choć. 1076 00:59:22,790 --> 00:59:26,320 Musisz zrozumieć. 1077 00:59:26,320 --> 00:59:27,140 MMHMM? 1078 00:59:27,140 --> 00:59:29,875 >> PUBLICZNOŚCI: Powiedziałeś wcześniej, że możemy korzystać z innych funkcji skrótu, 1079 00:59:29,875 --> 00:59:31,750 że nie mamy do stworzenie funkcji skrótu? 1080 00:59:31,750 --> 00:59:32,666 >> 1 głośnik: Tak, tak. 1081 00:59:32,666 --> 00:59:38,150 Więc dosłownie dla funkcji skrótu, jak google "funkcja skrótu" 1082 00:59:38,150 --> 00:59:40,770 i patrzeć na jakieś fajne te. 1083 00:59:40,770 --> 00:59:43,250 Nie oczekuje się, aby budować własne funkcje skrótu. 1084 00:59:43,250 --> 00:59:46,100 Ludzie spędzają Tezy o tych rzeczach. 1085 00:59:46,100 --> 00:59:50,250 >> Więc nie martw się o budowę własnego. 1086 00:59:50,250 --> 00:59:53,350 Znajdź jeden online, na początek. 1087 00:59:53,350 --> 00:59:56,120 Niektóre z nich trzeba trochę manipulować 1088 00:59:56,120 --> 00:59:59,430 aby upewnić się, że powrót dopasować typy i cokolwiek, więc na początku, 1089 00:59:59,430 --> 01:00:02,420 Polecam za pomocą czegoś bardzo proste, że może po prostu 1090 01:00:02,420 --> 01:00:04,680 skróty na pierwszą literę. 1091 01:00:04,680 --> 01:00:08,760 A potem, gdy już, że praca, wyposażone w chłodnicy funkcji skrótu. 1092 01:00:08,760 --> 01:00:09,260 MMHMM? 1093 01:00:09,260 --> 01:00:13,020 >> Publiczność: Czy spróbować się lub skuteczne, ale tylko trudniej, like-- 1094 01:00:13,020 --> 01:00:15,880 >> GŁOŚNIK 1: Więc spróbować, myślę, jest trudne do wdrożenia intuicyjnie 1095 01:00:15,880 --> 01:00:18,310 ale jest bardzo szybki. 1096 01:00:18,310 --> 01:00:20,620 Jednak zajmuje więcej miejsca. 1097 01:00:20,620 --> 01:00:25,270 Ponownie, można zoptymalizować zarówno tych, w różne sposoby i istnieją sposoby to-- 1098 01:00:25,270 --> 01:00:26,770 Odbiorcy: Jak mamy klasyfikowane w tej sprawie? 1099 01:00:26,770 --> 01:00:27,540 Czy matter-- 1100 01:00:27,540 --> 01:00:29,164 >> GŁOŚNIK 1: Więc klasyfikowane normalny sposób. 1101 01:00:29,164 --> 01:00:31,330 Masz zamiar być klasyfikowane na projektowaniu. 1102 01:00:31,330 --> 01:00:36,020 Niezależnie od tego, robisz, chcesz upewnij się, że jest tak eleganckie, jak to może być 1103 01:00:36,020 --> 01:00:38,610 i tak skuteczne, jak to tylko możliwe. 1104 01:00:38,610 --> 01:00:41,950 Ale jeśli zdecydujesz się spróbować lub skrótu tabeli, o ile działa 1105 01:00:41,950 --> 01:00:45,350 jesteśmy z tego zadowoleni. 1106 01:00:45,350 --> 01:00:48,370 A jeśli używasz czegoś, skróty na pierwszą literę, to w porządku, 1107 01:00:48,370 --> 01:00:51,410 jak może jak design-mądry. 1108 01:00:51,410 --> 01:00:53,410 Mamy również osiągnięcia punkt w tej semester-- 1109 01:00:53,410 --> 01:00:55,340 Nie wiem, czy Ciebie faceci noticed-- jeśli jesteś 1110 01:00:55,340 --> 01:00:58,780 stopnie Pset trochę spadnie ze względu na design i etażerka, 1111 01:00:58,780 --> 01:00:59,900 to perfekcyjnie. 1112 01:00:59,900 --> 01:01:02,960 Robi się do punktu, gdzie programy są coraz bardziej skomplikowane. 1113 01:01:02,960 --> 01:01:04,830 Jest więcej miejsca można poprawić. 1114 01:01:04,830 --> 01:01:06,370 >> Więc jest to zupełnie normalne. 1115 01:01:06,370 --> 01:01:08,810 To nie jest, że jesteś robi gorzej na Pset. 1116 01:01:08,810 --> 01:01:11,885 To tylko my jest trudniejsze od ciebie. 1117 01:01:11,885 --> 01:01:13,732 Więc każdy czuje go. 1118 01:01:13,732 --> 01:01:14,940 Właśnie klasyfikowane wszystkie psets. 1119 01:01:14,940 --> 01:01:16,490 Wiem, że każdy czuje się go. 1120 01:01:16,490 --> 01:01:19,600 >> Więc nie martwić się o to. 1121 01:01:19,600 --> 01:01:23,580 A jeśli masz jakiekolwiek pytania na temat wcześniejsze psets lub sposobów można poprawić, 1122 01:01:23,580 --> 01:01:27,760 Staram specyficzne i komentować miejsca, ale czasami jest to późno 1123 01:01:27,760 --> 01:01:30,840 i jestem zmęczony. 1124 01:01:30,840 --> 01:01:34,885 Czy są jakieś inne rzeczy o struktury danych? 1125 01:01:34,885 --> 01:01:37,510 Jestem pewien, że ludzie tak naprawdę nie chcę mówić o nich więcej, 1126 01:01:37,510 --> 01:01:42,650 ale jeśli nie, jestem szczęśliwy przejść nad nimi, jak również czegokolwiek 1127 01:01:42,650 --> 01:01:45,580 z tym ostatnim wykładzie tydzień w zeszłym tygodniu. 1128 01:01:45,580 --> 01:01:51,580 >> Wiem, że w zeszłym tygodniu było wszystko, ocena, więc możemy mieć pomijane jakiegoś przeglądu 1129 01:01:51,580 --> 01:01:54,190 z wykładu. 1130 01:01:54,190 --> 01:01:58,230 Wszelkie inne pytania mogę odpowiedzieć? 1131 01:01:58,230 --> 01:01:59,350 OK, wszystko w porządku. 1132 01:01:59,350 --> 01:02:02,400 No, chłopaki wyjść 15 minut przed czasem. 1133 01:02:02,400 --> 01:02:08,370 >> Mam nadzieję, że to było pół-pomocny przynajmniej, i widzę was w przyszłym tygodniu, 1134 01:02:08,370 --> 01:02:12,150 lub czwartek godziny pracy. 1135 01:02:12,150 --> 01:02:15,285 Czy wnioski o przekąski w przyszłym tygodniu, to co? 1136 01:02:15,285 --> 01:02:17,459 Bo zapomniałem cukierki dziś. 1137 01:02:17,459 --> 01:02:19,750 I przyniósł cukierki ostatni tydzień, ale było Columbus Day, 1138 01:02:19,750 --> 01:02:25,400 więc nie było jak sześć osób miał cztery torby cukierków do siebie. 1139 01:02:25,400 --> 01:02:28,820 Mogę przynieść Starbursts ponownie, jeśli chcesz. 1140 01:02:28,820 --> 01:02:29,580 Starbursts? 1141 01:02:29,580 --> 01:02:32,250 OK, brzmi dobrze. 1142 01:02:32,250 --> 01:02:35,050 Miłego dnia, chłopaki. 1143 01:02:35,050 --> 01:02:39,510