1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Hét 6] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvard Egyetem] 3 00:00:04,000 --> 00:00:08,000 [Ez a CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Ez CS50, és ez a kezdete Hét 6, 5 00:00:12,000 --> 00:00:16,000 így egy pár új eszközök már elérhető az Ön számára, hogy kihasználják, 6 00:00:16,000 --> 00:00:19,000 melyek közül az első az úgynevezett CS50 Style. 7 00:00:19,000 --> 00:00:22,000 Valószínű, ha te, mint én, vagy a tanítás ösztöndíjasok, 8 00:00:22,000 --> 00:00:26,000 akkor már valószínűleg látott egy programot, amelynek stílusa egy kicsit úgy néz ki, valami ilyesmi. 9 00:00:26,000 --> 00:00:30,000 Talán kezd vágás néhány sarkok késő este, vagy akkor foglalkozni vele később, 10 00:00:30,000 --> 00:00:32,000 majd egy TF vagy CA átjön munkaidőben. 11 00:00:32,000 --> 00:00:34,000 Akkor nehéz nekünk olvasni. 12 00:00:34,000 --> 00:00:38,000 Nos, ez a kód szintaktikailag helyes, és ez le, és ez lesz a ténylegesen megtett. 13 00:00:38,000 --> 00:00:40,000 De ez egyáltalán nem egy 5 a stílus. 14 00:00:40,000 --> 00:00:45,000 >> De most, ha bemegy ebbe a könyvtárba a továb- 15 00:00:45,000 --> 00:00:48,000 , és vegyük észre, hogy van conditions2.c- 16 00:00:48,000 --> 00:00:55,000 és Én vezetem ezt az új parancs style50, az ezt a fájlt conditions2.c, az Enter, 17 00:00:55,000 --> 00:00:57,000 észre, hogy ez közölte velem, hogy ez már stilizált. 18 00:00:57,000 --> 00:01:00,000 Gedit észrevette, hogy a fájl megváltozott a lemezen, 19 00:01:00,000 --> 00:01:08,000 és ha újra kattint, az összes problémát már automatizált. 20 00:01:08,000 --> 00:01:15,000 [Taps] 21 00:01:15,000 --> 00:01:17,000 Ez az egyik dolog, amit tett ezen a hétvégén. 22 00:01:17,000 --> 00:01:20,000 Ismerd fel, hogy ez a tökéletlen, mert vannak olyan kódot 23 00:01:20,000 --> 00:01:23,000 hogy egyszerűen nem lesz képes, hogy stilizál tökéletesen, 24 00:01:23,000 --> 00:01:26,000 de észre ez most egy eszköz csak akkor veheti igénybe a 25 00:01:26,000 --> 00:01:33,000 ha csak rendet néhány látna errantly elhelyezett kapcsos zárójelek és hasonlók. 26 00:01:33,000 --> 00:01:36,000 >> De még kényszerítő most CS50 megtekintése. 27 00:01:36,000 --> 00:01:39,000 A CS50 Check, akkor valóban végezze el ugyanazt a helyességét vizsgálatok 28 00:01:39,000 --> 00:01:42,000 a saját kódját, hogy a tanítási fickók képesek. 29 00:01:42,000 --> 00:01:44,000 Ez egy parancssori segédprogram, ami most a készülék 30 00:01:44,000 --> 00:01:46,000 amint te egy update50, mint egy 31 00:01:46,000 --> 00:01:49,000 Pset 4 előírásokat, és használja azt lényegében, mint ez. 32 00:01:49,000 --> 00:01:51,000 Azt a parancsot check50. 33 00:01:51,000 --> 00:01:56,000 Akkor át egy parancssori argumentum, vagy még általánosabban ismert kapcsolóval vagy a zászló. 34 00:01:56,000 --> 00:01:58,000 Általában, a dolgok, amelyek kötőjelek hívják kapcsoló 35 00:01:58,000 --> 00:02:02,000 egy parancssori program, így a-c meghatározza 36 00:02:02,000 --> 00:02:04,000 az ellenőrzések, hogy a futtatni kívánt. 37 00:02:04,000 --> 00:02:07,000 >> A teszteket futtatni kívánt azonosítja egyedileg ez string, 38 00:02:07,000 --> 00:02:10,000 2012/pset4/resize. 39 00:02:10,000 --> 00:02:13,000 Más szóval, ez csak egy tetszőleges, de egyedi karaktersorozat 40 00:02:13,000 --> 00:02:18,000 hogy az általunk használt, amely egyedileg azonosítja Pset 4-es helyességét vizsgálatok. 41 00:02:18,000 --> 00:02:21,000 És akkor meg egy szóközzel elválasztott lista a kívánt fájlokat feltölteni 42 00:02:21,000 --> 00:02:24,000 A CS50 Check elemzésre. 43 00:02:24,000 --> 00:02:29,000 Például, ha elmegyek az én megoldás itt resize.c- 44 00:02:29,000 --> 00:02:31,000 hadd nyit egy nagyobb terminál ablak 45 00:02:31,000 --> 00:02:42,000 és úgy megy előre, és fuss mondjuk check50-c 2012/pset4/resize, 46 00:02:42,000 --> 00:02:46,000 aztán megy előre, és adja meg a nevét a fájlokat, 47 00:02:46,000 --> 00:02:49,000 resize.c, majd Enter, azt tömöríti, 48 00:02:49,000 --> 00:02:53,000 azt feltöltve, ellenőrzi, és én csak nem sikerült egy csomó tesztet. 49 00:02:53,000 --> 00:02:59,000 Az egyik piros a bal felső sarokban azt mondja, hogy resize.c és bmp létezik. 50 00:02:59,000 --> 00:03:01,000 Ez volt a vizsgálat. Ez volt az a kérdés, amit feltett. 51 00:03:01,000 --> 00:03:04,000 És ez szomorú, mert a válasz hamis. 52 00:03:04,000 --> 00:03:08,000 A fehér alábbi szöveg azt mondja, várható, bmp.h létezik, és ez csak az én hibám. 53 00:03:08,000 --> 00:03:11,000 Elfelejtettem feltölteni, így azt kell feltölteni a két kép, 54 00:03:11,000 --> 00:03:14,000 resize.c és bmp.h. 55 00:03:14,000 --> 00:03:17,000 De most észre minden egyéb vizsgálatok vannak sárga, mert nem fut, 56 00:03:17,000 --> 00:03:21,000 és így a mosolygó arc függőleges, mert ő sem boldog, sem szomorú, 57 00:03:21,000 --> 00:03:25,000 de van, hogy orvosolja ezt a kérdést, mielőtt a piros egyéb ellenőrzéseket fog futni. 58 00:03:25,000 --> 00:03:27,000 >> Hadd erősít ez. 59 00:03:27,000 --> 00:03:30,000 Hadd kicsinyítés és futtassa újra ezt ezúttal is bmp.h 60 00:03:30,000 --> 00:03:34,000 a parancssorban, Enter, és most, ha minden jól megy, 61 00:03:34,000 --> 00:03:38,000 ez megy, hogy ellenőrizze, majd visszatér eredményeként, tartsa vissza a lélegzetét, 62 00:03:38,000 --> 00:03:42,000 minden zöld, ami azt jelenti, csinálok nagyon jól Pset 4 eddig. 63 00:03:42,000 --> 00:03:44,000 Láthatjuk és következtethetett a leíró szöveget ide 64 00:03:44,000 --> 00:03:47,000 Pontosan mi az teszteltük. 65 00:03:47,000 --> 00:03:49,000 Megvizsgáltuk 1. nem a fájlok léteznek? 66 00:03:49,000 --> 00:03:51,000 Ezután teszteltük fejti resize.c fordítás? 67 00:03:51,000 --> 00:03:58,000 Aztán tesztelt jelent ez nem átméretezni egy 1x1 pixeles BMP ha n, az átméretezés tényező 1 lehet. 68 00:03:58,000 --> 00:04:01,000 Most, ha fogalmad sincs, mi n, akkor egyszer belevetik magukat Pset 4, 69 00:04:01,000 --> 00:04:04,000 de ez egyszerűen a józan győződjön meg róla, hogy te nem átméretezés 70 00:04:04,000 --> 00:04:08,000 képet egyáltalán, ha az átméretezés tényező 1 lehet. 71 00:04:08,000 --> 00:04:14,000 Ha viszont, hogy átméretezi a 1x1 pixel egy 1x1 pixel BMP 2x2 helyesen 72 00:04:14,000 --> 00:04:19,000 ha n értéke 2, akkor hasonlóan, enyém formák megfelelően. 73 00:04:19,000 --> 00:04:22,000 >> Röviden, ez azt jelentette, hogy az egyik, hogy a keresztezési az ujjak 74 00:04:22,000 --> 00:04:25,000 ki az egyenlet jobb, mielőtt be Pset. 75 00:04:25,000 --> 00:04:28,000 Ön pontosan tudja, mi a TF hamarosan tudni 76 00:04:28,000 --> 00:04:30,000 ha megy a benyújtása néhány ilyen probléma készletek, 77 00:04:30,000 --> 00:04:34,000 valamint a pedagógiai motiváció valóban tenni 78 00:04:34,000 --> 00:04:37,000 lehetőséget elé úgy, hogy amikor tudod a priori 79 00:04:37,000 --> 00:04:39,000 hogy van hiba a kódban és vizsgálatokat, amelyeket még nem telt el, 80 00:04:39,000 --> 00:04:43,000 akkor tegye a hatékonyabb időben előre, hogy megoldja ezeket a problémákat 81 00:04:43,000 --> 00:04:45,000 ahelyett veszít pontokat, kap visszajelzést a TF, 82 00:04:45,000 --> 00:04:48,000 és aztán megy, "Ó," mint kellett volna gondoltam, hogy ki. 83 00:04:48,000 --> 00:04:50,000 Most legalább van egy eszköz, amely segít megtalálni azt. 84 00:04:50,000 --> 00:04:52,000 Ez nem fog rámutatni, hol van a hiba, de ez fogja mondani 85 00:04:52,000 --> 00:04:54,000 milyen tünete is. 86 00:04:54,000 --> 00:04:57,000 >> Most már észre a tesztek nem feltétlenül teljes. 87 00:04:57,000 --> 00:04:59,000 Csak azért, mert kapsz egy teljes képernyős zöld smiley arcok 88 00:04:59,000 --> 00:05:02,000 nem azt jelenti, a kód nem tökéletes, de ez nem jelenti azt, 89 00:05:02,000 --> 00:05:06,000 hogy átment bizonyos tesztek által előírt spec. 90 00:05:06,000 --> 00:05:08,000 Néha mi nem mentesíti ellenőrzéseket. 91 00:05:08,000 --> 00:05:10,000 Például, detektívregény egyik aspektusa Pset 4, 92 00:05:10,000 --> 00:05:15,000 az a fajta kiábrándító, ha Önnek 93 00:05:15,000 --> 00:05:18,000 a választ, hogy mi az, és van számos módon, hogy felfedje 94 00:05:18,000 --> 00:05:21,000 aki az érintett személy, hogy a piros a zajt. 95 00:05:21,000 --> 00:05:24,000 A spec mindig meghatározza a jövőben Pset 5-től kezdődően 96 00:05:24,000 --> 00:05:26,000 milyen ellenőrzi létezik az Ön számára. 97 00:05:26,000 --> 00:05:28,000 Észre fogod venni, van ez a fehér URL alján. 98 00:05:28,000 --> 00:05:30,000 Most, ez csak a diagnosztikai kimenet. 99 00:05:30,000 --> 00:05:33,000 Ha felkeresi az URL, akkor kap egy csomó őrült, rejtélyes üzenetek 100 00:05:33,000 --> 00:05:36,000 hogy te szívesen, hogy nézze át, de ez leginkább a személyzet 101 00:05:36,000 --> 00:05:41,000 hogy tudjuk diagnosztizálni és hibakeresést hibákat check50 magát. 102 00:05:41,000 --> 00:05:46,000 >> Felhajtás nélkül, menjünk tovább, ahol abbahagytuk. 103 00:05:46,000 --> 00:05:48,000 CS50 könyvtár vettük adottnak néhány hétig, 104 00:05:48,000 --> 00:05:52,000 de aztán a múlt héten kezdtük bontsa fel az egyik réteg is. 105 00:05:52,000 --> 00:05:55,000 Elkezdtünk félretéve húr mellett mi helyett? 106 00:05:55,000 --> 00:05:57,000 [Diákok] Char. 107 00:05:57,000 --> 00:05:59,000 Char *, amely már a char *, egész idő alatt, 108 00:05:59,000 --> 00:06:03,000 de most már nem kell úgy tenni, mintha ez egy tényleges adatok string típusú. 109 00:06:03,000 --> 00:06:06,000 Inkább ez egy szinonimája a fajta a char *, 110 00:06:06,000 --> 00:06:09,000 és egy sor olyan karaktersorozat, 111 00:06:09,000 --> 00:06:14,000 miért van értelme, hogy képviselje karakterláncokat char * s? 112 00:06:14,000 --> 00:06:20,000 Mit jelent a char * képviselik az összefüggésben ez a fogalom egy string? 113 00:06:20,000 --> 00:06:23,000 Aha. >> [Student] Az első karakter. 114 00:06:23,000 --> 00:06:25,000 Jó, az első karakter, de nem egészen az első karakter. 115 00:06:25,000 --> 00:06:27,000 Ez a [Diákok] Cím. 116 00:06:27,000 --> 00:06:29,000 Jó, a cím az első karaktert. 117 00:06:29,000 --> 00:06:33,000 Minden, ami van szükség ahhoz, hogy egy string a számítógép memóriájában 118 00:06:33,000 --> 00:06:36,000 csak egyedi címét legelső bájt. 119 00:06:36,000 --> 00:06:38,000 Még csak nem is kell tudni, hogy meddig van 120 00:06:38,000 --> 00:06:42,000 mert hogyan lehet kitalálni, hogy ki dinamikusan? 121 00:06:42,000 --> 00:06:44,000 [Student] karakterlánc hosszát. 122 00:06:44,000 --> 00:06:48,000 Hívhatja string hossza, a kiváló, de hogyan működik string hossza működik? 123 00:06:48,000 --> 00:06:50,000 Mit tegyek? Igen. 124 00:06:50,000 --> 00:06:52,000 [Student] Folytasd, amíg nem kap a null karakter. 125 00:06:52,000 --> 00:06:54,000 Igen, pontosan, csak megismétli a for ciklus, míg a hurok, 126 00:06:54,000 --> 00:06:57,000 függetlenül a * a végéig, és a végén képviselteti magát 127 00:06:57,000 --> 00:07:01,000 a \ 0, az úgynevezett nul karakter, NUL, 128 00:07:01,000 --> 00:07:05,000 nem szabad összetéveszteni a null, amely egy mutató, 129 00:07:05,000 --> 00:07:07,000 ami jön a beszélgetés ma ismét. 130 00:07:07,000 --> 00:07:11,000 >> Mi hámozott vissza egy réteg getInt, aztán vett egy pillantást getString, 131 00:07:11,000 --> 00:07:14,000 és emlékeztetnek arra, hogy a két említett funkció, vagy tényleg, 132 00:07:14,000 --> 00:07:18,000 GetString volt egy bizonyos funkció 133 00:07:18,000 --> 00:07:21,000 hogy ténylegesen értelmezni, azaz, olvasni vagy elemezni, a felhasználó bemenet. 134 00:07:21,000 --> 00:07:25,000 És mi volt, hogy az új funkció? 135 00:07:25,000 --> 00:07:27,000 Scanf vagy sscanf. Valójában jön néhány különböző ízek. 136 00:07:27,000 --> 00:07:31,000 Van scanf, ott sscanf, ott fscanf. 137 00:07:31,000 --> 00:07:35,000 Most azonban nézzük összpontosítanak az egyik legkönnyebben látható, 138 00:07:35,000 --> 00:07:38,000 és hadd menjen előre, és nyissa fel a készüléket 139 00:07:38,000 --> 00:07:41,000 egy fájlt, mint ez, scanf1.c. 140 00:07:41,000 --> 00:07:43,000 Ez egy szuper egyszerű program, 141 00:07:43,000 --> 00:07:46,000 de ez nem olyasmi, amit soha nem csináltam 142 00:07:46,000 --> 00:07:48,000 segítsége nélkül a CS50 könyvtár. 143 00:07:48,000 --> 00:07:51,000 Ez kap egy int a felhasználó. Hogyan működik? 144 00:07:51,000 --> 00:07:53,000 Nos, sorban 16 van, 145 00:07:53,000 --> 00:07:56,000 észre, hogy állapítsa int hívott x, és ezen a ponton a történet, 146 00:07:56,000 --> 00:07:58,000 mi az x értéke? 147 00:07:58,000 --> 00:08:00,000 [Hallhatatlan hallgatói válasz] 148 00:08:00,000 --> 00:08:02,000 [David M.] Jobb, ki tudja, néhány szemét érték lehetséges, tehát a 17, csak mondd a felhasználó 149 00:08:02,000 --> 00:08:06,000 adjon nekem egy számot, kérem, és a 18 lépésben, ahol nem lesz érdekes. 150 00:08:06,000 --> 00:08:11,000 Scanf úgy tűnik, hogy kölcsön egy ötlet printf annyiban, hogy használja ezeket a formátumot kódokat idézetek. 151 00:08:11,000 --> 00:08:13,000 % D természetesen egy decimális szám. 152 00:08:13,000 --> 00:08:21,000 De miért vagyok halad és x helyett csak x? 153 00:08:21,000 --> 00:08:24,000 Az előbbi helyes. Igen. 154 00:08:24,000 --> 00:08:26,000 [Hallhatatlan hallgatói válasz] 155 00:08:26,000 --> 00:08:31,000 Pontosan, ha a cél a program, mint a funkció getInt maga 156 00:08:31,000 --> 00:08:34,000 van, hogy kap egy int a felhasználói tudom átadni funkciók 157 00:08:34,000 --> 00:08:38,000 az összes változót akarok, de ha nem adja át őket hivatkozással 158 00:08:38,000 --> 00:08:41,000 vagy a cím vagy a mutató, Az összes szinonim a mai célra, 159 00:08:41,000 --> 00:08:46,000 akkor ez a funkció nem képes megváltoztatni a tartalmát a változó. 160 00:08:46,000 --> 00:08:49,000 Ez át egy példányát, mint a buggy verzió csere 161 00:08:49,000 --> 00:08:51,000 hogy már beszéltünk néhányszor most. 162 00:08:51,000 --> 00:08:54,000 >> De ahelyett, ezzel & x, én szó szerint halad, mi? 163 00:08:54,000 --> 00:08:57,000 [Student] A cím. >> A címe x. 164 00:08:57,000 --> 00:09:01,000 Ez olyan, mint rajz egy térkép a nevezett funkció scanf és azt mondja: itt, 165 00:09:01,000 --> 00:09:04,000 ezek irányokat egy darab memória a számítógép 166 00:09:04,000 --> 00:09:07,000 hogy mehetsz tárolni néhány integer be 167 00:09:07,000 --> 00:09:10,000 Annak érdekében, hogy sscanf, hogy most csinálni 168 00:09:10,000 --> 00:09:13,000 mi üzemeltető milyen darab szintaxis fog ez kell használni 169 00:09:13,000 --> 00:09:19,000 bár nem látjuk, mert valaki más írta ezt a funkciót? 170 00:09:19,000 --> 00:09:21,000 Más szóval - mi az? 171 00:09:21,000 --> 00:09:23,000 [Student] X olvasni. 172 00:09:23,000 --> 00:09:27,000 Ott lesz némi olvasás, de csak tekintettel x itt. 173 00:09:27,000 --> 00:09:30,000 Ha a scanf kerül át a címét x, 174 00:09:30,000 --> 00:09:35,000 szintaktikailag, mi üzemeltető köteles létezik valahol 175 00:09:35,000 --> 00:09:38,000 belül scanf végrehajtásának érdekében, hogy scanf 176 00:09:38,000 --> 00:09:42,000 ténylegesen írjon egy számot 2 és ezt a címet? 177 00:09:42,000 --> 00:09:44,000 Igen, a *. 178 00:09:44,000 --> 00:09:47,000 Emlékezzünk vissza, hogy a * mi dereference operátor, ami lényegében azt jelenti, hogy ott. 179 00:09:47,000 --> 00:09:50,000 >> Miután átadták a címet, mint a jelen esetben, 180 00:09:50,000 --> 00:09:53,000 scanf valószínűleg, ha tényleg körülnézett forráskódját, 181 00:09:53,000 --> 00:09:59,000 csinál * x vagy az azzal egyenértékű, hogy valóban megy, hogy a cím és a némi értéket is. 182 00:09:59,000 --> 00:10:02,000 Most, hogy mennyi scanf kapja bemenet a billentyűzet, 183 00:10:02,000 --> 00:10:04,000 akkor hullám kezünket ki ma. 184 00:10:04,000 --> 00:10:07,000 Csak feltételezzük, hogy az operációs rendszer lehetővé teszi, hogy beszéljen sscanf 185 00:10:07,000 --> 00:10:11,000 a felhasználó billentyűzet, de ezen a ponton már sorban 19, 186 00:10:11,000 --> 00:10:14,000 amikor egyszerűen csak ki kell nyomtatni, x, úgy tűnik, hogy a helyzet 187 00:10:14,000 --> 00:10:17,000 hogy a scanf hozta int x-ben. 188 00:10:17,000 --> 00:10:19,000 Pontosan hogyan scanf működik, és emlékszem a múlt héten 189 00:10:19,000 --> 00:10:25,000 hogy pontosan hogyan getString és getInt és más családi feladatok 190 00:10:25,000 --> 00:10:28,000 végül is működik, bár némi eltérés, mint a sscanf, 191 00:10:28,000 --> 00:10:31,000 ami azt jelenti, beolvasni egy sor helyett a billentyűzetet. 192 00:10:31,000 --> 00:10:33,000 De vessünk egy pillantást egy kis variancia ezt. 193 00:10:33,000 --> 00:10:37,000 Az scanf2, én tényleg elcsesztem. 194 00:10:37,000 --> 00:10:42,000 Mi lehet a baj, és én leszek elrejteni a megjegyzést, hogy magyarázza a sok- 195 00:10:42,000 --> 00:10:47,000 mi a baj ezzel a programmal, version 2? 196 00:10:47,000 --> 00:10:55,000 Légy technikai lehető ebben az időben. 197 00:10:55,000 --> 00:10:57,000 Úgy néz ki, nagyon jó. 198 00:10:57,000 --> 00:11:03,000 Ez szépen tagolt, but- 199 00:11:03,000 --> 00:11:07,000 Oké, mit szólnál mondjuk szilva le rövidebb kérdése? 200 00:11:07,000 --> 00:11:17,000 Vonal 16. Mit csinál sor 16 pontos, de a műszaki angolul? 201 00:11:17,000 --> 00:11:20,000 Kicsit kínos. Igen, Michael. 202 00:11:20,000 --> 00:11:25,000 [Student] Ez mutat az első betű a string. 203 00:11:25,000 --> 00:11:27,000 >> Oké, közeli. Hadd csípés, hogy egy kicsit. 204 00:11:27,000 --> 00:11:33,000 Rámutatva, hogy az első betű egy string, akkor nyilvánító nevű változó puffer 205 00:11:33,000 --> 00:11:36,000 hogy fog mutatni az első címe string, 206 00:11:36,000 --> 00:11:39,000 vagy inkább, hogy fog mutatni, pontosabban a karakter. 207 00:11:39,000 --> 00:11:42,000 Értesítés ez valójában nem mutat sehova, mert nincs értékadó operátor. 208 00:11:42,000 --> 00:11:46,000 Nincs egyenlőségjel, így minden, amit csinálsz, az elosztási változó hívott puffer. 209 00:11:46,000 --> 00:11:49,000 Előfordul, hogy 32 bitre, mert ez egy mutató, 210 00:11:49,000 --> 00:11:52,000 és a tartalmát puffer feltehetőleg végül 211 00:11:52,000 --> 00:11:57,000 tartalmazni fog egy címet a char, de most, mit jelent puffert tartalmaz? 212 00:11:57,000 --> 00:11:59,000 Csak egy hamis, ki tudja, néhány szemét érték, 213 00:11:59,000 --> 00:12:03,000 mert nem kifejezetten inicializálva, ezért nem szabad feltételezni semmit. 214 00:12:03,000 --> 00:12:06,000 Oké, most sor a 17-mit 17. sor csinálni? 215 00:12:06,000 --> 00:12:08,000 Lehet, hogy fog felmelegedni ezt. 216 00:12:08,000 --> 00:12:10,000 Ez nyomtat egy string, ugye? 217 00:12:10,000 --> 00:12:12,000 Ez kinyomtatja Karakterlánc kérem. 218 00:12:12,000 --> 00:12:15,000 >> 18. sor a fajta ismerős most, hogy csak láttam egy variancia e 219 00:12:15,000 --> 00:12:18,000 de egy másik formátumot kódot, így 18. sor, 220 00:12:18,000 --> 00:12:23,000 azt mondod scanf itt a címét egy darab memória. 221 00:12:23,000 --> 00:12:27,000 Azt akarom, hogy cseng egy szövegben, mint vélelmezett% s, 222 00:12:27,000 --> 00:12:32,000 de a probléma az, hogy nem tettél egy pár dolgot itt. 223 00:12:32,000 --> 00:12:35,000 Mi az az egyik probléma? 224 00:12:35,000 --> 00:12:38,000 [Student] Meg próbál dereference egy null pointer. 225 00:12:38,000 --> 00:12:41,000 Jó, null vagy csak egyébként ismeretlen mutatók. 226 00:12:41,000 --> 00:12:45,000 Te átadása scanf egy címet, de most mondta egy perccel ezelőtt 227 00:12:45,000 --> 00:12:49,000 hogy erre a címre van némi szemét érték, mert valójában nem rendelheti el semmit, 228 00:12:49,000 --> 00:12:53,000 és így mondod scanf hatékonyan megy, hogy egy húr van, 229 00:12:53,000 --> 00:12:56,000 de nem tudjuk, hol van mégis, 230 00:12:56,000 --> 00:12:59,000 így valójában nem kiosztott memória puffer. 231 00:12:59,000 --> 00:13:03,000 Sőt, mit is nem is mond scanf? 232 00:13:03,000 --> 00:13:06,000 Tegyük fel, hogy ez egy darab memória, és nem volt szemét érték, 233 00:13:06,000 --> 00:13:09,000 de te még mindig nem mond scanf valami fontosat. 234 00:13:09,000 --> 00:13:12,000 [Student] Ahol amilyen valójában, a jelet. 235 00:13:12,000 --> 00:13:15,000 Jelet, így ebben az esetben, ez rendben van. 236 00:13:15,000 --> 00:13:18,000 Mivel a puffer már bejelentett egy mutatót 237 00:13:18,000 --> 00:13:22,000 a * darab szintaxis, nem kell használni ampersand 238 00:13:22,000 --> 00:13:25,000 mert ez már egy címet, de azt hiszem hallottam itt. 239 00:13:25,000 --> 00:13:27,000 [Student] Milyen nagy ez? 240 00:13:27,000 --> 00:13:29,000 Jó, hogy nem mondasz scanf milyen nagy ez a puffer, 241 00:13:29,000 --> 00:13:32,000 ami azt jelenti, még akkor is, ha volt egy puffer mutató, 242 00:13:32,000 --> 00:13:35,000 azt mondjuk scanf, hogy egy húr van, 243 00:13:35,000 --> 00:13:38,000 de itt lehet 2 byte, lehet, hogy 10 byte, ez lehet egy megabájt. 244 00:13:38,000 --> 00:13:41,000 Scanf fogalma sincs, és mivel ez egy darab memória 245 00:13:41,000 --> 00:13:43,000 feltehetőleg ez nem egy karakterlánc még. 246 00:13:43,000 --> 00:13:48,000 Ez csak egy szöveg, ha írsz karaktereket és a \ 0-tól, hogy a darab a memória. 247 00:13:48,000 --> 00:13:51,000 Most már csak néhány darab memória. 248 00:13:51,000 --> 00:13:55,000 Scanf nem fogja tudni, hogy mikor hagyja abba írásban, hogy a címet. 249 00:13:55,000 --> 00:13:59,000 >> Ha visszaemlékeznek néhány példát a múltban, ahol véletlenszerűen gépelt a billentyűzeten 250 00:13:59,000 --> 00:14:03,000 próbál egy puffer túlcsordulás, és beszélgettünk pénteken arról, hogy pontosan. 251 00:14:03,000 --> 00:14:07,000 Ha egy ellenség valahogy fecskendezi be a programba egy sokkal nagyobb szó 252 00:14:07,000 --> 00:14:10,000 vagy mondat vagy kifejezés, akkor várta is túllépték 253 00:14:10,000 --> 00:14:13,000 egy darab memória, ami rossz következményei, 254 00:14:13,000 --> 00:14:15,000 mint átveszi az egész programot is. 255 00:14:15,000 --> 00:14:17,000 Meg kell erősít ez valahogy. 256 00:14:17,000 --> 00:14:20,000 Hadd kicsinyítés és bemegy 3-as verzióját a program. 257 00:14:20,000 --> 00:14:22,000 Ez egy kicsit jobban. 258 00:14:22,000 --> 00:14:24,000 Ebben a verzióban észre a különbséget. 259 00:14:24,000 --> 00:14:27,000 A vonal 16, én megint nyilvánító változó nevű puffer, 260 00:14:27,000 --> 00:14:29,000 de mi van most? 261 00:14:29,000 --> 00:14:33,000 Ez egy sor 16 karakter. 262 00:14:33,000 --> 00:14:36,000 Ez jó, mert ez azt jelenti, hogy most mondani scanf 263 00:14:36,000 --> 00:14:39,000 itt van egy valódi darabja a memóriát. 264 00:14:39,000 --> 00:14:42,000 Akkor szinte gondolni tömbök, hogy a mutató most, 265 00:14:42,000 --> 00:14:44,000 annak ellenére, hogy valójában nem egyenértékűek. 266 00:14:44,000 --> 00:14:47,000 Majd másként viselkednek a különböző helyzetekben. 267 00:14:47,000 --> 00:14:50,000 De ez minden bizonnyal a helyzet, hogy puffer hivatkozás 268 00:14:50,000 --> 00:14:53,000 16 összefüggő karakter, mert ez az, ami egy tömb 269 00:14:53,000 --> 00:14:55,000 és már néhány hete. 270 00:14:55,000 --> 00:14:59,000 >> Itt mondom scanf itt egy darab memória. 271 00:14:59,000 --> 00:15:01,000 Ez alkalommal, ez valójában egy darab memória, 272 00:15:01,000 --> 00:15:07,000 de miért van ez a program még kitermelhető? 273 00:15:07,000 --> 00:15:11,000 Mi a baj még? 274 00:15:11,000 --> 00:15:14,000 Mondtam adj 16 byte but- 275 00:15:14,000 --> 00:15:16,000 [Student] Mi történik, ha nem írják be a több mint 16? 276 00:15:16,000 --> 00:15:20,000 Pontosan, mi van, ha a felhasználó típus 17 karakter vagy 1700 karaktereket? 277 00:15:20,000 --> 00:15:23,000 Tény, hogy lássuk, mi nem utazásként át ezt a hibát most. 278 00:15:23,000 --> 00:15:25,000 Jobb, de nem tökéletes. 279 00:15:25,000 --> 00:15:28,000 Hadd menjek előre, és futtasd a make scanf3 összeállításához ezt a programot. 280 00:15:28,000 --> 00:15:34,000 Hadd futni scanf3, String kérem: hello, és úgy tűnik, hogy rendben lesz. 281 00:15:34,000 --> 00:15:37,000 Hadd próbáljam meg egy kicsit hosszabb, hello there. 282 00:15:37,000 --> 00:15:42,000 Oké, akkor hello there hogy van ma, az Enter billentyűt. 283 00:15:42,000 --> 00:15:54,000 Első ilyen szerencsés itt, mondjuk hello there hogy van. 284 00:15:54,000 --> 00:15:56,000 A francba. 285 00:15:56,000 --> 00:16:03,000 Oké, tehát szerencsénk volt. Lássuk, ha nem tudjuk kijavítani ezt. 286 00:16:03,000 --> 00:16:06,000 Nem, nem hagyom, hogy engem másolni. 287 00:16:06,000 --> 00:16:09,000 Próbáljuk meg újra. 288 00:16:09,000 --> 00:16:12,000 Rendben, készenlétbe. 289 00:16:12,000 --> 00:16:20,000 Meglátjuk, meddig tudok tettetni, hogy összpontosítson, miközben továbbra is ezt. 290 00:16:20,000 --> 00:16:23,000 A francba. Ez inkább a megfelelő, valóban. 291 00:16:23,000 --> 00:16:26,000 Ott vagyunk. 292 00:16:26,000 --> 00:16:30,000 Point készült. 293 00:16:30,000 --> 00:16:34,000 >> Ez kínos, bár ez is, ez is egyik forrása a nagy zűrzavar 294 00:16:34,000 --> 00:16:38,000 írásakor programok, amelyek a hibákat, mert mutatkoznak 295 00:16:38,000 --> 00:16:40,000 Csak néha néha. 296 00:16:40,000 --> 00:16:43,000 A valóság az, hogy még ha a kód teljesen megtört, 297 00:16:43,000 --> 00:16:46,000 lehet, hogy csak a teljesen megtört néha 298 00:16:46,000 --> 00:16:49,000 mert néha, alapvetően mi történik, az operációs rendszer oszt 299 00:16:49,000 --> 00:16:52,000 egy kicsit több memóriát, mint valóban szüksége van bármilyen okból, 300 00:16:52,000 --> 00:16:57,000 és így senki más nem használja a memória jobb után darab 16 karakter, 301 00:16:57,000 --> 00:17:01,000 így ha megy 17, 18, 19, mindegy, ez nem is olyan nagy ügy. 302 00:17:01,000 --> 00:17:04,000 Most, hogy a számítógép, akkor is, ha ez nem lezuhan ezen a ponton, 303 00:17:04,000 --> 00:17:09,000 esetlegesen használja byte szám 17 vagy 18 vagy 19 valami mást, 304 00:17:09,000 --> 00:17:14,000 ekkor az adatok, hogy tegye oda, de túl hosszú, 305 00:17:14,000 --> 00:17:18,000 fog kapni felülírja esetleg valamilyen más funkció. 306 00:17:18,000 --> 00:17:21,000 Ez nem feltétlenül fog érintetlenek maradnak, 307 00:17:21,000 --> 00:17:23,000 de ez nem feltétlenül okoz seg hiba. 308 00:17:23,000 --> 00:17:26,000 De ebben az esetben, végül bocsátott rendelkezésre elegendő karaktert 309 00:17:26,000 --> 00:17:29,000 hogy lényegében meghaladta a részes memória, és bumm, 310 00:17:29,000 --> 00:17:33,000 Az operációs rendszer azt mondta: "Sajnálom, hogy nem jó, szegmentálási hibát okozott." 311 00:17:33,000 --> 00:17:38,000 >> És lássuk most, ha mi marad itt a könyvtárban, 312 00:17:38,000 --> 00:17:40,000 észre, hogy én ezt a fájlt itt, mag. 313 00:17:40,000 --> 00:17:42,000 Figyeljük meg, hogy ez ismét hívják core dump. 314 00:17:42,000 --> 00:17:46,000 Ez lényegében egy fájl, amely tartalmazza a tartalmát a program memóriájában 315 00:17:46,000 --> 00:17:48,000 azon a ponton, ahol lezuhant, 316 00:17:48,000 --> 00:17:51,000 és csak hogy megpróbálja egy kis példa erre engedj ide 317 00:17:51,000 --> 00:17:57,000 és fuss gdb szóló scanf3 majd adja meg a harmadik érv az úgynevezett mag, 318 00:17:57,000 --> 00:18:01,000 , és vegyük észre, hogy itt, ha felsorolom a kódot, 319 00:18:01,000 --> 00:18:06,000 képesek leszünk a szokásos módon gdb kezdeni séta ezt a programot, 320 00:18:06,000 --> 00:18:10,000 és tudok futni, és amint hit-mint a lépés parancsot gdb- 321 00:18:10,000 --> 00:18:13,000 amint megüt a potenciálisan hibás sor beírása után egy hatalmas string, 322 00:18:13,000 --> 00:18:16,000 Én képes lesz azonosítani a ténylegesen itt. 323 00:18:16,000 --> 00:18:19,000 Többet erről, bár szakaszában szempontjából core dump 324 00:18:19,000 --> 00:18:22,000 és hasonlók, így valóban piszkálni körül belül a core dump 325 00:18:22,000 --> 00:18:27,000 és nézd meg, hogy mi sorban a program nem neked. 326 00:18:27,000 --> 00:18:32,000 Van még kérdése majd a mutató és a címeket? 327 00:18:32,000 --> 00:18:36,000 Mert ma, megyünk elkezdi magától értetődőnek, hogy ezek a dolgok léteznek 328 00:18:36,000 --> 00:18:40,000 és pontosan tudjuk, mik azok. 329 00:18:40,000 --> 00:18:42,000 Igen. 330 00:18:42,000 --> 00:18:46,000 >> [Student] Hogyhogy nem kellett volna véget jelet közvetlenül a part- 331 00:18:46,000 --> 00:18:48,000 Jó kérdés. 332 00:18:48,000 --> 00:18:51,000 Hogy lehet, hogy nem kellett, hogy véget jelet közvetlenül a karakter tömb, mint én tettem korábban 333 00:18:51,000 --> 00:18:53,000 A legtöbb példát? 334 00:18:53,000 --> 00:18:55,000 A rövid válasz tömbök egy kicsit különleges. 335 00:18:55,000 --> 00:18:59,000 Akkor szinte gondolja puffer ténylegesen, hogy egy címet, 336 00:18:59,000 --> 00:19:03,000 és ez csak azért történik, hogy a helyzet, hogy a szögletes zárójel jelölés 337 00:19:03,000 --> 00:19:06,000 a kényelem, hogy mi is bemegy konzol 0, konzol 1, 338 00:19:06,000 --> 00:19:10,000 konzol 2, anélkül, hogy használja a * jelölést. 339 00:19:10,000 --> 00:19:13,000 Ez egy kicsit a fehér hazugság, mert tömbök és mutatók 340 00:19:13,000 --> 00:19:17,000 vannak, sőt, egy kicsit más, de ezek gyakran, de nem mindig felcserélhetők. 341 00:19:17,000 --> 00:19:21,000 Röviden, ha egy funkció vár egy mutatót egy darab memória, 342 00:19:21,000 --> 00:19:24,000 akkor sem adja át a címet, hogy visszatért a malloc, 343 00:19:24,000 --> 00:19:29,000 és meglátjuk malloc előtt ismét hosszú, vagy tudod átadni a nevét egy tömb. 344 00:19:29,000 --> 00:19:32,000 Nem kell tennie jelet a tömbök, mert már 345 00:19:32,000 --> 00:19:34,000 lényegében hasonló címek. 346 00:19:34,000 --> 00:19:36,000 Ez az egyetlen kivétel. 347 00:19:36,000 --> 00:19:39,000 A szögletes zárójelek teszi őket különlegessé. 348 00:19:39,000 --> 00:19:41,000 >> Tudna tenni egy jelet közvetlenül a puffer? 349 00:19:41,000 --> 00:19:43,000 Nem ebben az esetben. 350 00:19:43,000 --> 00:19:46,000 Ez nem működik, mert újra, ezen sarok ügy 351 00:19:46,000 --> 00:19:49,000 ahol a tömbök nem egészen valójában címeket. 352 00:19:49,000 --> 00:19:54,000 De majd talán jön vissza, hogy nemsokára más példákkal. 353 00:19:54,000 --> 00:19:56,000 Próbáljuk meg megoldani a problémát itt. 354 00:19:56,000 --> 00:20:00,000 Van egy adatstruktúra, hogy már használ egy ideje ismert, mint egy tömb. 355 00:20:00,000 --> 00:20:02,000 Case pont ez az, amit mi csak volt. 356 00:20:02,000 --> 00:20:04,000 De tömbök néhány upsides és hátrányai. 357 00:20:04,000 --> 00:20:06,000 A tömbök szép miért? 358 00:20:06,000 --> 00:20:11,000 Mi az az egy dolog, hogy tetszik-a, amennyiben tetszik tömbök-körülbelül tömbök? 359 00:20:11,000 --> 00:20:13,000 Mi van a kényelmes róluk? Mi vonzó? 360 00:20:13,000 --> 00:20:18,000 Miért bemutatjuk őket az első helyen? 361 00:20:18,000 --> 00:20:20,000 Igen. 362 00:20:20,000 --> 00:20:27,000 [Student] Ez lehet tárolni egy csomó adat, és nem kell használni az egész dolog. 363 00:20:27,000 --> 00:20:29,000 Használhatja a szakaszt. 364 00:20:29,000 --> 00:20:32,000 Jó, egy sor tudod tárolni egy csomó adat, 365 00:20:32,000 --> 00:20:35,000 és nem feltétlenül kell használni az egészet, így overallocate, 366 00:20:35,000 --> 00:20:39,000 ami lehet kényelmes, ha nem tudja előre, hogy hány valami számíthat. 367 00:20:39,000 --> 00:20:41,000 >> GetString egy tökéletes példa. 368 00:20:41,000 --> 00:20:44,000 GetString, írta nekünk, fogalma sincs, hogy hány karakter lehet várni, 369 00:20:44,000 --> 00:20:48,000 így az a tény, hogy mi lehet kiosztani darabokat összefüggő memóriaterületet jó. 370 00:20:48,000 --> 00:20:51,000 Array is megoldani a problémát láttunk egy pár héttel ezelőtt már 371 00:20:51,000 --> 00:20:54,000 ha a kód elkezd ruházni valami nagyon rosszul tervezték. 372 00:20:54,000 --> 00:20:57,000 Emlékezzünk vissza, hogy hoztam létre egy diák struktúrát nevű David, 373 00:20:57,000 --> 00:21:00,000 és akkor ez valójában egy alternatív, mégis, 374 00:21:00,000 --> 00:21:04,000 hogy miután egy változó nevű nevet és egy másik változó nevű, azt hiszem, ház, 375 00:21:04,000 --> 00:21:08,000 és egy másik nevű változó ID mert az ilyen történet, amit aztán akartam bemutatni valami mást 376 00:21:08,000 --> 00:21:11,000 mint Rob a program, így aztán úgy döntöttem, várj egy percet, 377 00:21:11,000 --> 00:21:13,000 Meg kell nevezni ezeket a változókat. 378 00:21:13,000 --> 00:21:16,000 Hívjuk az enyém name1, ID1, house1. 379 00:21:16,000 --> 00:21:20,000 Hívjuk Rob name2, house2, ID2. 380 00:21:20,000 --> 00:21:22,000 De aztán várj egy percet, mi van Tommy? 381 00:21:22,000 --> 00:21:24,000 Aztán volt még három változó. 382 00:21:24,000 --> 00:21:27,000 Bemutattuk valaki más, négy készlet változók. 383 00:21:27,000 --> 00:21:30,000 A világ elkezdett rendetlen nagyon gyorsan, 384 00:21:30,000 --> 00:21:33,000 így bevezetett struktúrákat, és mi kényszerítő egy struct? 385 00:21:33,000 --> 00:21:39,000 Mit jelent a C struct segítségével csinálni? 386 00:21:39,000 --> 00:21:42,000 Ez tényleg kínos ma. 387 00:21:42,000 --> 00:21:44,000 Mi az? >> [Hallhatatlan tanulói válasz] 388 00:21:44,000 --> 00:21:47,000 Igen, konkrétan typedef lehetővé teszi, hogy hozzon létre egy új adattípus, 389 00:21:47,000 --> 00:21:51,000 és struct, a struct kulcsszó lehetővé teszi, hogy magukba 390 00:21:51,000 --> 00:21:54,000 fogalmilag kapcsolódó darab adatokra 391 00:21:54,000 --> 00:21:56,000 majd hívja őket valami, mint egy diák. 392 00:21:56,000 --> 00:21:58,000 >> Ez jó volt, mert most már tudjuk modellezni 393 00:21:58,000 --> 00:22:03,000 sokkal inkább egyfajta fogalmi következetes fogalma egy diák egy változó 394 00:22:03,000 --> 00:22:07,000 ahelyett önkényesen, amely egy egy húr, egy pedig az azonosítót, és így tovább. 395 00:22:07,000 --> 00:22:10,000 A tömbök szép, mert lehetővé teszi, hogy indítsa el a tisztítási kódot. 396 00:22:10,000 --> 00:22:13,000 De mi a hátránya már egy tömb? 397 00:22:13,000 --> 00:22:15,000 Mit nem? Igen. 398 00:22:15,000 --> 00:22:17,000 [Student] Tudnod kell, milyen nagy. 399 00:22:17,000 --> 00:22:19,000 Tudnod kell, milyen nagy, tehát ez egyfajta fájdalom. 400 00:22:19,000 --> 00:22:21,000 Akik ezt a korábbi programozási tapasztalattal tudjuk, hogy sok nyelven, 401 00:22:21,000 --> 00:22:24,000 mint a Java, akkor kérheti egy darab memória, konkrétan egy tömb, 402 00:22:24,000 --> 00:22:28,000 milyen nagy vagy te, hossza, vagyoni helyzet, hogy úgy mondjam, és ez nagyon kényelmes. 403 00:22:28,000 --> 00:22:32,000 A C-ben, akkor nem is szükséges strlen egy generikus tömb 404 00:22:32,000 --> 00:22:35,000 mert strlen, ahogy a szó is mutatja, csak a húrok, 405 00:22:35,000 --> 00:22:39,000 és tudod kitalálni, hogy a string hossza, mert ez az emberi egyezmény 406 00:22:39,000 --> 00:22:43,000 létrehozandó \ 0, hanem egy sor, több általánosságban, csak egy darab memória. 407 00:22:43,000 --> 00:22:46,000 Ha ez egy sor ints, ott nem lesz néhány speciális karakter 408 00:22:46,000 --> 00:22:48,000 a végén vár rád. 409 00:22:48,000 --> 00:22:50,000 Meg kell emlékezni a hossza egy tömb. 410 00:22:50,000 --> 00:22:54,000 Másik hátránya a tömb nevelt a fejét getString magát. 411 00:22:54,000 --> 00:22:59,000 Mi van a másik hátránya egy tömb? 412 00:22:59,000 --> 00:23:01,000 Uram, csak te és én ma. 413 00:23:01,000 --> 00:23:04,000 [Hallhatatlan diák válasza] >> Ez mi? 414 00:23:04,000 --> 00:23:06,000 Ez nyilvánította a verem. 415 00:23:06,000 --> 00:23:09,000 Oké, kijelentette, a verem. Miért nem tetszik? 416 00:23:09,000 --> 00:23:13,000 [Student] Mert ez lesz újra. 417 00:23:13,000 --> 00:23:15,000 Ez lesz újra. 418 00:23:15,000 --> 00:23:18,000 Oké, ha használ egy tömböt a memóriát, 419 00:23:18,000 --> 00:23:21,000 nem lehet, például vissza, mert ez a verem. 420 00:23:21,000 --> 00:23:23,000 Oké, ez a hátrány. 421 00:23:23,000 --> 00:23:25,000 És mi a helyzet egy másik egy sor? 422 00:23:25,000 --> 00:23:28,000 Ha fel kell osztaniuk azt, te milyen csavaros, ha több helyre van szüksége 423 00:23:28,000 --> 00:23:30,000 mint a tömb. 424 00:23:30,000 --> 00:23:34,000 >> Aztán bevezette visszahívás, malloc, amely alkalmat adott nekünk a lehetőséget, hogy dinamikusan memóriát. 425 00:23:34,000 --> 00:23:37,000 De mi van, ha próbált egy másik világ összesen? 426 00:23:37,000 --> 00:23:40,000 Mi lenne, ha volna megoldani egy pár e problémák 427 00:23:40,000 --> 00:23:45,000 így ahelyett, tollam elaludt a továb- 428 00:23:45,000 --> 00:23:51,000 mi lenne, ha inkább akart lényegében létrehozni egy olyan világban, ami már nincs, mint ez? 429 00:23:51,000 --> 00:23:56,000 Ez egy tömb, és, természetesen, ez a fajta rontja, ha elérjük a végén a tömb, 430 00:23:56,000 --> 00:24:00,000 és most már nincs hely a másik integer vagy egy másik karaktert. 431 00:24:00,000 --> 00:24:03,000 Mi lenne, ha valami megelőző jellegű jól mondjátok, miért nem megyünk pihenni 432 00:24:03,000 --> 00:24:07,000 ez a követelmény, hogy mindezek darabokat memória legyen szomszédos háttal, 433 00:24:07,000 --> 00:24:10,000 és miért nem, amikor szükség van egy int vagy char, 434 00:24:10,000 --> 00:24:12,000 csak adj helyet közülük? 435 00:24:12,000 --> 00:24:14,000 És amikor szükségem van egy másik, adj még egy hely, 436 00:24:14,000 --> 00:24:16,000 és amikor szüksége van egy másik, adj még egy helyet. 437 00:24:16,000 --> 00:24:19,000 Az előnye, hogy ami most van, hogy ha valaki más 438 00:24:19,000 --> 00:24:21,000 veszi a memória ide, nem nagy ügy. 439 00:24:21,000 --> 00:24:25,000 Elviszem ezt a kiegészítő darab memória van, majd ezt. 440 00:24:25,000 --> 00:24:28,000 >> Most, az egyetlen fogás az, hogy ez majdnem olyan, mint én 441 00:24:28,000 --> 00:24:30,000 egy csomó különböző változók. 442 00:24:30,000 --> 00:24:33,000 Ez olyan, mintha öt különböző változók potenciálisan. 443 00:24:33,000 --> 00:24:36,000 De mi van, ha lopni egy ötlet húrok 444 00:24:36,000 --> 00:24:41,000 amely valahogy kapcsolni ezeket a dolgokat együtt fogalmilag, és mi van, ha én ezt? 445 00:24:41,000 --> 00:24:44,000 Ez az én nagyon rosszul húzott nyíl. 446 00:24:44,000 --> 00:24:46,000 De tegyük fel, hogy minden ilyen darabokat memória 447 00:24:46,000 --> 00:24:52,000 rámutatott arra, hogy a másik, és ez a fickó, aki nem az ő testvére van, 448 00:24:52,000 --> 00:24:54,000 nincs ilyen nyíl. 449 00:24:54,000 --> 00:24:56,000 Ez valójában az úgynevezett láncolt listát. 450 00:24:56,000 --> 00:25:00,000 Ez egy új adatszerkezet, amely lehetővé teszi számunkra, hogy fordítsanak egy darab memória, 451 00:25:00,000 --> 00:25:03,000 aztán egy másik, aztán egy másik, majd egy másik, bármikor szeretnénk 452 00:25:03,000 --> 00:25:07,000 közben a program, és ne feledjük, hogy mindannyian valahogy kapcsolódó 453 00:25:07,000 --> 00:25:11,000 szó szerint láncolás őket, és mi tette ezt piktogramokat ábrázoló itt egy nyíllal. 454 00:25:11,000 --> 00:25:15,000 De kódot, mi lenne a mechanizmus, amelyen keresztül meg tudná valahogy kapcsolódni, 455 00:25:15,000 --> 00:25:20,000 majdnem olyan, mint Scratch, az egyik darab egy másik chunk? 456 00:25:20,000 --> 00:25:22,000 Jól jönne egy mutató, igaz? 457 00:25:22,000 --> 00:25:25,000 Mert valóban a nyíl, ami megy a bal felső négyzet, 458 00:25:25,000 --> 00:25:31,000 ez a fickó itt ezt, is tartalmazhatnak belül ezen a téren 459 00:25:31,000 --> 00:25:34,000 nem csak egy ints, nem csak néhány karakter, de mi van, ha ténylegesen kiosztott 460 00:25:34,000 --> 00:25:37,000 egy kis extra helyet úgy, hogy most, 461 00:25:37,000 --> 00:25:41,000 Minden az én darabokat a memória, annak ellenére, hogy ez fog kerülni nekem, 462 00:25:41,000 --> 00:25:45,000 Most úgy néz ki, egy kicsit több téglalap alakú, ahol az egyik a darabokat memória 463 00:25:45,000 --> 00:25:47,000 használják egy számot, mint az 1-es szám, 464 00:25:47,000 --> 00:25:50,000 és ha ez a fickó tárolja a 2-es szám, 465 00:25:50,000 --> 00:25:52,000 ez a másik darab memóriát használja a nyíl, 466 00:25:52,000 --> 00:25:54,000 vagy több konkrét, a mutató. 467 00:25:54,000 --> 00:25:59,000 És hiszem, tárolja a 3-as szám alatt van, míg én ezt hangsúlyozni azt a fickót, 468 00:25:59,000 --> 00:26:02,000 és most ez a fickó, tegyük fel, csak azt akarom, három ilyen darabokat memória. 469 00:26:02,000 --> 00:26:05,000 Majd húzzunk egy vonalat ezen keresztül, jelezve null. 470 00:26:05,000 --> 00:26:07,000 Nincs további karakter. 471 00:26:07,000 --> 00:26:10,000 >> Valóban, ez hogyan mehetünk végrehajtásával kapcsolatban 472 00:26:10,000 --> 00:26:12,000 valamit, hívják láncolt lista. 473 00:26:12,000 --> 00:26:18,000 A láncolt lista egy új adatszerkezetet, valamint ez egy lépcsőfok felé 474 00:26:18,000 --> 00:26:21,000 sok szakértő adatszerkezeteket kezdődő problémákat megoldani 475 00:26:21,000 --> 00:26:23,000 mentén Facebook-típusú problémák és a Google-típusú problémák 476 00:26:23,000 --> 00:26:26,000 ahol hatalmas adathalmazokat, és már nem vágja azt 477 00:26:26,000 --> 00:26:29,000 tárolni mindent összefüggően és használja valami ilyesmit lineáris keresés 478 00:26:29,000 --> 00:26:31,000 vagy akár valami hasonló bináris keresés. 479 00:26:31,000 --> 00:26:33,000 Akarsz még jobb üzemidő. 480 00:26:33,000 --> 00:26:37,000 Sőt, az egyik a Szent Grails fogunk beszélni később ezen a héten, vagy a következő 481 00:26:37,000 --> 00:26:41,000 egy algoritmus, amelynek futási ideje állandó. 482 00:26:41,000 --> 00:26:44,000 Más szóval, azt mindig veszi az ugyanannyi ideig nem számít 483 00:26:44,000 --> 00:26:47,000 mekkora a bemenet, és ez valóban lenyűgöző, 484 00:26:47,000 --> 00:26:49,000 sokkal inkább, mint valami logaritmikus. 485 00:26:49,000 --> 00:26:51,000 Mi ez a képernyőn itt? 486 00:26:51,000 --> 00:26:55,000 Minden egyes téglalapok pontosan én csak rajzoltam kézzel. 487 00:26:55,000 --> 00:26:59,000 De a dolog egészen a bal oldalon egy speciális változó. 488 00:26:59,000 --> 00:27:02,000 Ez lesz az egyetlen mutató, mert az egyik megvagy 489 00:27:02,000 --> 00:27:04,000 egy láncolt lista, mert ezeket a dolgokat nevezik, 490 00:27:04,000 --> 00:27:09,000 az, hogy meg kell ragaszkodni egyik végét a csatolt listán. 491 00:27:09,000 --> 00:27:13,000 >> Csakúgy, mint a húr, akkor tudja a címet az első karakter. 492 00:27:13,000 --> 00:27:15,000 Ugyanez a helyzet a linkelt listákat. 493 00:27:15,000 --> 00:27:19,000 Meg kell tudni, hogy a címe az első darab memória 494 00:27:19,000 --> 00:27:25,000 mert onnan, el lehet jutni minden más egy. 495 00:27:25,000 --> 00:27:27,000 Downside. 496 00:27:27,000 --> 00:27:30,000 Milyen árat fizetünk erre sokoldalúságát, amelyek egy dinamikusan 497 00:27:30,000 --> 00:27:34,000 méretes adatszerkezet, hogy ha valaha is szüksége több memóriát, finom, 498 00:27:34,000 --> 00:27:37,000 csak kiosztani még egy darab, és rajzoljon egy mutatót 499 00:27:37,000 --> 00:27:39,000 A régi és az új farok a lista? 500 00:27:39,000 --> 00:27:41,000 Igen. 501 00:27:41,000 --> 00:27:43,000 [Student] Ez körülbelül kétszer annyi helyet. 502 00:27:43,000 --> 00:27:45,000 Beletelik kétszer annyi helyet, így ez biztosan egy hátránya, és láttuk ezt 503 00:27:45,000 --> 00:27:48,000 kompromisszum előtt közötti időben és térben és rugalmasság 504 00:27:48,000 --> 00:27:51,000 ahol az most már nem kell 32 bit minden egyes ezeket a számokat. 505 00:27:51,000 --> 00:27:57,000 Tényleg szükségünk van 64, 32 és 32 a száma a mutatót. 506 00:27:57,000 --> 00:27:59,000 De hé, van 2 GB RAM. 507 00:27:59,000 --> 00:28:02,000 Hozzáadása egy 32 bit itt és itt nem úgy tűnik, hogy nagy ügy. 508 00:28:02,000 --> 00:28:05,000 De a nagy adathalmazok, akkor biztosan tesz ki szó szerint kétszer annyi. 509 00:28:05,000 --> 00:28:09,000 Mi van a másik hátránya most, vagy mi a funkció nem adjuk fel, 510 00:28:09,000 --> 00:28:12,000 ha az általunk képviselt listák dolgok egy láncolt lista, és nem egy tömb? 511 00:28:12,000 --> 00:28:14,000 [Student] Nem lehet keresztezik visszafelé. 512 00:28:14,000 --> 00:28:16,000 Nem lehet, hogy visszafelé haladnak, szóval egyfajta csavaros ha séta 513 00:28:16,000 --> 00:28:19,000 balról jobbra egy for ciklus vagy while 514 00:28:19,000 --> 00:28:21,000 majd rájössz, hogy "Ó, azt akarom, hogy menjen vissza az elején a listát." 515 00:28:21,000 --> 00:28:26,000 Nem lehet, mert ezek a mutatók csak megy balról jobbra, mint a nyilak jelzik. 516 00:28:26,000 --> 00:28:29,000 >> Most vissza tudott emlékezni a kezdete a lista egy másik változó, 517 00:28:29,000 --> 00:28:31,000 de ez egy bonyolult, hogy tartsa szem előtt. 518 00:28:31,000 --> 00:28:35,000 Egy tömb, nem számít, milyen messze megy, akkor mindig mínusz, mínusz, mínusz, mínusz 519 00:28:35,000 --> 00:28:37,000 és menj vissza, ahonnan jöttél. 520 00:28:37,000 --> 00:28:40,000 Mi van még egy hátránya itt? Igen. 521 00:28:40,000 --> 00:28:43,000 [Hallhatatlan diák a kérdéshez] 522 00:28:43,000 --> 00:28:47,000 Lehet, így már valójában csak javasolta adatszerkezetet úgynevezett kétszeresen láncolt lista, 523 00:28:47,000 --> 00:28:50,000 és valóban, akkor újabb mutatót minden egyes ilyen téglalap 524 00:28:50,000 --> 00:28:53,000 hogy megy a másik irányba, a fejjel, amely 525 00:28:53,000 --> 00:28:55,000 most akkor keresztezik oda-vissza, 526 00:28:55,000 --> 00:28:59,000 a hátránya, amely most az Ön által használt háromszor annyi memóriát szoktuk 527 00:28:59,000 --> 00:29:04,000 és fokozza a rendszer bonyolultságát tekintve a kódot kell írni, hogy ez jobb. 528 00:29:04,000 --> 00:29:08,000 De ezek mind talán nagyon ésszerű kompromisszumok, ha a visszaírás fontosabb. 529 00:29:08,000 --> 00:29:10,000 Igen. 530 00:29:10,000 --> 00:29:12,000 [Student] Azt is nem egy 2D linkelt listát. 531 00:29:12,000 --> 00:29:16,000 Jó, akkor nem igazán van a 2D láncolt lista. 532 00:29:16,000 --> 00:29:18,000 Te igen. Ez közel sem olyan egyszerű, mint egy tömb. 533 00:29:18,000 --> 00:29:21,000 Mint egy tömb, te nyitva tartó, zárt konzol, nyitó zárójel, zárt konzol, 534 00:29:21,000 --> 00:29:23,000 és egy kis 2-dimenziós szerkezet. 535 00:29:23,000 --> 00:29:26,000 Lehet végre a 2-dimenziós láncolt lista 536 00:29:26,000 --> 00:29:29,000 ha nem a kiegészítő, amit javasolt, 1/3 mutatót minden egyes ezeket a dolgokat, 537 00:29:29,000 --> 00:29:34,000 és ha belegondolsz másik lista jön rád 3D stílusú 538 00:29:34,000 --> 00:29:40,000 A képernyőn mindannyiunk, ami csak egy lánc valami. 539 00:29:40,000 --> 00:29:45,000 Tudnánk csinálni, de ez nem olyan egyszerű, mint gépelés nyitó zárójel, szögletes zárójel. Igen. 540 00:29:45,000 --> 00:29:48,000 [Hallhatatlan diák a kérdéshez] 541 00:29:48,000 --> 00:29:50,000 Jó, tehát ez egy igazi kicker. 542 00:29:50,000 --> 00:29:54,000 >> Ezek az algoritmusok, hogy már epekedett, ss felett, mint oh, bináris keresés, 543 00:29:54,000 --> 00:29:57,000 akkor kereshet egy sor számok a fedélzeten 544 00:29:57,000 --> 00:30:01,000 vagy egy telefonkönyv sokkal gyorsabban, ha használja oszd meg és uralkodj 545 00:30:01,000 --> 00:30:05,000 és a bináris keresés algoritmus, de bináris keresés szükséges két feltételezéseket. 546 00:30:05,000 --> 00:30:09,000 Az egyik, hogy az adatok rendezve. 547 00:30:09,000 --> 00:30:11,000 Most már valószínűleg tartani ezt a rendezett, 548 00:30:11,000 --> 00:30:14,000 így talán ez nem ad okot aggodalomra, hanem bináris keresés is feltételezik 549 00:30:14,000 --> 00:30:18,000 hogy volt véletlen elérésű a számokat tartalmazó listát, 550 00:30:18,000 --> 00:30:21,000 és egy sor lehetővé teszi, hogy véletlen hozzáférést, és véletlenszerű hozzáférés, 551 00:30:21,000 --> 00:30:24,000 Úgy értem, ha adott egy tömb, mennyi időbe telik Önnek 552 00:30:24,000 --> 00:30:26,000 hogy a konzol 0-ra? 553 00:30:26,000 --> 00:30:29,000 Egy művelet, csak a [0], és igazad van. 554 00:30:29,000 --> 00:30:33,000 Hány lépést tart, hogy a hely 10? 555 00:30:33,000 --> 00:30:36,000 Egy lépés, csak menjen a [10], és ott vagy. 556 00:30:36,000 --> 00:30:40,000 Ezzel szemben, hogyan kap a 10. egész egy láncolt lista? 557 00:30:40,000 --> 00:30:42,000 Meg kell kezdeni az elején, mert te csak az emlékezés 558 00:30:42,000 --> 00:30:45,000 az elején egy láncolt lista, mint egy string kerül emlékeznek 559 00:30:45,000 --> 00:30:48,000 a címe az első karakter, és megtalálják, hogy a 10. int 560 00:30:48,000 --> 00:30:53,000 vagy 10. karakter egy string, meg kell keresni az egész átkozott dolgot. 561 00:30:53,000 --> 00:30:55,000 >> Ismét nem vagyunk megoldani az összes problémánkat. 562 00:30:55,000 --> 00:31:00,000 Mi újak bevezetésével, de valójában attól függ, hogy mit akarsz, hogy tervezzen számára. 563 00:31:00,000 --> 00:31:04,000 Ami a végrehajtására, akkor kölcsönt egy olyan elképzelést, hogy a diákok szerkezet. 564 00:31:04,000 --> 00:31:07,000 A szintaxis nagyon hasonló, kivéve most, az ötlet egy kicsit elvont 565 00:31:07,000 --> 00:31:09,000 mint a ház és neve és azonosítója. 566 00:31:09,000 --> 00:31:13,000 De azt javaslom, hogy volna egy adatstruktúra a C 567 00:31:13,000 --> 00:31:17,000 hogy az úgynevezett csomópont, az utolsó szó a dián sugallja, 568 00:31:17,000 --> 00:31:21,000 belül egy csomópont, és a csomópont csak egy általános tároló számítógép-tudomány. 569 00:31:21,000 --> 00:31:25,000 Ez általában húzott, mint egy kör vagy négyzet vagy téglalap, ahogy tettem. 570 00:31:25,000 --> 00:31:27,000 És ebben adatszerkezet, van egy int-, n, 571 00:31:27,000 --> 00:31:29,000 annak érdekében, hogy ez a szám szeretnék tárolni. 572 00:31:29,000 --> 00:31:36,000 De mi ez a második sorban, struct node * a következő lépés? 573 00:31:36,000 --> 00:31:40,000 Miért van ez így helyes, vagy milyen szerepet tölt be ez a dolog játék, 574 00:31:40,000 --> 00:31:42,000 annak ellenére, hogy egy kicsit rejtélyes első pillantásra? 575 00:31:42,000 --> 00:31:44,000 Igen. 576 00:31:44,000 --> 00:31:46,000 [Hallhatatlan hallgatói válasz] 577 00:31:46,000 --> 00:31:50,000 Pontosan, így a * fajta zsákmány, hogy ez a mutató valami. 578 00:31:50,000 --> 00:31:53,000 A neve ennek a mutató önkényesen következő, 579 00:31:53,000 --> 00:32:00,000 de mi volna neveztük, amit akarunk, de mit jelent ez a mutató pont? 580 00:32:00,000 --> 00:32:03,000 [Student] Egy másik csomópont. >> Pontosan, rámutat egy másik ilyen csomópont. 581 00:32:03,000 --> 00:32:05,000 >> Nos, ez egyfajta kíváncsiság C. 582 00:32:05,000 --> 00:32:09,000 Emlékezzünk vissza, hogy a C olvas egy fordító felülről lefelé, balról jobbra, 583 00:32:09,000 --> 00:32:13,000 ami azt jelenti, ha-ez egy kicsit más, mint amit tettünk a diák. 584 00:32:13,000 --> 00:32:16,000 Amikor meghatározta a hallgató, mi valójában nem tettem egy szót is. 585 00:32:16,000 --> 00:32:18,000 Csak azt mondta typedef. 586 00:32:18,000 --> 00:32:20,000 Aztán volt int id, string name, string ház, 587 00:32:20,000 --> 00:32:23,000 majd a diák alján a struct. 588 00:32:23,000 --> 00:32:26,000 Ez a nyilatkozat egy kicsit más, mert 589 00:32:26,000 --> 00:32:28,000 ismét a C fordító egy kicsit buta. 590 00:32:28,000 --> 00:32:30,000 Ez csak akkor fog olvasni fentről lefelé, 591 00:32:30,000 --> 00:32:33,000 így ha az eléri a 2. vonalat itt 592 00:32:33,000 --> 00:32:37,000 ahol a következő nyilvánították, és lát, ó, itt van egy változó neve mellett. 593 00:32:37,000 --> 00:32:39,000 Ez egy mutató egy struct csomópont. 594 00:32:39,000 --> 00:32:42,000 A fordító fog megvalósítani, ami egy struct csomópont? 595 00:32:42,000 --> 00:32:44,000 Még soha nem hallottam ezt a dolgot korábban, 596 00:32:44,000 --> 00:32:47,000 mert a szó csomópont egyébként nem jelenik meg 597 00:32:47,000 --> 00:32:49,000 amíg az alsó, így van ez a redundancia. 598 00:32:49,000 --> 00:32:53,000 Azt kell, hogy mondjam struct node itt, amit aztán rövidebb később 599 00:32:53,000 --> 00:32:56,000 köszönhetően typedef ide, de ez azért van, mert 600 00:32:56,000 --> 00:33:02,000 mi hivatkozó maga a szerkezet belsejében a szerkezet. 601 00:33:02,000 --> 00:33:05,000 Ez az egyetlen megvagy ott. 602 00:33:05,000 --> 00:33:07,000 >> Néhány érdekes problémákat megy fel. 603 00:33:07,000 --> 00:33:09,000 Van egy listát a számok. Hogyan helyezze bele? 604 00:33:09,000 --> 00:33:11,000 Hogyan keressük meg? Hogyan törölni belőle? 605 00:33:11,000 --> 00:33:13,000 Különösen most, hogy kell kezelni az összes ilyen mutató. 606 00:33:13,000 --> 00:33:15,000 Azt hitted mutatópálcák valamiféle pszichedelikus 607 00:33:15,000 --> 00:33:17,000 mikor volt az egyik közülük csak próbál olvasni int rá. 608 00:33:17,000 --> 00:33:20,000 Most, hogy manipulálják az egész listát ér. 609 00:33:20,000 --> 00:33:22,000 Miért nem vesszük 5-perces szünet van, és aztán, hogy 610 00:33:22,000 --> 00:33:34,000 Egyes emberek a színpadon, pontosan erre. 611 00:33:34,000 --> 00:33:36,000 >> C sokkal szórakoztatóbb, ha ez cselekedett. 612 00:33:36,000 --> 00:33:39,000 Ki szó lenni az első? 613 00:33:39,000 --> 00:33:41,000 Oké, gyere fel. Te itt először. 614 00:33:41,000 --> 00:33:44,000 Ki szeretne lenni 9? Oké, 9. 615 00:33:44,000 --> 00:33:46,000 Mit szólnál 9? 17? 616 00:33:46,000 --> 00:33:51,000 Egy kis klikk ide. 22 és 26, hogy első sorban. 617 00:33:51,000 --> 00:33:53,000 És akkor mi van valaki ott van mutatott. 618 00:33:53,000 --> 00:33:57,000 Te itt 34. Oké, 34, gyere fel. 619 00:33:57,000 --> 00:33:59,000 Először is ott van. Oké, mind a négy srácok. 620 00:33:59,000 --> 00:34:01,000 És ki nem mondjuk a 9? 621 00:34:01,000 --> 00:34:04,000 Ki az a 9? 622 00:34:04,000 --> 00:34:07,000 Aki igazán akar lenni 9? Rendben, gyerünk, légy 9. 623 00:34:07,000 --> 00:34:10,000 Itt vagyunk. 624 00:34:10,000 --> 00:34:13,000 34, akkor találkozunk ott. 625 00:34:13,000 --> 00:34:17,000 Az első rész magatokat kinézni. 626 00:34:17,000 --> 00:34:21,000 26, 22, 17, jó. 627 00:34:21,000 --> 00:34:25,000 Ha tud állni ki az oldalra, mert fogunk malloc téged egy pillanatra. 628 00:34:25,000 --> 00:34:29,000 >> Jó, jó. 629 00:34:29,000 --> 00:34:32,000 Oké, kitűnő, úgyhogy feltenni néhány kérdést itt. 630 00:34:32,000 --> 00:34:34,000 És valóban, mi a neve? >> Anita. 631 00:34:34,000 --> 00:34:37,000 Anita, oké, gyere ide. 632 00:34:37,000 --> 00:34:41,000 Anita fog segíteni nekünk a fajta megoldja az egyik viszonylag egyszerű kérdésre az első, 633 00:34:41,000 --> 00:34:44,000 ami hogyan találja-e vagy sem egy érték szerepel a listán? 634 00:34:44,000 --> 00:34:48,000 Most, észre, hogy az első, képviseli itt Lucas, 635 00:34:48,000 --> 00:34:52,000 egy kicsit más, és így a papírt szándékosan oldalra 636 00:34:52,000 --> 00:34:55,000 mert nem annyira magas, és nem vesz fel annyi bit, 637 00:34:55,000 --> 00:34:58,000 annak ellenére műszakilag ő az azonos méretű papír csak forog. 638 00:34:58,000 --> 00:35:01,000 De ő egy kicsit más, hogy ő csak a 32 bit a mutató, 639 00:35:01,000 --> 00:35:05,000 és minden ezek a srácok 64 bit, amelynek a fele a szám, amelynek a fele a mutató. 640 00:35:05,000 --> 00:35:08,000 De a mutató nem látható, így ha ti is kissé esetlenül 641 00:35:08,000 --> 00:35:12,000 használja a bal oldali pont a személy, melletted. 642 00:35:12,000 --> 00:35:14,000 És te száma 34. Mi a neve? 643 00:35:14,000 --> 00:35:16,000 Ari. 644 00:35:16,000 --> 00:35:19,000 Ari, így valójában, tartsa a papírt a jobb, és a bal oldali egyenesen lefelé. 645 00:35:19,000 --> 00:35:21,000 Ön képviseli null a bal oldalon. 646 00:35:21,000 --> 00:35:24,000 >> Most a mi emberi kép nagyon következetes. 647 00:35:24,000 --> 00:35:26,000 Ez valójában milyen mutatókat dolgoznak. 648 00:35:26,000 --> 00:35:29,000 És ha szétmorzsol egy kicsit így, nem vagyok az utat. 649 00:35:29,000 --> 00:35:34,000 Anita itt találja meg a szám 22, 650 00:35:34,000 --> 00:35:40,000 de feltételezik a kényszer nem emberek feltartotta darab papír, 651 00:35:40,000 --> 00:35:43,000 de ez a lista, és már csak Lucas kezdeni 652 00:35:43,000 --> 00:35:46,000 azért, mert szó szerint az első mutatót. 653 00:35:46,000 --> 00:35:51,000 Tegyük fel, hogy te magad vagy a mutató, és így is van a képessége, hogy mutasson valamit. 654 00:35:51,000 --> 00:35:56,000 Miért nem indul el a mutatott pontosan Lucas mutat? 655 00:35:56,000 --> 00:35:58,000 Jó, és hadd hozzanak ezt meg itt. 656 00:35:58,000 --> 00:36:04,000 Csak kedvéért vita, hadd húzza fel egy üres oldal van. 657 00:36:04,000 --> 00:36:06,000 Hogyan pontosan a nevét? >> Anita. 658 00:36:06,000 --> 00:36:08,000 Oké, Anita. 659 00:36:08,000 --> 00:36:18,000 Mondjuk node * anita = Lucas. 660 00:36:18,000 --> 00:36:22,000 Nos, nem kell hívni Lucas. Meg kell hívni az első. 661 00:36:22,000 --> 00:36:25,000 Miért van ez valójában összhangban a valósággal itt? 662 00:36:25,000 --> 00:36:27,000 Az egyik első már létezik. 663 00:36:27,000 --> 00:36:30,000 Gyártási különítettek feltehetően valahol itt. 664 00:36:30,000 --> 00:36:35,000 Node * az első, és ez már kiosztott egy listát valahogy. 665 00:36:35,000 --> 00:36:37,000 Nem tudom, hogyan történt. Ez történt óra előtt kezdődött. 666 00:36:37,000 --> 00:36:40,000 A láncolt lista az emberek hoztak létre. 667 00:36:40,000 --> 00:36:44,000 És most, ezen a ponton a történet, ez minden megy a Facebook látszólag később 668 00:36:44,000 --> 00:36:49,000 Ezen a ponton a történet, Anita már inicializálva meg kell egyeznie az első, 669 00:36:49,000 --> 00:36:51,000 ami nem jelenti azt, hogy Anita pontokat Lucas. 670 00:36:51,000 --> 00:36:53,000 Inkább, ő mutat, hogy mit is mutat a 671 00:36:53,000 --> 00:36:57,000 mivel az ugyanazt a címet, ami belül Lucas 32 bit - 1, 2, 3 - 672 00:36:57,000 --> 00:37:01,000 most is belül Anita 32 bit - 1, 2, 3. 673 00:37:01,000 --> 00:37:05,000 >> Most találni 22. Hogyan megy a csinálod ezt? 674 00:37:05,000 --> 00:37:07,000 Mi ez? >> Point mindegy. 675 00:37:07,000 --> 00:37:11,000 Mutasson mindegy, így megy előre, és úgy járnak ki a lehető legjobban tudod itt. 676 00:37:11,000 --> 00:37:15,000 Jó, jó, és most mutat, mi a neve, 22? 677 00:37:15,000 --> 00:37:18,000 Ramon. >> Ramon, így Ramon is feltartotta 22. 678 00:37:18,000 --> 00:37:20,000 Most már végeztek ellenőrzést. 679 00:37:20,000 --> 00:37:24,000 E Ramon == 22, és ha igen, például, meg tudjuk vissza igaz. 680 00:37:24,000 --> 00:37:26,000 Hadd, míg ezek a srácok itt állni kissé félszegen, 681 00:37:26,000 --> 00:37:32,000 hadd tegyen valamit gyorsan, mint a bool találni. 682 00:37:32,000 --> 00:37:37,000 Én megyek előre, és azt mondják (node ​​* lista, int n). 683 00:37:37,000 --> 00:37:39,000 Mindjárt vissza srácok. Csak ki kell írni egy kódot. 684 00:37:39,000 --> 00:37:45,000 És most megyek előre, és ezt, node * anita = listáját. 685 00:37:45,000 --> 00:37:51,000 És én megyek előre, és azt mondják while (anita! = NULL). 686 00:37:51,000 --> 00:37:57,000 >> A metafora itt egy kicsit feszített, de míg a (anita! = NULL), mit szeretnél csinálni? 687 00:37:57,000 --> 00:38:03,000 Kell valamilyen módon hivatkozás 688 00:38:03,000 --> 00:38:05,000 az egész, hogy az Anita mutat. 689 00:38:05,000 --> 00:38:08,000 A múltban, mikor volt struktúrákra, és amely egy csomópont, 690 00:38:08,000 --> 00:38:11,000 használtuk a dot jelölést, és azt mondanám, valami ilyesmit 691 00:38:11,000 --> 00:38:15,000 anita.n, de a probléma az, hogy Anita nem egy struct önmagában. 692 00:38:15,000 --> 00:38:17,000 Mi ő? 693 00:38:17,000 --> 00:38:21,000 Ő egy mutató, tehát tényleg, ha azt akarjuk, hogy ezt a dot-jelölést 694 00:38:21,000 --> 00:38:23,000 és ez fog nézni szándékosan egy kicsit rejtélyes, 695 00:38:23,000 --> 00:38:28,000 tennünk kell valamit, mint megy, amit Anita bal keze mutat 696 00:38:28,000 --> 00:38:31,000 és akkor kap a mező nevű n. 697 00:38:31,000 --> 00:38:35,000 Anita egy mutató, de mi * anita? 698 00:38:35,000 --> 00:38:38,000 Mit talál, ha megy, amit Anita is mutat? 699 00:38:38,000 --> 00:38:42,000 A struct, egy csomópont és egy csomópont, visszahívás, egy mező nevű n 700 00:38:42,000 --> 00:38:47,000 mert, emlékszem, ezek a 2 területen, a következő és az n, 701 00:38:47,000 --> 00:38:50,000 hogy láttunk egy pillanattal ezelőtt itt. 702 00:38:50,000 --> 00:38:53,000 >> Ahhoz, hogy ténylegesen utánozni ezt a kódot, 703 00:38:53,000 --> 00:39:02,000 tudtuk ezt, és azt mondják if ((* anita). n == n), n, hogy én keresem. 704 00:39:02,000 --> 00:39:04,000 Figyeljük meg, hogy a függvény vezetünk be a számot törődöm. 705 00:39:04,000 --> 00:39:10,000 Aztán lehet menni előre, és valami ilyesmit vissza igaz. 706 00:39:10,000 --> 00:39:12,000 Különben, ha nem ez a helyzet, mit szeretnél csinálni? 707 00:39:12,000 --> 00:39:19,000 Hogyan fordíthatom a kódot, amit Anita megtette intuitív gyalog végig a listát? 708 00:39:19,000 --> 00:39:26,000 Mit kell tennem ide, hogy szimulálják Anita megtegyék ezt a lépést a bal oldalon, hogy a lépés a bal? 709 00:39:26,000 --> 00:39:28,000 [Hallhatatlan diák válasza] >> Mi ez? 710 00:39:28,000 --> 00:39:30,000 [Hallhatatlan hallgatói válasz] 711 00:39:30,000 --> 00:39:34,000 Jó, nem egy rossz ötlet, de a múltban, amikor csináltam ezt, tettünk anita + + 712 00:39:34,000 --> 00:39:37,000 mert ez növelné az 1-es számot Anita, 713 00:39:37,000 --> 00:39:40,000 ami jellemzően pont a következő személy, mint Ramon, 714 00:39:40,000 --> 00:39:44,000 vagy az a személy mellé, vagy a mellé személynek le a pályáról. 715 00:39:44,000 --> 00:39:49,000 De ez nem elég jó itt, mert mit jelent ez a dolog néz ki, mint a memória? 716 00:39:49,000 --> 00:39:54,000 Nem. Meg kell tiltani, hogy a. 717 00:39:54,000 --> 00:40:00,000 Úgy tűnik ez a memóriában, és bár én már húzott 1-es és 2 és 3 egymáshoz közel, 718 00:40:00,000 --> 00:40:03,000 ha valóban ez-szimulálni lehet nektek, miközben mutatva ugyanazok az emberek, 719 00:40:03,000 --> 00:40:07,000 lehet néhány veszel egy véletlen lépést hátra, néhányan egy véletlenszerű előrelépést? 720 00:40:07,000 --> 00:40:10,000 >> Ez a káosz még mindig láncolt lista, 721 00:40:10,000 --> 00:40:13,000 de ezek a srácok bárhol lehet a memóriában, 722 00:40:13,000 --> 00:40:15,000 így anita + + nem fog dolgozni, miért? 723 00:40:15,000 --> 00:40:19,000 Mi van a helyszínen anita + +? 724 00:40:19,000 --> 00:40:21,000 Ki tudja. 725 00:40:21,000 --> 00:40:24,000 Ez valami más értéket, hogy csak azért történik, hogy közbelépett 726 00:40:24,000 --> 00:40:28,000 az összes ilyen csomópont véletlenül, mert mi nem használ egy tömböt. 727 00:40:28,000 --> 00:40:30,000 Mi kiosztott mindegyik csomópont külön-külön. 728 00:40:30,000 --> 00:40:32,000 Oké, ha ti is tiszta magatokat vissza. 729 00:40:32,000 --> 00:40:37,000 Hadd javaslom, hogy ahelyett, hogy anita + +, akkor inkább nem anita kap- 730 00:40:37,000 --> 00:40:42,000 jól, miért nem megyünk, amit Anita mutat meg, majd tegye. következő? 731 00:40:42,000 --> 00:40:45,000 Más szóval, megyünk Ramon, aki tartja a szám 22, 732 00:40:45,000 --> 00:40:51,000 majd. következőig mintha Anita lenne másolás bal keze mutató. 733 00:40:51,000 --> 00:40:54,000 De ő nem megy tovább, mint Ramon, mert találtunk 22. 734 00:40:54,000 --> 00:40:56,000 De ez lenne az ötlet. Nos, ez egy istenverte rendetlenség. 735 00:40:56,000 --> 00:40:59,000 Őszintén szólva, soha senki nem fog emlékezni a szintaxist, és így szerencsére 736 00:40:59,000 --> 00:41:04,000 ez valójában egy kicsit szándékos-oh, akkor valójában nem lát, amit írtam. 737 00:41:04,000 --> 00:41:08,000 Ez lenne vonzóbb, ha lehet. Voila! 738 00:41:08,000 --> 00:41:10,000 >> A színfalak mögött, én oldja meg a problémát így. 739 00:41:10,000 --> 00:41:14,000 Anita, hogy ezt a lépést a bal oldalon, 740 00:41:14,000 --> 00:41:18,000 először, mi megy a cím Anita mutat a 741 00:41:18,000 --> 00:41:23,000 és hol fog találni nem csak n, amit csak ellenőrizni összehasonlítás kedvéért, 742 00:41:23,000 --> 00:41:25,000 de akkor is talál next - ebben az esetben, 743 00:41:25,000 --> 00:41:28,000 Ramon bal keze mutató a következő csomópont a listában. 744 00:41:28,000 --> 00:41:32,000 De ez az isten, szörnyű rendetlenség, amelyre utaltam korábban, 745 00:41:32,000 --> 00:41:34,000 de kiderül, C lehetővé teszi számunkra, egyszerűsítése. 746 00:41:34,000 --> 00:41:40,000 Ahelyett, hogy az írás (* anita), akkor helyette csak annyit írj anita-> n, 747 00:41:40,000 --> 00:41:45,000 és ez pontosan ugyanaz a dolog funkcionálisan, de ez sokkal intuitívabb, 748 00:41:45,000 --> 00:41:48,000 és ez sokkal inkább összhangban van a kép, hogy mi már rajz 749 00:41:48,000 --> 00:41:50,000 Mindez időt nyilak. 750 00:41:50,000 --> 00:41:57,000 >> Végül, mit kell tennünk a végén ez a program? 751 00:41:57,000 --> 00:42:00,000 Van egy sor kódot maradt. 752 00:42:00,000 --> 00:42:02,000 Vissza mi? 753 00:42:02,000 --> 00:42:05,000 Hamis, mert ha megkapjuk az egész while ciklus 754 00:42:05,000 --> 00:42:10,000 és Anita valójában, null, ez azt jelenti, ment egészen a végén a jegyzék 755 00:42:10,000 --> 00:42:12,000 ahol ő volt mutatva, mi a neved? 756 00:42:12,000 --> 00:42:15,000 Ari. >> Ari bal keze, amely a null. 757 00:42:15,000 --> 00:42:18,000 Anita most null, és rájövök te csak itt állok félszegen bizonytalanságban 758 00:42:18,000 --> 00:42:21,000 mert én megyek ki egy monológ itt, 759 00:42:21,000 --> 00:42:23,000 de majd vonni újra egy pillanat. 760 00:42:23,000 --> 00:42:27,000 Anita null ezen a ponton a történet, így a while ciklus befejeződik, 761 00:42:27,000 --> 00:42:30,000 és mi vissza hamis, mert ha megkapta egészen Ari null pointer 762 00:42:30,000 --> 00:42:34,000 akkor nem volt több, hogy ő kérte a listán. 763 00:42:34,000 --> 00:42:39,000 Mi lehet tisztítani az egészet is, de ez egy nagyon jó végrehajtás, akkor 764 00:42:39,000 --> 00:42:43,000 A bejárás függvény, a függvény megtalálja a láncolt lista. 765 00:42:43,000 --> 00:42:48,000 Még mindig lineáris keresés, de ez nem olyan egyszerű, mint + + egy mutatót 766 00:42:48,000 --> 00:42:52,000 + + vagy egy i változó, mert most nem tudunk kitalálni 767 00:42:52,000 --> 00:42:54,000 ahol mindegyik csomópont a memóriában. 768 00:42:54,000 --> 00:42:57,000 Meg kell, hogy szó szerint követni a nyomát zsemlemorzsa, vagy még pontosabban, 769 00:42:57,000 --> 00:43:00,000 mutatók, hogy kap egy csomópont a másikkal. 770 00:43:00,000 --> 00:43:02,000 >> Most próbáljuk egy másikat. Anita, nem jössz vissza? 771 00:43:02,000 --> 00:43:06,000 Miért nem megyünk előre, és hozzá egy másik személy a közönség? 772 00:43:06,000 --> 00:43:08,000 Malloc-mi a neve? >> Rebecca. 773 00:43:08,000 --> 00:43:10,000 Rebecca. Rebecca már malloced a közönség, 774 00:43:10,000 --> 00:43:13,000 és ő most tárolja a számot 55. 775 00:43:13,000 --> 00:43:17,000 És a cél kéznél most az, hogy Anita beszúrni 776 00:43:17,000 --> 00:43:22,000 Rebecca a csatolt lista itt a megfelelő helyen. 777 00:43:22,000 --> 00:43:24,000 Gyere ide egy pillanatra. 778 00:43:24,000 --> 00:43:28,000 Tettem ilyesmit. 779 00:43:28,000 --> 00:43:32,000 Én megtettem node *. És mi a neved? 780 00:43:32,000 --> 00:43:34,000 Rebecca. >> Rebecca, oké. 781 00:43:34,000 --> 00:43:41,000 Rebecca kap malloc (sizeof (node)). 782 00:43:41,000 --> 00:43:44,000 Csakúgy, mint az általunk kiosztott dolgok, mint a diákok és miegymás a múltban, 783 00:43:44,000 --> 00:43:46,000 szükségünk van a méret a csomópont, így most Rebecca 784 00:43:46,000 --> 00:43:49,000 mutat, hogy milyen? 785 00:43:49,000 --> 00:43:52,000 Rebecca két területen belül vele, amelyek közül az egyik 55. 786 00:43:52,000 --> 00:43:55,000 Mit csináljunk, Rebecca-> = 55. 787 00:43:55,000 --> 00:44:00,000 De aztán rebecca-> next kellene-mint most, a kezét a fajta, ki tudja? 788 00:44:00,000 --> 00:44:03,000 Ez mutat néhány szemetet értéket, így miért nem jó intézkedés 789 00:44:03,000 --> 00:44:07,000 mi legalábbis ezt úgy, hogy a bal oldali most mellette. 790 00:44:07,000 --> 00:44:09,000 Most Anita, vegye innen. 791 00:44:09,000 --> 00:44:11,000 Van Rebecca miután kiosztották. 792 00:44:11,000 --> 00:44:20,000 Menj előre, és talál, ahol meg kell oldania Rebecca. 793 00:44:20,000 --> 00:44:25,000 Jó, nagyon jó. 794 00:44:25,000 --> 00:44:28,000 Oké, jó, és most szükségem van rád, hogy egy kicsit irányt, 795 00:44:28,000 --> 00:44:30,000 így elérte Ari. 796 00:44:30,000 --> 00:44:33,000 A bal kéz null, de Rebecca egyértelműen tartozik a jobb oldalon, 797 00:44:33,000 --> 00:44:36,000 tehát hogyan kell megváltoztatni ezt a láncolt lista 798 00:44:36,000 --> 00:44:38,000 annak érdekében, hogy be Rebecca a megfelelő helyet? 799 00:44:38,000 --> 00:44:42,000 Ha lehetne szó mozgatni ember bal keze körül, mint szükséges, 800 00:44:42,000 --> 00:44:48,000 fogjuk oldani a problémát így. 801 00:44:48,000 --> 00:44:52,000 Oké, jó, és közben, Rebecca bal keze már a lány mellett. 802 00:44:52,000 --> 00:44:54,000 >> Ez túl könnyű. 803 00:44:54,000 --> 00:44:57,000 Próbáljuk elosztásának haladhat-mi majdnem kész, 20. 804 00:44:57,000 --> 00:44:59,000 Oké, gyere fel. 805 00:44:59,000 --> 00:45:04,000 20 került felosztásra, ezért hadd menjen előre, és megismétlem itt 806 00:45:04,000 --> 00:45:07,000 imént tett node * Saad. 807 00:45:07,000 --> 00:45:11,000 Van malloc (sizeof (node)). 808 00:45:11,000 --> 00:45:16,000 Ezután ugyanezt pontos szintaxist ahogy azelőtt 20, 809 00:45:16,000 --> 00:45:20,000 és én megteszem next = NULL, és most ez akár Anita 810 00:45:20,000 --> 00:45:23,000 beszúrni Önt a láncolt lista, ha játszhat, hogy pontosan ugyanazt a szerepet. 811 00:45:23,000 --> 00:45:30,000 Execute. 812 00:45:30,000 --> 00:45:32,000 Oké, jó. 813 00:45:32,000 --> 00:45:38,000 Most, gondolom, mielőtt elkezdené mozog bal kéz körül. 814 00:45:38,000 --> 00:45:46,000 Te messze van a leginkább kínos szerep ma. 815 00:45:46,000 --> 00:45:59,000 Kinek a keze kell helyezni az első? 816 00:45:59,000 --> 00:46:02,000 Oké, várj, hallok valami nincs években. 817 00:46:02,000 --> 00:46:07,000 Ha egyes emberek azt udvariasan szeretné, hogy segítsen megoldani egy kínos helyzet. 818 00:46:07,000 --> 00:46:11,000 Kinek a bal oldali frissíteni kell 1. talán? Igen. 819 00:46:11,000 --> 00:46:13,000 [Student] Saad években. 820 00:46:13,000 --> 00:46:15,000 Oké, Saad azon, miért, igaz? 821 00:46:15,000 --> 00:46:17,000 [Hallhatatlan hallgatói válasz] 822 00:46:17,000 --> 00:46:19,000 Jó, mert ha mozgunk, mi a neve? >> Marshall. 823 00:46:19,000 --> 00:46:22,000 Marshall, ha mozog a kezét first down null, 824 00:46:22,000 --> 00:46:25,000 most már szó szerint árva négy ember ebben a listában 825 00:46:25,000 --> 00:46:29,000 mert ő volt az egyetlen dolog, amit mutat Ramon és mindenki balra, 826 00:46:29,000 --> 00:46:31,000 úgy, hogy a frissítés mutató első volt rossz. 827 00:46:31,000 --> 00:46:33,000 Nézzük, hogy a visszavonás. 828 00:46:33,000 --> 00:46:37,000 Jó, és most megy előre, és mozgassa a megfelelő bal oldali mutatva Ramon. 829 00:46:37,000 --> 00:46:39,000 Ez úgy érzi, egy kicsit felesleges. 830 00:46:39,000 --> 00:46:41,000 Most van két ember mutatott Ramon, de ez rendben van 831 00:46:41,000 --> 00:46:43,000 mert most, hogy mást is frissíti a listát? 832 00:46:43,000 --> 00:46:48,000 Milyen más kéz mozogni? 833 00:46:48,000 --> 00:46:53,000 Nagyszerű, most már elvesztette memória? 834 00:46:53,000 --> 00:46:57,000 Nem annyira jó, lássuk, ha nem tudjuk megtörni ezt még egyszer. 835 00:46:57,000 --> 00:47:00,000 >> Mallocing egyszer, utoljára, 5-ös szám. 836 00:47:00,000 --> 00:47:04,000 Minden utat vissza, gyere le. 837 00:47:04,000 --> 00:47:08,000 Ez nagyon izgalmas. 838 00:47:08,000 --> 00:47:15,000 [Taps] 839 00:47:15,000 --> 00:47:17,000 Mi a neve? >> Ron. 840 00:47:17,000 --> 00:47:19,000 Ron, oké, akkor malloced mint 5-ös szám. 841 00:47:19,000 --> 00:47:23,000 Épp végrehajtandó kód, ami csaknem azonos e 842 00:47:23,000 --> 00:47:26,000 csak egy másik nevet. 843 00:47:26,000 --> 00:47:28,000 Kiváló. 844 00:47:28,000 --> 00:47:38,000 Most, Anita, sok szerencsét behelyezésénél 5-ös szám a lista most. 845 00:47:38,000 --> 00:47:43,000 Jó, és? 846 00:47:43,000 --> 00:47:47,000 Kiváló, így ez tényleg a harmadik három teljes esetben. 847 00:47:47,000 --> 00:47:49,000 Először volt valaki a végén, Rebecca. 848 00:47:49,000 --> 00:47:51,000 Meg aztán valaki a közepén. 849 00:47:51,000 --> 00:47:53,000 Most már valaki az elején, és ebben a példában, 850 00:47:53,000 --> 00:47:56,000 most frissíteni kellett Lucas először 851 00:47:56,000 --> 00:48:00,000 mivel az első elem a lista most pont egy új csomópont, 852 00:48:00,000 --> 00:48:03,000 aki viszont mutat at node szám 9. 853 00:48:03,000 --> 00:48:06,000 >> Ez egy rendkívül kínos tüntetés, biztos vagyok benne, 854 00:48:06,000 --> 00:48:08,000 így egy nagy tapsot ezeket a fickókat, ha lehet. 855 00:48:08,000 --> 00:48:11,000 Szép munka. 856 00:48:11,000 --> 00:48:17,000 Ez minden. Lehet, hogy tartsa a darab papírt egy kis memória. 857 00:48:17,000 --> 00:48:22,000 Kiderült, hogy ezt a kódot 858 00:48:22,000 --> 00:48:26,000 nem annyira egyszerű, mint csak mozgó kéz körül 859 00:48:26,000 --> 00:48:28,000 és rámutat mutatók különböző dolgokat. 860 00:48:28,000 --> 00:48:31,000 De észre, hogy amikor eljön az ideje, hogy végre valami hasonló 861 00:48:31,000 --> 00:48:34,000 egy csatolt lista vagy egy változata, ha Ön összpontosítani igazán 862 00:48:34,000 --> 00:48:38,000 Ezen alapvető fundamentumok, a harapás méretű problémát nekem kell kitalálni, 863 00:48:38,000 --> 00:48:43,000 ez a kéz vagy a kéz, rájönnek, hogy mi egyébként meglehetősen komplex program 864 00:48:43,000 --> 00:48:47,000 lehet, valójában, csökkenthető meglehetősen egyszerű építőelemek ilyen. 865 00:48:47,000 --> 00:48:51,000 >> Nézzük a dolgokat egy kifinomultabb irányba is. 866 00:48:51,000 --> 00:48:53,000 Most már fogalma a csatolt listán. 867 00:48:53,000 --> 00:48:57,000 Mi is, köszönhetően a javaslatot vissza-a kétszeresen láncolt lista, 868 00:48:57,000 --> 00:49:01,000 amely úgy néz ki, közel azonos, de most van két pointers belül a struct 869 00:49:01,000 --> 00:49:05,000 egy helyett, és valószínűleg hívni e mutatók előző és a következő 870 00:49:05,000 --> 00:49:08,000 vagy balra vagy jobbra, de mi valójában szüksége van kettő. 871 00:49:08,000 --> 00:49:10,000 A kód lenne egy kicsit nagyobb szerepet. 872 00:49:10,000 --> 00:49:12,000 Anita kellett volna több munkát itt a színpadon. 873 00:49:12,000 --> 00:49:15,000 De minden bizonnyal végre ezt a fajta szerkezet. 874 00:49:15,000 --> 00:49:19,000 Ami a működési idő, bár, mi lenne a futási idő 875 00:49:19,000 --> 00:49:24,000 az Anita találni számos n egy láncolt lista most? 876 00:49:24,000 --> 00:49:27,000 Még mindig nagy O n, így nem jobb, mint a lineáris keresés. 877 00:49:27,000 --> 00:49:29,000 Nem tehetünk bináris keresés, bár, újra. 878 00:49:29,000 --> 00:49:34,000 Miért volt ez a helyzet? Nem lehet ugrani. 879 00:49:34,000 --> 00:49:36,000 Annak ellenére, hogy nyilvánvalóan megtekinthet minden ember a színpadon, 880 00:49:36,000 --> 00:49:39,000 és Anita volna eyeballed, és azt mondta: "Itt van a közepén a lista" 881 00:49:39,000 --> 00:49:42,000 ő nem tudja, hogy ha ő volt a számítógépes program 882 00:49:42,000 --> 00:49:47,000 mert az egyetlen dolog, amit meg kellett reteszt, hogy az elején a forgatókönyv 883 00:49:47,000 --> 00:49:50,000 Lucas volt, aki az első mutatót. 884 00:49:50,000 --> 00:49:53,000 Ő feltétlenül követni ezek a kapcsolatok, 885 00:49:53,000 --> 00:49:56,000 számlálás a maga módján, amíg rájött nagyjából a közepén, 886 00:49:56,000 --> 00:49:58,000 és még akkor is, ő nem fogja tudni, hogy mikor ő érte el a középső 887 00:49:58,000 --> 00:50:01,000 hacsak nem megy egészen a végéig, hogy kitaláljuk, hogy hány van, 888 00:50:01,000 --> 00:50:05,000 akkor backtracks, és hogy túl nehéz lenne, ha nem volt 889 00:50:05,000 --> 00:50:07,000 kétszeresen láncolt lista valami. 890 00:50:07,000 --> 00:50:10,000 >> Egyes problémák megoldása ma, de bevezetése mások. 891 00:50:10,000 --> 00:50:12,000 Mi a helyzet a másik adatszerkezet összesen? 892 00:50:12,000 --> 00:50:15,000 Ez a fénykép a tálcákat Mather House, 893 00:50:15,000 --> 00:50:19,000 és ebben az esetben, hogy van egy adatstruktúra általunk is ilyen már beszélt. 894 00:50:19,000 --> 00:50:22,000 Beszéltünk egy köteg keretében memória, 895 00:50:22,000 --> 00:50:26,000 és ez a fajta szándékosan nevezték, mert egy halom feltételeiben memória 896 00:50:26,000 --> 00:50:31,000 gyakorlatilag egy adatszerkezet, amely egyre több és több dolgot rakott a tetején. 897 00:50:31,000 --> 00:50:35,000 De az érdekes dolog a verem, mint ahogy az a valóságban, 898 00:50:35,000 --> 00:50:38,000 az, hogy ez egy különleges fajta adatszerkezet. 899 00:50:38,000 --> 00:50:42,000 Ez egy adatstruktúra ahol az első elem 900 00:50:42,000 --> 00:50:46,000 az utolsó elem ki. 901 00:50:46,000 --> 00:50:50,000 Ha te vagy az első tálcát kell helyezni a verembe, 902 00:50:50,000 --> 00:50:53,000 te lesz sajnos az utolsó tálcát le kell venni a stack, 903 00:50:53,000 --> 00:50:55,000 és ez nem feltétlenül jó dolog. 904 00:50:55,000 --> 00:50:58,000 Ezzel szemben, akkor gondolj bele a másik irányba, 905 00:50:58,000 --> 00:51:02,000 az utolsó az első ki. 906 00:51:02,000 --> 00:51:05,000 >> Nos, akkor bármilyen forgatókönyv jöhetnek szóba, ahol amelynek stack 907 00:51:05,000 --> 00:51:08,000 adatstruktúra, ahol van, hogy az ingatlan 908 00:51:08,000 --> 00:51:13,000 Az utolsó, először ki, valójában lenyűgöző? 909 00:51:13,000 --> 00:51:16,000 Ez egy jó dolog? Ez egy rossz dolog? 910 00:51:16,000 --> 00:51:19,000 Ez feltétlenül egy rossz dolog, ha a tálcák nem voltak egyformák 911 00:51:19,000 --> 00:51:21,000 és ők minden speciális különböző színeket vagy miegymás, 912 00:51:21,000 --> 00:51:24,000 és a szín, amit szeretnék, végig az alján. 913 00:51:24,000 --> 00:51:26,000 Természetesen, ha nem tud, hogy a nagy erőfeszítés nélkül. 914 00:51:26,000 --> 00:51:28,000 Meg kell kezdeni a felső és a munka az utat lefelé. 915 00:51:28,000 --> 00:51:31,000 Hasonlóképpen, mi lenne, ha egy ilyen rajongó fiúk 916 00:51:31,000 --> 00:51:34,000 aki vár egész éjszaka próbál egy iPhone és egy vonalba 917 00:51:34,000 --> 00:51:36,000 egy olyan helyen, mint ez? 918 00:51:36,000 --> 00:51:40,000 Nem lenne jó, ha az Apple store 919 00:51:40,000 --> 00:51:42,000 volt egy halom adatszerkezetet? 920 00:51:42,000 --> 00:51:44,000 Yay? Nay? 921 00:51:44,000 --> 00:51:47,000 Ez csak arra jó, az emberek, akik megjelennek az utolsó lehetséges pillanatban 922 00:51:47,000 --> 00:51:50,000 majd kap kopasztott le a sorban. 923 00:51:50,000 --> 00:51:52,000 És valóban, az a tény, hogy én annyira hajlandó mondani queue 924 00:51:52,000 --> 00:51:56,000 valójában összhangban áll azzal, amit szeretnénk hívni az ilyen adatok struktúrája, 925 00:51:56,000 --> 00:51:59,000 egy a valóságban, ha a rendelés nem mindegy, 926 00:51:59,000 --> 00:52:02,000 és azt szeretné, az elsőt, hogy az első egyet 927 00:52:02,000 --> 00:52:04,000 ha csak a kedvéért az emberi tisztesség. 928 00:52:04,000 --> 00:52:07,000 Majd általában véve, hogy egy sort adatszerkezet. 929 00:52:07,000 --> 00:52:11,000 >> Kiderült mellett kapcsolódó listák, kezdhetjük ezekkel azonos alapvető elképzeléseket 930 00:52:11,000 --> 00:52:15,000 és meg kell kezdeni új és a különböző megoldásokat. 931 00:52:15,000 --> 00:52:19,000 Például abban az esetben, egy verem, akkor jelenthet egy verem 932 00:52:19,000 --> 00:52:22,000 egy adatstruktúra, mint ez, azt javaslom. 933 00:52:22,000 --> 00:52:26,000 Ebben az esetben, már bejelentett egy struct, és mondtam belül e struktúra 934 00:52:26,000 --> 00:52:30,000 egy tömb a számok, majd a változó nevű méret, 935 00:52:30,000 --> 00:52:33,000 és fogom hívni ezt a dolgot egy verem. 936 00:52:33,000 --> 00:52:35,000 Nos, miért ez tényleg működik? 937 00:52:35,000 --> 00:52:43,000 Abban az esetben, ha a verem, nem tudtam felhívni ezt hatékonyan meg a képernyőn, mint egy tömb. 938 00:52:43,000 --> 00:52:47,000 Itt van a verem. Azok az én szám. 939 00:52:47,000 --> 00:52:50,000 És mi lesz felhívni őket, mint ez, ez, ez, ez, ez. 940 00:52:50,000 --> 00:52:53,000 És aztán van néhány egyéb adat tagja van, 941 00:52:53,000 --> 00:52:58,000 amely az úgynevezett mérete, tehát ez a méret, és ez számok, 942 00:52:58,000 --> 00:53:02,000 és együttesen az egész iPad itt az egyik stack struktúrát. 943 00:53:02,000 --> 00:53:07,000 Most, alapértelmezés szerint mérete feltehetően kapott inicializálni kell 0-ra, 944 00:53:07,000 --> 00:53:11,000 és mi van benne a tömb a számok eredetileg 945 00:53:11,000 --> 00:53:14,000 amikor először osztja tömb? 946 00:53:14,000 --> 00:53:16,000 Garbage. Ki tudja? És ez valójában nem számít. 947 00:53:16,000 --> 00:53:20,000 Nem számít, hogy ez az 1, 2, 3, 4, 5, teljesen véletlenszerűen 948 00:53:20,000 --> 00:53:25,000 a balszerencse tárolt saját szerkezete, mert mindaddig, amíg tudom, hogy a méret a verem 949 00:53:25,000 --> 00:53:29,000 0, akkor tudom, hogy programozottan, ne nézd meg bármelyik elem a tömbben. 950 00:53:29,000 --> 00:53:31,000 Nem számít, hogy mi van ott. 951 00:53:31,000 --> 00:53:34,000 Ne nézz rájuk, mint lenne a következménye, a mérete 0-ra. 952 00:53:34,000 --> 00:53:38,000 >> De tegyük fel, most megy előre, és helyezze valamit a verem. 953 00:53:38,000 --> 00:53:42,000 Azt akarom, hogy tegye be a 5-ös szám, ezért tettem 5-ös szám van, 954 00:53:42,000 --> 00:53:45,000 aztán mit tettem le ide? 955 00:53:45,000 --> 00:53:48,000 Most valójában letettem 1 a méret, 956 00:53:48,000 --> 00:53:50,000 és most a verem mérete 1. 957 00:53:50,000 --> 00:53:53,000 Mit tegyek, ha megy előre, és illessze be a számot, mondjuk 7 következő? 958 00:53:53,000 --> 00:53:57,000 Ez akkor frissül, 2 és aztán megteszem 9, 959 00:53:57,000 --> 00:54:02,000 és akkor ez frissül 3-ra. 960 00:54:02,000 --> 00:54:05,000 De az érdekes funkció már e verem, hogy a 961 00:54:05,000 --> 00:54:09,000 Kéne eltávolítani melyik eleme, ha azt szeretnénk, hogy a pop 962 00:54:09,000 --> 00:54:12,000 valamit le a verem, hogy úgy mondjam? 963 00:54:12,000 --> 00:54:14,000 9 lenne az első dolog, hogy menjen. 964 00:54:14,000 --> 00:54:18,000 Hogyan kell a kép változik, ha azt akarom, hogy a pop egy elemet a veremből, 965 00:54:18,000 --> 00:54:20,000 sokkal, mint egy tálcát Mather? 966 00:54:20,000 --> 00:54:22,000 Aha. >> [Student] Teljes méret 2-re. 967 00:54:22,000 --> 00:54:27,000 Pontosan, minden, amit csinál van beállítva, méret 2, és mit tegyek a tömb? 968 00:54:27,000 --> 00:54:29,000 Nem kell tennie semmit. 969 00:54:29,000 --> 00:54:32,000 Tudtam, csak hogy anális, hogy egy 0 ott, vagy a -1 vagy valamit jelent 970 00:54:32,000 --> 00:54:34,000 , hogy ez nem egy legit érték, de ez nem számít, mert 971 00:54:34,000 --> 00:54:37,000 Tudok rögzíteni kívül magát a tömböt, hogy mennyi ideig van 972 00:54:37,000 --> 00:54:41,000 úgy, hogy tudom, csak nézd meg az első két eleme ezt a tömböt. 973 00:54:41,000 --> 00:54:47,000 Most, ha elmegyek és adjuk hozzá a 8-as szám az e tömb, hogyan változik a kép a következő lépés? 974 00:54:47,000 --> 00:54:50,000 Ez akkor válik 8, és ez lesz 3. 975 00:54:50,000 --> 00:54:52,000 Én egy pár vágás sarkok itt. 976 00:54:52,000 --> 00:54:56,000 Most már 5., 7., 8., és vagyunk vissza a mérete a 3. 977 00:54:56,000 --> 00:54:58,000 Ez elég könnyen megvalósítható, 978 00:54:58,000 --> 00:55:06,000 de mikor fogjuk bánni ezt a tervezési döntés? 979 00:55:06,000 --> 00:55:09,000 Mikor a dolgok kezdenek menni nagyon, nagyon rossz? Igen. 980 00:55:09,000 --> 00:55:11,000 [Hallhatatlan hallgatói válasz] 981 00:55:11,000 --> 00:55:13,000 Ha azt szeretné, hogy menjen vissza, és kap az első elemet teszel be 982 00:55:13,000 --> 00:55:18,000 >> Kiderült, hogy itt annak ellenére, hogy egy halom egy tömb, a motorháztető alatt, 983 00:55:18,000 --> 00:55:21,000 Ezen adatszerkezetek általunk elkezdett beszélni is általánosan ismert 984 00:55:21,000 --> 00:55:25,000 absztrakt adatszerkezetek amellyel hogyan ők végre 985 00:55:25,000 --> 00:55:27,000 teljesen kívül a lényeg. 986 00:55:27,000 --> 00:55:31,000 Egy adatszerkezet, mint egy köteg állítólag hozzá support 987 00:55:31,000 --> 00:55:35,000 műveletek, mint a push, ami emeli a tálcát a verembe, 988 00:55:35,000 --> 00:55:39,000 és a pop, amely eltávolítja az elemet a veremből, és ennyi. 989 00:55:39,000 --> 00:55:43,000 Ha úgy döntesz, hogy letölthető valaki más kódját, aki már megvalósult 990 00:55:43,000 --> 00:55:46,000 ezt a dolgot nevezett verem, ez a személy írt volna 991 00:55:46,000 --> 00:55:49,000 Csak a két funkciót az Ön számára, és nyomja meg a pop, amelynek egyetlen célja az életben 992 00:55:49,000 --> 00:55:51,000 lenne pontosan erre. 993 00:55:51,000 --> 00:55:54,000 Te vagy neki, aki végre, hogy a program 994 00:55:54,000 --> 00:55:58,000 lett volna teljesen az, aki dönt arról, hogyan kell 995 00:55:58,000 --> 00:56:00,000 a szemantika tolás és popping a motorháztető alatt 996 00:56:00,000 --> 00:56:03,000 vagy működésének toló és popping. 997 00:56:03,000 --> 00:56:07,000 És tettem egy kissé rövidlátó döntés ide 998 00:56:07,000 --> 00:56:10,000 végrehajtási én verem ezzel az egyszerű adatszerkezettel miért? 999 00:56:10,000 --> 00:56:12,000 Ha működik ez adatstruktúra szünetet? 1000 00:56:12,000 --> 00:56:18,000 Mely pontján kell még egy hibaüzenet, amikor a felhasználó kéri push, például? 1001 00:56:18,000 --> 00:56:20,000 [Student] Ha nincs több hely. 1002 00:56:20,000 --> 00:56:23,000 Pontosan, ha nincs több hely, ha már túllépett kapacitásnak, 1003 00:56:23,000 --> 00:56:27,000 amely a nagybetűs, mert azt sugallja, hogy ez valamiféle globális állandó. 1004 00:56:27,000 --> 00:56:30,000 Nos, akkor én most megyek, hogy meg kell mondani, hogy "Sajnálom, nem tudok nyomja másik értéket 1005 00:56:30,000 --> 00:56:32,000 a verembe, "nagyon hasonló a Mather. 1006 00:56:32,000 --> 00:56:36,000 >> Egy bizonyos ponton, mennek, hogy elérje a felső része a kis szekrény. 1007 00:56:36,000 --> 00:56:39,000 Nincs több hely vagy kapacitás a stack, mely ponton van valamilyen hiba. 1008 00:56:39,000 --> 00:56:42,000 Meg kell tenni az elemet valahol máshol, a tálca valahol máshol, 1009 00:56:42,000 --> 00:56:44,000 vagy sehol egyáltalán. 1010 00:56:44,000 --> 00:56:47,000 Most, egy sorban, sikerült végre egy kicsit másképp. 1011 00:56:47,000 --> 00:56:50,000 A sorban egy kicsit más, hogy a motorháztető alatt, akkor végre kell hajtani 1012 00:56:50,000 --> 00:56:54,000 tömbként, de miért, ebben az esetben én javaslatot 1013 00:56:54,000 --> 00:56:59,000 hogy is van fejelem képviselő a fejét a lista 1014 00:56:59,000 --> 00:57:06,000 az első a listán, az első ember a sorban az Apple bolt, továbbá a méret? 1015 00:57:06,000 --> 00:57:14,000 Miért van szükség egy további adat itt? 1016 00:57:14,000 --> 00:57:16,000 Gondolj vissza, hogy milyen számok 1017 00:57:16,000 --> 00:57:18,000 ha már lehívott az alábbiak szerint. 1018 00:57:18,000 --> 00:57:21,000 Tegyük fel, hogy ez most a várólista helyett verem, 1019 00:57:21,000 --> 00:57:24,000 a különbség, mint az Apple store-queue igazságos. 1020 00:57:24,000 --> 00:57:27,000 Az első, aki sorban elején a jegyzék, 5. számú ebben az esetben, 1021 00:57:27,000 --> 00:57:30,000 ő is fog beengedni a boltba először. 1022 00:57:30,000 --> 00:57:32,000 Csináljuk ezt. 1023 00:57:32,000 --> 00:57:35,000 Tegyük fel, hogy ez az állam az én sorban ebben a pillanatban, és most az Apple store 1024 00:57:35,000 --> 00:57:39,000 megnyílik, és az első személy, 5-ös, vezetik be a boltba. 1025 00:57:39,000 --> 00:57:43,000 Hogyan változtathatom meg a képet, most, hogy megszüntetjük sorban az első ember 1026 00:57:43,000 --> 00:57:47,000 elején a vonal? 1027 00:57:47,000 --> 00:57:50,000 Mi ez? >> [Student] Módosítsa a sorban. 1028 00:57:50,000 --> 00:57:52,000 Változtassuk meg a fejét, így 5 eltűnik. 1029 00:57:52,000 --> 00:57:56,000 Valójában, ez mintha-hogyan kell ezt csinálni? 1030 00:57:56,000 --> 00:58:00,000 Valójában, ez mintha ez a fickó eltűnik. 1031 00:58:00,000 --> 00:58:03,000 Mi lenne 7-es számú teendő tényleges boltban? 1032 00:58:03,000 --> 00:58:05,000 Ők, hogy egy nagy lépést előre. 1033 00:58:05,000 --> 00:58:08,000 >> De mit értünk jött, hogy értékeljék, amikor a tömbök 1034 00:58:08,000 --> 00:58:10,000 és a mozgó dolgok körül? 1035 00:58:10,000 --> 00:58:12,000 Ez egyfajta hulladék az idejét, ugye? 1036 00:58:12,000 --> 00:58:16,000 Miért kell ilyen anális, mint hogy az első ember 1037 00:58:16,000 --> 00:58:21,000 elején a vonal fizikailag kezdetét a darab memória? 1038 00:58:21,000 --> 00:58:23,000 Ez teljesen felesleges. Miért? 1039 00:58:23,000 --> 00:58:26,000 Mi lehet Csak arra emlékszem, helyette? >> [Hallhatatlan tanulói válasz] 1040 00:58:26,000 --> 00:58:30,000 Pontosan tudtam, csak emlékszem, hogy ennek további adatokkal member fej 1041 00:58:30,000 --> 00:58:34,000 hogy most a fejét a lista már nem 0, ami nem volt egy perce. 1042 00:58:34,000 --> 00:58:39,000 Most tulajdonképpen az 1-es szám. Ily módon kapok egy kis optimalizálás. 1043 00:58:39,000 --> 00:58:44,000 Csak azért, mert én már megszüntetjük sorban valaki a vonal elején a határvonalat az Apple store 1044 00:58:44,000 --> 00:58:47,000 nem azt jelenti, mindenkinek váltani, ami recall lineáris művelet. 1045 00:58:47,000 --> 00:58:50,000 Én inkább tölteni konstans idő csak 1046 00:58:50,000 --> 00:58:53,000 és elérni, majd egy sokkal gyorsabb választ. 1047 00:58:53,000 --> 00:58:56,000 De az árat én fizetem, amit szerezni, hogy a teljesítménnyel kapcsolatos további 1048 00:58:56,000 --> 00:58:58,000 , és nem kell váltani mindenkinek? 1049 00:58:58,000 --> 00:59:01,000 Aha. >> [Hallhatatlan tanulói válasz] 1050 00:59:01,000 --> 00:59:04,000 Lehet hozzá több ember, valamint, hogy a probléma ortogonális 1051 00:59:04,000 --> 00:59:07,000 arra, hogy nem vagyunk változó emberek. 1052 00:59:07,000 --> 00:59:11,000 Ez még mindig egy tömb, így függetlenül attól, hogy mi váltani mindenkinek, vagy nem- 1053 00:59:11,000 --> 00:59:13,000 oh, értem, mire gondolsz, oké. 1054 00:59:13,000 --> 00:59:16,000 Igazából egyetértek, amit mondasz, hogy ez majdnem olyan, mintha 1055 00:59:16,000 --> 00:59:19,000 mi most soha nem fog használni a kezdete ennek a tömb többé 1056 00:59:19,000 --> 00:59:22,000 mert ha eltávolítani 5, aztán vegye ki 7. 1057 00:59:22,000 --> 00:59:24,000 De én csak fel az embereket, hogy a jobb oldalon. 1058 00:59:24,000 --> 00:59:28,000 >> Olyan, mintha én kiesik hely, és végül a sort esik szét semmit, 1059 00:59:28,000 --> 00:59:31,000 így is csak az emberek wraparound, 1060 00:59:31,000 --> 00:59:35,000 és mi is úgy gondolja, az e tömb valóban valamiféle körkörös szerkezet, 1061 00:59:35,000 --> 00:59:38,000 de mit használ üzemeltető C kell csinálni, hogy a fajta wraparound? 1062 00:59:38,000 --> 00:59:40,000 [Hallhatatlan diák válasza] >> A modulo operátor. 1063 00:59:40,000 --> 00:59:43,000 Ez egy kicsit bosszantó, hogy gondolja át, hogyan csinálod a wraparound, 1064 00:59:43,000 --> 00:59:46,000 de nem tudtunk csinálni, és mi lehetne kezdeni üzembe az emberek, hogy mi szokott lenni az első a sorban, 1065 00:59:46,000 --> 00:59:52,000 de ne feledd, hogy ennek vezetője a változó, hogy ki a tényleges vezetője a vonal valójában. 1066 00:59:52,000 --> 00:59:57,000 Mi lenne, ha ahelyett, hogy célunk, végül, bár, 1067 00:59:57,000 --> 01:00:00,000 az volt, hogy néz ki a számokat, mint mi itt a színpadon Anita, 1068 01:00:00,000 --> 01:00:02,000 de mi igazán akarjuk, hogy a legjobb az összes e világok? 1069 01:00:02,000 --> 01:00:05,000 Azt akarjuk, hogy több, mint a tömb kifinomultságát teszi 1070 01:00:05,000 --> 01:00:09,000 mert azt akarjuk, hogy a képesség, hogy dinamikusan növekszik a adatszerkezet. 1071 01:00:09,000 --> 01:00:12,000 De mi nem akarjuk, hogy kénytelen valami, amit rámutatott 1072 01:00:12,000 --> 01:00:15,000 Az első előadás nem volt optimális algoritmust, 1073 01:00:15,000 --> 01:00:17,000 hogy a lineáris keresés. 1074 01:00:17,000 --> 01:00:21,000 Kiderült, hogy lehet, sőt, elérése 1075 01:00:21,000 --> 01:00:24,000 vagy legalábbis közel konstans időt, amelyben valaki, mint Anita, 1076 01:00:24,000 --> 01:00:27,000 ha ő úgy konfigurálja neki adatstruktúra, hogy nem a láncolt lista, 1077 01:00:27,000 --> 01:00:30,000 nem, hogy egy verem, nem, hogy egy sor, tudott, sőt, 1078 01:00:30,000 --> 01:00:33,000 felér egy adatszerkezetet, amely lehetővé teszi neki, hogy nézzen ki a dolgokat, 1079 01:00:33,000 --> 01:00:37,000 akár szóval, nem csak számok, milyen hívjuk konstans idő. 1080 01:00:37,000 --> 01:00:40,000 >> És valóban, előretekintve, az egyik psets ebben az osztályban szinte mindig 1081 01:00:40,000 --> 01:00:43,000 a megvalósítása spellchecker, ahol 1082 01:00:43,000 --> 01:00:46,000 adunk ismét néhány 150.000 angol szavak és a cél az, hogy 1083 01:00:46,000 --> 01:00:51,000 betölteni ezeket a memóriába, és gyorsan képes legyen válaszolni a kérdésekre a forma 1084 01:00:51,000 --> 01:00:54,000 a szóval helyesen írta? 1085 01:00:54,000 --> 01:00:58,000 És ez tényleg szívás, ha kellett navigálhat végig 150.000 szó válaszolni. 1086 01:00:58,000 --> 01:01:02,000 De valójában, akkor láthatjuk, hogy meg tudjuk csinálni nagyon, nagyon gyors idő. 1087 01:01:02,000 --> 01:01:06,000 És ez fog bevonni végrehajtása egy úgynevezett hash tábla, 1088 01:01:06,000 --> 01:01:09,000 és bár első pillantásra ez a dolog úgynevezett hash tábla fog 1089 01:01:09,000 --> 01:01:12,000 hadd elérni ezeket szuper gyors reakcióidő, 1090 01:01:12,000 --> 01:01:18,000 kiderül, hogy van valójában egy probléma. 1091 01:01:18,000 --> 01:01:23,000 Amikor eljön az ideje, hogy végre ezt a dolgot nevezett, ismét csinálom újra. 1092 01:01:23,000 --> 01:01:25,000 Én vagyok itt az egyetlen. 1093 01:01:25,000 --> 01:01:28,000 Amikor eljön az ideje, hogy végrehajtja ezt a dolgot hívják hash tábla, 1094 01:01:28,000 --> 01:01:30,000 mi kell majd döntést hozni. 1095 01:01:30,000 --> 01:01:32,000 Mekkora kell, ez a dolog valójában? 1096 01:01:32,000 --> 01:01:36,000 És amikor elkezdünk behelyezésekor számokat ebbe hash tábla, 1097 01:01:36,000 --> 01:01:38,000 hogyan fogjuk tárolni őket oly módon, 1098 01:01:38,000 --> 01:01:42,000 hogy lehet kapni őket vissza, amilyen gyorsan csak mi van velük? 1099 01:01:42,000 --> 01:01:45,000 De majd meglátjuk nemsokára, hogy ez a kérdés 1100 01:01:45,000 --> 01:01:48,000 amikor mindenki születésnapja van, az osztály lesz elég jelentősége. 1101 01:01:48,000 --> 01:01:51,000 Kiderült, hogy ebben a szobában, van néhány száz ember, 1102 01:01:51,000 --> 01:01:56,000 így az esélye, hogy mi ketten van egyforma születésnapja valószínűleg elég magas. 1103 01:01:56,000 --> 01:01:58,000 Mi van, ha csak 40 vagyunk ebben a szobában? 1104 01:01:58,000 --> 01:02:02,000 Mi az esélye, hogy két ember azonos születésnap? 1105 01:02:02,000 --> 01:02:04,000 [Diákok] Több mint 50%. 1106 01:02:04,000 --> 01:02:06,000 Igen, több mint 50%. Sőt, én is hozott egy táblázatot. 1107 01:02:06,000 --> 01:02:08,000 Kiderült, és ez tényleg csak egy settenkedik sajtóbemutató, 1108 01:02:08,000 --> 01:02:12,000 ha már csak 58-en vagyunk ebben a teremben, annak valószínűsége, 2 velünk 1109 01:02:12,000 --> 01:02:16,000 azonos születésnapja kiemelkedően magas, közel 100%-os, 1110 01:02:16,000 --> 01:02:20,000 és ez fog okozni egy csomó árthat nekünk szerdán. 1111 01:02:20,000 --> 01:02:24,000 >> Ezzel azt mondta, menjünk elnapolására itt. Találkozunk szerdán. 1112 01:02:24,000 --> 01:02:28,000 [Taps] 1113 01:02:28,000 --> 01:02:30,000 [CS50.TV]