1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [6 savaitė] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Harvardo universiteto] 3 00:00:04,000 --> 00:00:08,000 [Tai CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Tai CS50, o tai yra 6 Savaitės pradžia, 5 00:00:12,000 --> 00:00:16,000 taip pora naujų priemonių, dabar yra prieinami jums pasinaudoti, 6 00:00:16,000 --> 00:00:19,000 kurių pirmasis, vadinamas CS50 Stilius. 7 00:00:19,000 --> 00:00:22,000 Šansai yra, jei jūs panašus į mane ar bet mokymo bičiulių, 8 00:00:22,000 --> 00:00:26,000 jūs tikriausiai matė programą, kurios stilius atrodo truputį kažką panašaus į tai. 9 00:00:26,000 --> 00:00:30,000 Gal pradėdami pjauti kai kampus vėlai naktį, ar jums kovoti su ja vėliau, 10 00:00:30,000 --> 00:00:32,000 ir tada TF arba CA ateina darbo valandomis. 11 00:00:32,000 --> 00:00:34,000 Tada jis mums sunku skaityti. 12 00:00:34,000 --> 00:00:38,000 Na, šis kodas yra sintaksiškai teisinga, ir jis bus sudaryti, ir tai tikrai bus paleisti. 13 00:00:38,000 --> 00:00:40,000 Bet tai tikrai ne dėl stiliaus 5. 14 00:00:40,000 --> 00:00:45,000 >> Bet dabar, jei mes einame į šį katalogą čia 15 00:00:45,000 --> 00:00:48,000 ir pastebėjo, kad turiu conditions2.c- 16 00:00:48,000 --> 00:00:55,000 ir aš paleisti šią naują komandą, style50, šio failo conditions2.c, Enter, 17 00:00:55,000 --> 00:00:57,000 pastebėsite, kad jis man pranešė, kad jis buvo stilizuotas. 18 00:00:57,000 --> 00:01:00,000 Gedit pastebėjau, kad failas buvo pakeistas diske, 19 00:01:00,000 --> 00:01:08,000 ir jei aš spustelėkite paleisti, visos jūsų problemos dabar yra automatizuotas. 20 00:01:08,000 --> 00:01:15,000 [Plojimai] 21 00:01:15,000 --> 00:01:17,000 Tai yra vienas iš dalykų, mes padarėme šį savaitgalį. 22 00:01:17,000 --> 00:01:20,000 Suprasti, kad ji yra netobula, nes yra keletas kodas 23 00:01:20,000 --> 00:01:23,000 , kad ji tiesiog negali būti Stilizuoti puikiai, 24 00:01:23,000 --> 00:01:26,000 bet suprantame, kad tai dabar yra įrankis, kurį galite pasinaudoti 25 00:01:26,000 --> 00:01:33,000 jei tik sutvarkyti kai daugiau errantly pateikti Garbanotasis petnešos ir pan. 26 00:01:33,000 --> 00:01:36,000 >> Bet daugiau įtikinamų CS50 Registracijos. 27 00:01:36,000 --> 00:01:39,000 CS50 patikrinimui, jūs iš tikrųjų galite atlikti tuos pačius korektiškumo bandymus 28 00:01:39,000 --> 00:01:42,000 savo kodą, kad mokymo bičiulių galime. 29 00:01:42,000 --> 00:01:44,000 Tai yra komandų eilutės įrankis, kuris ateina dabar į prietaisą 30 00:01:44,000 --> 00:01:46,000 kuo greičiau padaryti, kaip už update50 31 00:01:46,000 --> 00:01:49,000 pset 4 specifikacijos, o jūs jį naudoti iš esmės panašus į šį. 32 00:01:49,000 --> 00:01:51,000 Jūs paleisti komandų check50. 33 00:01:51,000 --> 00:01:56,000 Tada jums perduoti komandinės eilutės argumentu, arba apskritai žinomi kaip jungiklis ar vėliava. 34 00:01:56,000 --> 00:01:58,000 Apskritai, dalykų, kurie brūkšnelių vadinamas jungiklis 35 00:01:58,000 --> 00:02:02,000 komandinės eilutės programa, todėl c aprašoma 36 00:02:02,000 --> 00:02:04,000 patikrinimai, kad jūs norite paleisti. 37 00:02:04,000 --> 00:02:07,000 >> Išbandymas, kurį norite paleisti individualiai pažymimas šios eilutės, 38 00:02:07,000 --> 00:02:10,000 2012/pset4/resize. 39 00:02:10,000 --> 00:02:13,000 Kitaip tariant, tai tik savavališkai, bet unikalus ID 40 00:02:13,000 --> 00:02:18,000 kad mes naudojame unikaliai identifikuoti pset 4 korektiškumo testus. 41 00:02:18,000 --> 00:02:21,000 Ir tada jums nurodyti, atskirtų tarpais, sąrašas failus, kad jūs norite ákelti 42 00:02:21,000 --> 00:02:24,000 CS50 patikrinimo analizei. 43 00:02:24,000 --> 00:02:29,000 Pavyzdžiui, jei aš einu į mano sprendimas čia resize.c 44 00:02:29,000 --> 00:02:31,000 leiskite man atverti didesnę terminalo lange- 45 00:02:31,000 --> 00:02:42,000 ir aš einu į priekį ir paleisti tegul sako check50-c 2012/pset4/resize 46 00:02:42,000 --> 00:02:46,000 ir tada aš eiti į priekį ir nurodyti failų pavadinimus, 47 00:02:46,000 --> 00:02:49,000 resize.c, ir tada paspauskite Enter, ji suspaudžia, 48 00:02:49,000 --> 00:02:53,000 Ji išsiunčia, jis pasitikrina, ir aš tiesiog nepavyko visa krūva bandymų. 49 00:02:53,000 --> 00:02:59,000 Viena raudonai viršutiniame kairiajame kampe sako, kad egzistuoja resize.c ir BMP. 50 00:02:59,000 --> 00:03:01,000 Tai buvo bandymas. Tai buvo klausimas, mes paprašė. 51 00:03:01,000 --> 00:03:04,000 Ir tai yra nelaimingas, nes atsakymas buvo neteisingas. 52 00:03:04,000 --> 00:03:08,000 Baltas tekstas žemiau sako, kad tikimasi, bmp.h egzistuoti, ir tai tik mano kaltė. 53 00:03:08,000 --> 00:03:11,000 Aš pamiršau įkelti jį, todėl man reikia įkelti abu failus, 54 00:03:11,000 --> 00:03:14,000 resize.c ir bmp.h. 55 00:03:14,000 --> 00:03:17,000 Bet dabar pastebėsite, visi kiti bandymai yra geltonos spalvos, nes jie nebuvo paleisti, 56 00:03:17,000 --> 00:03:21,000 ir taip smiley veido yra vertikali, nes jis nei laimingi, nei liūdna, 57 00:03:21,000 --> 00:03:25,000 bet mes turime ištaisyti šį klausimą raudonai, iki šių kiti patikrinimai bus paleisti. 58 00:03:25,000 --> 00:03:27,000 >> Leiskite man išspręsti šią problemą. 59 00:03:27,000 --> 00:03:30,000 Leiskite man nutolinti ir iš naujo, šį kartą su bmp.h taip pat 60 00:03:30,000 --> 00:03:34,000 į komandų eilutę, Enter, ir dabar, jei viskas vyks gerai, 61 00:03:34,000 --> 00:03:38,000 ji ketina patikrinti ir tada grįžti rezultatą laikykite savo kvėpavimą 62 00:03:38,000 --> 00:03:42,000 visai žalia, o tai reiškia, darau tikrai gerai pset 4 šiol. 63 00:03:42,000 --> 00:03:44,000 Jūs galite matyti ir daryti išvados aprašomasis tekstas čia 64 00:03:44,000 --> 00:03:47,000 ką ji yra, mes patikrinome. 65 00:03:47,000 --> 00:03:49,000 Mes pirmiausia tikrinama, ar failai yra? 66 00:03:49,000 --> 00:03:51,000 Mes tada buvo patikrintas, veikia resize.c kompiliavimo? 67 00:03:51,000 --> 00:03:58,000 Tada mes patikrinome, ar ji nemano dydį 1x1 pikselių BMP, kai n, dydį faktorius, yra 1. 68 00:03:58,000 --> 00:04:01,000 Dabar, jei jūs neturite idėjos, kas n yra, jums bus, kai jūs pasinerti į pset 4, 69 00:04:01,000 --> 00:04:04,000 bet kad tiesiog yra normalumas patikrinti, įsitikinkite, kad jūs ne dydžio keitimas 70 00:04:04,000 --> 00:04:08,000 vaizdas ne visi, jei dydžio keitimo koeficientas yra 1. 71 00:04:08,000 --> 00:04:14,000 Jei, priešingai, ji didinama 1x1 pikselio iki 1x1 pixel BMP 2x2 teisingai 72 00:04:14,000 --> 00:04:19,000 kai n yra 2, tada panašiai, mano formų. 73 00:04:19,000 --> 00:04:22,000 >> Trumpai tariant, tai reiškia, vienas, imtis kirtimo pirštų 74 00:04:22,000 --> 00:04:25,000 iš lygtį tiesiai prieš jus pateikti savo pset. 75 00:04:25,000 --> 00:04:28,000 Jūs žinosite, ką jūsų TF netrukus žinoti 76 00:04:28,000 --> 00:04:30,000 , kai jūs einate, kaip pateikti kai kurie iš šių probleminių rinkinių, 77 00:04:30,000 --> 00:04:34,000 taip pat pedagoginis motyvacija yra tikrai įdėti 78 00:04:34,000 --> 00:04:37,000 galimybė, kad priešais jus, kai jūs žinote, a priori 79 00:04:37,000 --> 00:04:39,000 , kad yra savo kodą klaidas ir bandymai, kurie negali būti perduodama, 80 00:04:39,000 --> 00:04:43,000 jūs galite įdėti daugiau efektyvaus laiko priekyje spręsti šias problemas 81 00:04:43,000 --> 00:04:45,000 , o ne prarasti taškų, gauti grįžtamąjį ryšį iš savo TF 82 00:04:45,000 --> 00:04:48,000 ir tada eiti "Ahh, kaip aš turėjo suprato, kad iš. 83 00:04:48,000 --> 00:04:50,000 Dabar bent yra įrankis, kad padėtų jums rasti, kad. 84 00:04:50,000 --> 00:04:52,000 Jis nesiruošia atkreipti dėmesį į tai, kur klaida yra, bet jis jums pasakys, 85 00:04:52,000 --> 00:04:54,000 kas yra simptominis. 86 00:04:54,000 --> 00:04:57,000 >> Dabar suprantame, bandymai nebūtinai yra baigtinis. 87 00:04:57,000 --> 00:04:59,000 Tiesiog todėl, kad jūs gaunate ekranas visiškai žalia smiley veidus 88 00:04:59,000 --> 00:05:02,000 nereiškia, kad jūsų kodas yra tobulas, tačiau tai nereiškia, 89 00:05:02,000 --> 00:05:06,000 kad jis praėjo tam tikrus tyrimus, nustatytas pagal spec. 90 00:05:06,000 --> 00:05:08,000 Kartais mes neatleidžia patikrinimus. 91 00:05:08,000 --> 00:05:10,000 Pavyzdžiui, Detektīvromāns, vienas iš aspektų pset 4, 92 00:05:10,000 --> 00:05:15,000 rūšies nuvilia, jei mes suteikiame Jums 93 00:05:15,000 --> 00:05:18,000 atsakymas, kokia ji yra, ir yra būdų atskleisti 94 00:05:18,000 --> 00:05:21,000 kas yra tas asmuo yra to raudono triukšmo. 95 00:05:21,000 --> 00:05:24,000 Visada nurodyti spec ateityje pset 5 tolyn 96 00:05:24,000 --> 00:05:26,000 kokių patikrinimų yra už jus. 97 00:05:26,000 --> 00:05:28,000 Jūs pastebėsite, ten tai white URL apačioje. 98 00:05:28,000 --> 00:05:30,000 Nes dabar, tai yra tik diagnostikos produkcija. 99 00:05:30,000 --> 00:05:33,000 Jei norite aplankyti šį URL, jūs gausite visą krūva Crazy, paslaptingas žinutes 100 00:05:33,000 --> 00:05:36,000 kad jūs pažvelgti pro, bet tai daugiausia darbuotojų 101 00:05:36,000 --> 00:05:41,000 , kad galėtume diagnozuoti ir derinimo klaidas check50 pati. 102 00:05:41,000 --> 00:05:46,000 >> Be triukšmo, galime pereiti, kur mes nerašomas. 103 00:05:46,000 --> 00:05:48,000 CS50 biblioteka mes laikė savaime keletą savaičių, 104 00:05:48,000 --> 00:05:52,000 bet tada praeitą savaitę, mes pradėjome lupimasis atgal vieną iš jos sluoksnių. 105 00:05:52,000 --> 00:05:55,000 Eilutę, už ką, ​​o ne atsisakyti įsišaknijusių? 106 00:05:55,000 --> 00:05:57,000 [Studentai] Char. 107 00:05:57,000 --> 00:05:59,000 Char *, kuri buvo char * visą šį laiką, 108 00:05:59,000 --> 00:06:03,000 bet dabar mes neturime apsimesti, kad tai faktinis duomenų tipas eilutė. 109 00:06:03,000 --> 00:06:06,000 Atvirkščiai, tai buvo tam tikros rūšies sinonimas char * 110 00:06:06,000 --> 00:06:09,000 eilutė yra simbolių seka, 111 00:06:09,000 --> 00:06:14,000 kodėl ji prasmės atstovauti eilutes kaip char * s? 112 00:06:14,000 --> 00:06:20,000 Ką char * į šią eilutę koncepciją? 113 00:06:20,000 --> 00:06:23,000 Taip. >> [Studentų] pirmasis simbolis. 114 00:06:23,000 --> 00:06:25,000 Geras, pirmasis simbolis, bet ne visai pirmasis simbolis. 115 00:06:25,000 --> 00:06:27,000 Tai-[Studentai] Adresas. 116 00:06:27,000 --> 00:06:29,000 Geras, pirmą pobūdžio adresas. 117 00:06:29,000 --> 00:06:33,000 Viskas, ko reikia atstovauti eilutę, kompiuterio atmintyje 118 00:06:33,000 --> 00:06:36,000 yra tik unikalus adresas, labai pirmasis baitas. 119 00:06:36,000 --> 00:06:38,000 Jūs net neturi žinoti, kiek laiko ji yra 120 00:06:38,000 --> 00:06:42,000 , nes, kaip jūs galite suprasti, kad atliekami dinaminiai? 121 00:06:42,000 --> 00:06:44,000 [Studentų] String ilgis. 122 00:06:44,000 --> 00:06:48,000 Galite skambinti eilutės ilgis, puikus, bet kaip veikia eilutės ilgio? 123 00:06:48,000 --> 00:06:50,000 Ką jis daro? Taip. 124 00:06:50,000 --> 00:06:52,000 [Studentų] Keep going,, kol gausite null charakterį. 125 00:06:52,000 --> 00:06:54,000 Taip, tiksliai, tai tiesiog kartojasi už linijos, o linijos, 126 00:06:54,000 --> 00:06:57,000 nepriklausomai nuo * iki galo, ir pabaiga yra atstovaujama 127 00:06:57,000 --> 00:07:01,000 \ 0, vadinamasis nul personažas, nul, 128 00:07:01,000 --> 00:07:05,000 neturi būti painiojama su NULL, kuris yra rodyklė, 129 00:07:05,000 --> 00:07:07,000 kuris ateis į pokalbį vėl šiandien. 130 00:07:07,000 --> 00:07:11,000 >> Nuplėšus sluoksnį GetInt, tada mes paėmė pažvelgti GetString 131 00:07:11,000 --> 00:07:14,000 bei primena, kad šių funkcijų, ar tikrai, 132 00:07:14,000 --> 00:07:18,000 GetString, naudojant tam tikrą funkciją 133 00:07:18,000 --> 00:07:21,000 faktiškai apdoroti, kad, skaityti ir analizuoti, vartotojo įvestį. 134 00:07:21,000 --> 00:07:25,000 Ir kas buvo, kad nauja funkcija? 135 00:07:25,000 --> 00:07:27,000 Scanf arba sscanf. Ji iš tikrųjų ateina į keletą skirtingų skonių. 136 00:07:27,000 --> 00:07:31,000 Yra scanf, yra sscanf, yra fscanf. 137 00:07:31,000 --> 00:07:35,000 Nes dabar, nors, galime sutelkti dėmesį į vienas labiausiai puikiai iliustruoja, 138 00:07:35,000 --> 00:07:38,000 ir leiskite man eiti į priekį ir atidaryti prietaiso 139 00:07:38,000 --> 00:07:41,000 kaip šį failą, scanf1.c. 140 00:07:41,000 --> 00:07:43,000 Tai yra super paprasta programa, 141 00:07:43,000 --> 00:07:46,000 bet kad daro kažką, kad mes niekada padaryti 142 00:07:46,000 --> 00:07:48,000 be CS50 bibliotekoje. 143 00:07:48,000 --> 00:07:51,000 Gauna iš naudotojo int. Kaip tai veikia? 144 00:07:51,000 --> 00:07:53,000 Na, line 16 yra, 145 00:07:53,000 --> 00:07:56,000 pastebėti, kad mes skelbiame int vadinama X, ir šio taško istorija, 146 00:07:56,000 --> 00:07:58,000 kas yra x vertė? 147 00:07:58,000 --> 00:08:00,000 [Nesigirdi studentas atsakas] 148 00:08:00,000 --> 00:08:02,000 [M. David] Teisė, kas žino, kai šiukšlių vertė gali būti, kad 17, mes tiesiog pranešti vartotojui 149 00:08:02,000 --> 00:08:06,000 man duoti numerį, prašome, ir 18 žingsnis yra ten, kur jis bus įdomus. 150 00:08:06,000 --> 00:08:11,000 Scanf atrodo, kad skolintis iš printf idėja, kad ji naudoja šiuos formato kodus į kabutes. 151 00:08:11,000 --> 00:08:13,000 % D, žinoma, dešimtainis skaičius. 152 00:08:13,000 --> 00:08:21,000 Bet kodėl aš artimųjų & X, o ne tik X? 153 00:08:21,000 --> 00:08:24,000 Pirmoji yra teisinga. Taip. 154 00:08:24,000 --> 00:08:26,000 [Nesigirdi studentas atsakas] 155 00:08:26,000 --> 00:08:31,000 Tiksliai, jei šios programos tikslas, kaip ir pačios funkcijos GetInt 156 00:08:31,000 --> 00:08:34,000 yra gauti iš vartotojo int galiu perduoti funkcijas 157 00:08:34,000 --> 00:08:38,000 visi kintamieji noriu, bet jei aš neturiu perduoti jas nuorodą 158 00:08:38,000 --> 00:08:41,000 arba adresu arba žymeklis, visi šiandienos tikslais sinonimai, 159 00:08:41,000 --> 00:08:46,000 tada, kad funkcija neturi galimybės keisti šio kintamojo turinį. 160 00:08:46,000 --> 00:08:49,000 Tai būtų perduoti kopija, lygiai kaip Buggy versija apsikeitimo sandorio 161 00:08:49,000 --> 00:08:51,000 , kad mes kalbėjome apie kelis kartus dabar. 162 00:08:51,000 --> 00:08:54,000 >> Bet vietoj to, atlikdami & X, aš tiesiog eina kokiais? 163 00:08:54,000 --> 00:08:57,000 [Studentų] adresas. >> X adresą. 164 00:08:57,000 --> 00:09:01,000 Tai, pavyzdžiui, piešimo funkcija vadinama scanf žemėlapį ir sako: čia, 165 00:09:01,000 --> 00:09:04,000 tai yra kompiuterio atminties riekė nurodymai 166 00:09:04,000 --> 00:09:07,000 , kad galite eiti laikyti šiek tiek sveikasis skaičius, in 167 00:09:07,000 --> 00:09:10,000 Tam, kad sscanf dabar daryti, kad 168 00:09:10,000 --> 00:09:13,000 operatorius, ką gabalas sintaksė jis ketina naudoti 169 00:09:13,000 --> 00:09:19,000 nors mes negalime matyti, nes kažkas ją parašė šią funkciją? 170 00:09:19,000 --> 00:09:21,000 Kitaip tariant - kas tai? 171 00:09:21,000 --> 00:09:23,000 [Studentų] X skaityti. 172 00:09:23,000 --> 00:09:27,000 Ten bus šiek tiek skaityti, bet tik atsižvelgiant į X čia. 173 00:09:27,000 --> 00:09:30,000 Jei scanf išlaikė x adresą, 174 00:09:30,000 --> 00:09:35,000 sintaksiškai, operatorius privalo egzistuoti kažkur 175 00:09:35,000 --> 00:09:38,000 viduje scanf įgyvendinimo, kad scanf 176 00:09:38,000 --> 00:09:42,000 iš tikrųjų galite rašyti skaičių 2 tuo adresu? 177 00:09:42,000 --> 00:09:44,000 Taip, kad *. 178 00:09:44,000 --> 00:09:47,000 Prisiminkite, kad * yra mūsų dereference operatorius, kuris iš esmės reiškia, ten. 179 00:09:47,000 --> 00:09:50,000 >> Sukūrę buvo perduotas adresą, kaip yra šiuo atveju, 180 00:09:50,000 --> 00:09:53,000 scanf tikriausiai, jei mes iš tikrųjų pažvelgė aplink savo kodą 181 00:09:53,000 --> 00:09:59,000 daro * x arba atitinkamą faktiškai eiti tuo adresu ir įdėti tam tikrą vertę. 182 00:09:59,000 --> 00:10:02,000 Dabar, kaip scanf gauna įvesties iš klaviatūros, 183 00:10:02,000 --> 00:10:04,000 mes pakylės mūsų rankas šiandien. 184 00:10:04,000 --> 00:10:07,000 Tiesiog manyti, kad operacinė sistema leidžia sscanf kalbėti 185 00:10:07,000 --> 00:10:11,000 vartotojo klaviatūros, tačiau šiuo metu dabar atitinka 19, 186 00:10:11,000 --> 00:10:14,000 kai mes tiesiog atspausdinti x, atrodo, kad tuo atveju, 187 00:10:14,000 --> 00:10:17,000 kad scanf įdėti int x. 188 00:10:17,000 --> 00:10:19,000 Tai yra būtent tai, kaip scanf veikia, ir prisiminti praėjusią savaitę 189 00:10:19,000 --> 00:10:25,000 tai tiksliai, kaip GetString ir GetInt ir kitų šeimos funkcijų 190 00:10:25,000 --> 00:10:28,000 galiausiai veikia, nors ir šiek tiek prieštarauja, pavyzdžiui, sscanf 191 00:10:28,000 --> 00:10:31,000 o tai reiškia, nuskaityti vietoj klaviatūros eilutę. 192 00:10:31,000 --> 00:10:33,000 Bet Paimkime bent šiek tiek variacijos išvaizdą. 193 00:10:33,000 --> 00:10:37,000 Į scanf2, aš tikrai įsukus. 194 00:10:37,000 --> 00:10:42,000 , Kas yra negerai, ir aš paslėpti komentaras, kuris paaiškina, kiek 195 00:10:42,000 --> 00:10:47,000 kas yra negerai su šia programa, versija 2? 196 00:10:47,000 --> 00:10:55,000 Techninį ir šiuo metu. 197 00:10:55,000 --> 00:10:57,000 Atrodo gana gerai. 198 00:10:57,000 --> 00:11:03,000 Tai gražiai įtraukta, tačiau 199 00:11:03,000 --> 00:11:07,000 gerai, kaip apie galime genėti trumpesnius klausimus? 200 00:11:07,000 --> 00:11:17,000 Linija 16. Kas linija 16 daro tiksliai, bet techninė anglų kalba? 201 00:11:17,000 --> 00:11:20,000 Kaip šiek tiek nepatogu. Taip, Maiklai. 202 00:11:20,000 --> 00:11:25,000 [Studentų] Ji nukreipta į eilutę pirmąją raidę. 203 00:11:25,000 --> 00:11:27,000 >> Gerai, arti. Leiskite man įgnybti, kad šiek tiek. 204 00:11:27,000 --> 00:11:33,000 Nukreipta į pirmąją raidę eilutę, jūs deklaruojate kintamasis vadinamas buferis 205 00:11:33,000 --> 00:11:36,000 kad į pirmą eilutę adresą, 206 00:11:36,000 --> 00:11:39,000 arba, tiksliau, kad bus nurodyti tiksliau char. 207 00:11:39,000 --> 00:11:42,000 Pastebėsite, kad jis nėra iš tikrųjų nukreipta niekur, nes nėra priskyrimo operatorius. 208 00:11:42,000 --> 00:11:46,000 Nėra jokios lygybės ženklas, todėl visi mes darome, yra paskirstant kintamasis vadinamas buferis. 209 00:11:46,000 --> 00:11:49,000 Taip atsitinka, kad 32 bitų, nes tai rodyklė, 210 00:11:49,000 --> 00:11:52,000 ir tikriausiai buferio turinys galiausiai 211 00:11:52,000 --> 00:11:57,000 bus pateikta char adresą, bet dabar, ką buferis yra? 212 00:11:57,000 --> 00:11:59,000 Tiesiog kai fiktyvus, kas žino, kai šiukšlių vertė, 213 00:11:59,000 --> 00:12:03,000 nes mes ne aiškiai inicializuoti jį, todėl mes neturėtų prisiimti nieko. 214 00:12:03,000 --> 00:12:06,000 Gerai, kad dabar eilutė 17-ką eilutė 17 daryti? 215 00:12:06,000 --> 00:12:08,000 Gal, kad bus šilta tai padaryti. 216 00:12:08,000 --> 00:12:10,000 Jis spausdina eilutę, tiesa? 217 00:12:10,000 --> 00:12:12,000 Jis spausdina Styginių prašome. 218 00:12:12,000 --> 00:12:15,000 >> Eilutė 18 rūšies susipažinę dabar, kad mes tik pamačiau tai dispersiją 219 00:12:15,000 --> 00:12:18,000 bet su kitokiu formatu kodą, todėl 18 eilutėje, 220 00:12:18,000 --> 00:12:23,000 mes sakau scanf čia yra atminties riekė adresas. 221 00:12:23,000 --> 00:12:27,000 Aš noriu, kad jis skambėtų į eilutę, kurį rodo nuo% s, 222 00:12:27,000 --> 00:12:32,000 tačiau problema yra ta, kad mes ne padaryti keletą dalykų. 223 00:12:32,000 --> 00:12:35,000 , Kas yra viena iš problemų? 224 00:12:35,000 --> 00:12:38,000 [Studentų] Jis bando dereference NULL pointeris. 225 00:12:38,000 --> 00:12:41,000 Geras, null, arba tiesiog kitaip nežinoma patarimų. 226 00:12:41,000 --> 00:12:45,000 Jūs dalijamos scanf adresą, bet ką tik sakė prieš akimirką 227 00:12:45,000 --> 00:12:49,000 , kad adresas yra šiek tiek šiukšlių vertė, nes mes ne iš tikrųjų priskirti jį su visa 228 00:12:49,000 --> 00:12:53,000 ir taip sakai scanf efektyviai eiti įdėti eilutę, 229 00:12:53,000 --> 00:12:56,000 bet mes nežinome, kur čia dar yra, 230 00:12:56,000 --> 00:12:59,000 taip mes ne iš tikrųjų skiriama atminties buferio. 231 00:12:59,000 --> 00:13:03,000 Be to, ką tu taip pat nėra net pasakoja scanf? 232 00:13:03,000 --> 00:13:06,000 Manau, kad tai buvo atminties riekė, ir tai buvo ne šiukšlių vertė, 233 00:13:06,000 --> 00:13:09,000 , bet jūs vis dar nesako scanf kažką svarbaus. 234 00:13:09,000 --> 00:13:12,000 [Studentų] Jei jis iš tikrųjų yra, Ampersand. 235 00:13:12,000 --> 00:13:15,000 Ampersand, todėl šiuo atveju, tai gerai. 236 00:13:15,000 --> 00:13:18,000 Nes buferis jau deklaruotas kaip rodyklė 237 00:13:18,000 --> 00:13:22,000 * gabalas sintaksę, mums nereikia naudoti ampersendo 238 00:13:22,000 --> 00:13:25,000 , nes ji jau adresas, bet aš manau, kad aš girdėjau jį čia. 239 00:13:25,000 --> 00:13:27,000 [Studentų] Kaip didelis yra? 240 00:13:27,000 --> 00:13:29,000 Geras, mes ne sakau scanf kaip didelis buferis yra, 241 00:13:29,000 --> 00:13:32,000 , o tai reiškia, net jei buferis rodyklė, 242 00:13:32,000 --> 00:13:35,000 mes sakome scanf, įdėti eilutę, 243 00:13:35,000 --> 00:13:38,000 bet čia gali būti 2 baitai, tai gali būti 10 baitų, tai gali būti megabaitas. 244 00:13:38,000 --> 00:13:41,000 Scanf neturi jokios idėjos, nes tai yra atminties riekė 245 00:13:41,000 --> 00:13:43,000 matyt, tai nėra dar eilutę. 246 00:13:43,000 --> 00:13:48,000 Tai tik eilutę, kai rašote simbolių ir \ 0 iki tos atminties riekė. 247 00:13:48,000 --> 00:13:51,000 Dabar tai tik keletas atminties riekė. 248 00:13:51,000 --> 00:13:55,000 Scanf nebus žinoti, kada sustoti parašydami tuo adresu. 249 00:13:55,000 --> 00:13:59,000 >> Jei jūs prisimenate, kai praeityje pavyzdžių, kai aš atsitiktinai klaviatūros įvestą į 250 00:13:59,000 --> 00:14:03,000 bando perpildymo buferio, ir mes kalbėjomės penktadienį, apie būtent tai. 251 00:14:03,000 --> 00:14:07,000 Jei priešininkas kažkaip įleidžia į savo programą daug didesnę žodį 252 00:14:07,000 --> 00:14:10,000 ar sakinį ar frazė, tada jūs tikėjotės, galite viršyta 253 00:14:10,000 --> 00:14:13,000 daug atminties riekė, kurie gali turėti blogas pasekmes, 254 00:14:13,000 --> 00:14:15,000 kaip visame pačios programos. 255 00:14:15,000 --> 00:14:17,000 Mes turime išspręsti šią problemą kažkaip. 256 00:14:17,000 --> 00:14:20,000 Leiskite man nutolinti ir eiti į šios programos 3 versija. 257 00:14:20,000 --> 00:14:22,000 Štai šiek tiek geriau. 258 00:14:22,000 --> 00:14:24,000 Šioje versijoje pastebėsite skirtumą. 259 00:14:24,000 --> 00:14:27,000 Atitinka 16, aš vėl skelbiantis kintamasis vadinamas buferis, 260 00:14:27,000 --> 00:14:29,000 bet kas tai yra? 261 00:14:29,000 --> 00:14:33,000 Tai 16 simbolių masyvas. 262 00:14:33,000 --> 00:14:36,000 Tai yra gerai, nes tai reiškia, aš dabar gali pasakyti scanf 263 00:14:36,000 --> 00:14:39,000 čia yra tikrasis atminties riekė. 264 00:14:39,000 --> 00:14:42,000 Jūs galite beveik galvoti apie masyvų dabar kaip rodykles, 265 00:14:42,000 --> 00:14:44,000 nors jie faktiškai nėra lygiavertis. 266 00:14:44,000 --> 00:14:47,000 Jie elgiasi skirtingai skirtinguose kontekstuose. 267 00:14:47,000 --> 00:14:50,000 Bet tai tikrai tas atvejis, buferis nuorodas 268 00:14:50,000 --> 00:14:53,000 16 gretimuose simbolių, nes tai, ką masyvas 269 00:14:53,000 --> 00:14:55,000 ir buvo keletą savaičių dabar. 270 00:14:55,000 --> 00:14:59,000 >> Čia aš čia sakau scanf riekė atminties. 271 00:14:59,000 --> 00:15:01,000 Šį kartą, tai tikrai iš atminties riekė, 272 00:15:01,000 --> 00:15:07,000 bet kodėl ši programa vis dar eksploatuojamas? 273 00:15:07,000 --> 00:15:11,000 Kas negerai dar? 274 00:15:11,000 --> 00:15:14,000 Jau sakiau duok man 16 baitų, bet- 275 00:15:14,000 --> 00:15:16,000 [Studentų] Ką daryti, jei jie tipo daugiau nei 16? 276 00:15:16,000 --> 00:15:20,000 Tiksliai, ką daryti, jei vartotojas įveda į 17 simbolių ar 1700 simbolių? 277 00:15:20,000 --> 00:15:23,000 Iš tiesų, galime pamatyti, jei mes negalime užkliūti šios klaidos dabar. 278 00:15:23,000 --> 00:15:25,000 Tai geriau, bet nėra tobula. 279 00:15:25,000 --> 00:15:28,000 Leiskite man eiti į priekį ir kaupti šią programą, paleisti, kad scanf3. 280 00:15:28,000 --> 00:15:34,000 Aš bėgsiu scanf3, styginių prašome: labas, ir mes, atrodo, bus gerai. 281 00:15:34,000 --> 00:15:37,000 Leiskite man pabandyti šiek tiek ilgiau žmogus, hello there. 282 00:15:37,000 --> 00:15:42,000 Gerai, tegul neturi hello there how are you today, "Enter". 283 00:15:42,000 --> 00:15:54,000 Kaip rūšies pasisekė čia, tegul say hello how are you. 284 00:15:54,000 --> 00:15:56,000 Damn it. 285 00:15:56,000 --> 00:16:03,000 Gerai, kad mums pasisekė. Leiskite pamatyti, jei mes galime išspręsti šią problemą. 286 00:16:03,000 --> 00:16:06,000 Ne, jis nesiruošia leisti man nukopijuoti. 287 00:16:06,000 --> 00:16:09,000 Pabandykime tai vėl. 288 00:16:09,000 --> 00:16:12,000 Viskas gerai, stovėti. 289 00:16:12,000 --> 00:16:20,000 Mes pamatyti, kaip ilgai aš galiu apsimesti, kad sutelkti dėmesį, o dar tai daryti. 290 00:16:20,000 --> 00:16:23,000 Damn it. Kad, o, iš tikrųjų. 291 00:16:23,000 --> 00:16:26,000 Čia mes eiti. 292 00:16:26,000 --> 00:16:30,000 Taškas. 293 00:16:30,000 --> 00:16:34,000 >> Tai nemalonu, nors ji taip pat yra, tai taip pat yra vienas iš sujaukė šaltinių 294 00:16:34,000 --> 00:16:38,000 rašyti programas, kurios klaidas, nes jie pasireiškia 295 00:16:38,000 --> 00:16:40,000 tik vieną kartą, o kartais. 296 00:16:40,000 --> 00:16:43,000 Realybė yra tai, kad net jei jūsų kodas yra visiškai neveikia, 297 00:16:43,000 --> 00:16:46,000 gali tik visiškai neveikia vieną kartą, o 298 00:16:46,000 --> 00:16:49,000 , nes kartais, iš esmės kas atsitinka, kai operacinės sistemos skiria 299 00:16:49,000 --> 00:16:52,000 šiek tiek daugiau atminties, nei jums iš tikrųjų reikia, dėl bet kokios priežasties, 300 00:16:52,000 --> 00:16:57,000 ir, kad niekas kitas naudoja atmintį, iš karto po to, kai savo riekė 16 simbolių, 301 00:16:57,000 --> 00:17:01,000 todėl, jei jūs einate į 17, 18, 19, nepriklausomai nuo, tai nėra tokia baisi. 302 00:17:01,000 --> 00:17:04,000 Dabar, kompiuteris, net jei jis nėra gedimų, tuo momentu, 303 00:17:04,000 --> 00:17:09,000 kažkas ilgainiui gali naudoti baitų skaičių 17 arba 18 arba 19, 304 00:17:09,000 --> 00:17:14,000 , kuriose pabrėžiama, kad jūs įtraukėte savo duomenis, nors ir pernelyg ilgas, 305 00:17:14,000 --> 00:17:18,000 ketina gauti perrašyti potencialiai kitu funkcija. 306 00:17:18,000 --> 00:17:21,000 Tai nebūtinai ketina likti sveiki, 307 00:17:21,000 --> 00:17:23,000 bet ji nebūtinai sukelti seg kaltės. 308 00:17:23,000 --> 00:17:26,000 Tačiau šiuo atveju, aš pagaliau pakankamai simbolių 309 00:17:26,000 --> 00:17:29,000 kad aš iš esmės viršijo savo atminties segmentą, ir BAM, 310 00:17:29,000 --> 00:17:33,000 operacinė sistema, sakė: "Deja, tai nieko gero, segmentavimas kaltė". 311 00:17:33,000 --> 00:17:38,000 >> Ir pažiūrėkime dabar, jei tai, kas lieka čia mano kataloge 312 00:17:38,000 --> 00:17:40,000 pastebėsite, kad turiu šį failą čia, core. 313 00:17:40,000 --> 00:17:42,000 Atkreipkite dėmesį, kad tai dar kartą paragino core dump. 314 00:17:42,000 --> 00:17:46,000 Tai iš esmės failas, kuriame savo programos atminties turinį 315 00:17:46,000 --> 00:17:48,000 to momento, kai jis sudužo, 316 00:17:48,000 --> 00:17:51,000 ir tiesiog pabandykite šiek tiek pavyzdį leiskite man eiti čia 317 00:17:51,000 --> 00:17:57,000 ir paleisti gdb scanf3 ir tada nurodyti trečiojo argumento, vadinama pagrindinė, 318 00:17:57,000 --> 00:18:01,000 ir pastebėsite čia, kad jei aš sąrašą kodą, 319 00:18:01,000 --> 00:18:06,000 galėsime, kaip įprasta, su gdb pradėti vaikščioti per šią programą, 320 00:18:06,000 --> 00:18:10,000 ir galiu paleisti ir kuo greičiau aš paspauskite žingsnio komandą gdb 321 00:18:10,000 --> 00:18:13,000 kaip tik aš hit potencialiai Buggy eilutę po rašyti didžiulis eilutę, 322 00:18:13,000 --> 00:18:16,000 Aš galėtų iš tikrųjų nustatyti jį čia. 323 00:18:16,000 --> 00:18:19,000 Daugiau informacijos apie tai, nors, skyriuje kalbant apie pagrindinių sąvartynų 324 00:18:19,000 --> 00:18:22,000 ir pan, kad jūs iš tikrųjų galite baksnoti aplink viduje core dump 325 00:18:22,000 --> 00:18:27,000 ir pamatyti, ką linija programa nepavyko. 326 00:18:27,000 --> 00:18:32,000 Bet tada rodykles ir adresais klausimų? 327 00:18:32,000 --> 00:18:36,000 Nes šiandien mes ketiname pradėti vartoti savaime suprantamu dalyku, kad šie dalykai egzistuoja 328 00:18:36,000 --> 00:18:40,000 ir mes žinome, ką jie yra. 329 00:18:40,000 --> 00:18:42,000 Taip. 330 00:18:42,000 --> 00:18:46,000 >> [Studentų] Kaip gi jūs neturite įdėti ampersendo daliai 331 00:18:46,000 --> 00:18:48,000 Geras klausimas. 332 00:18:48,000 --> 00:18:51,000 Kaip atvykti aš neturėjau įdėti simbolių masyvas šalia ampersendo, kaip aš anksčiau 333 00:18:51,000 --> 00:18:53,000 su dauguma iš mūsų pavyzdžių? 334 00:18:53,000 --> 00:18:55,000 Trumpas atsakymas yra, matricos yra šiek tiek ypatingas. 335 00:18:55,000 --> 00:18:59,000 Jūs galite beveik manote, buferis, kaip iš tikrųjų yra adresas, 336 00:18:59,000 --> 00:19:03,000 ir jis tiesiog taip atsitinka, kad tuo atveju, kad kvadratas laikiklis notacijos 337 00:19:03,000 --> 00:19:06,000 yra patogiau, kad galėtume eiti į laikiklio 0 1, laikiklis, 338 00:19:06,000 --> 00:19:10,000 laikiklis 2, be naudoti * žymėjimą. 339 00:19:10,000 --> 00:19:13,000 Tai yra šiek tiek balto melas, nes matricas ir rodyklės 340 00:19:13,000 --> 00:19:17,000 , iš tikrųjų yra šiek tiek skiriasi, tačiau jie gali dažnai, bet ne visada gali būti vartojami kaip sinonimai. 341 00:19:17,000 --> 00:19:21,000 Trumpai tariant, kai funkcija laukiasi žymiklį į atminties riekė, 342 00:19:21,000 --> 00:19:24,000 galite perduoti, kad adresas buvo grąžintas pagal malloc 343 00:19:24,000 --> 00:19:29,000 ir mes pamatyti, malloc vėl prieš ilgas, ar galite perduoti jį masyvo vardą. 344 00:19:29,000 --> 00:19:32,000 Jūs neturite ampersendo su matricomis, nes jie jau 345 00:19:32,000 --> 00:19:34,000 iš esmės nori adresus. 346 00:19:34,000 --> 00:19:36,000 Štai viena išimtis. 347 00:19:36,000 --> 00:19:39,000 Skliaustus, kad jie ypatingas. 348 00:19:39,000 --> 00:19:41,000 >> Ar jūs galėsite įdėti ampersendo prie buferio? 349 00:19:41,000 --> 00:19:43,000 Ne šiuo atveju. 350 00:19:43,000 --> 00:19:46,000 Kad neveiks nes, vėlgi, šio kampo atveju 351 00:19:46,000 --> 00:19:49,000 kur matricos yra ne visai tikrųjų adresai. 352 00:19:49,000 --> 00:19:54,000 Bet mes galbūt grįžti, kad iki kol su kitais pavyzdžiais. 353 00:19:54,000 --> 00:19:56,000 Pabandykime išspręsti problemą čia. 354 00:19:56,000 --> 00:20:00,000 Mes turime duomenų struktūra, kad mes buvo naudojant tam tikrą laiką, žinomas kaip masyvo. 355 00:20:00,000 --> 00:20:02,000 Byla punktas, kad tai, ką mes tik turėjo. 356 00:20:02,000 --> 00:20:04,000 Bet matricos turi šiek tiek upsides ir praradimas. 357 00:20:04,000 --> 00:20:06,000 Matricos yra gražus, kodėl? 358 00:20:06,000 --> 00:20:11,000 Kas yra vienas dalykas, kad jums patinka tiek, kiek jums patinka masyvų apie masyvų? 359 00:20:11,000 --> 00:20:13,000 Kas patogu apie juos? Kas yra patrauklus? 360 00:20:13,000 --> 00:20:18,000 Kodėl mes pristatyti juos į pirmąją vietą? 361 00:20:18,000 --> 00:20:20,000 Taip. 362 00:20:20,000 --> 00:20:27,000 [Studentų] Jos gali saugoti daug duomenų, ir jūs neturite naudoti visą dalykas. 363 00:20:27,000 --> 00:20:29,000 Jūs galite naudoti skyrių. 364 00:20:29,000 --> 00:20:32,000 Geras, masyvo galite saugoti daug duomenų, 365 00:20:32,000 --> 00:20:35,000 ir jūs nebūtinai turite naudoti visa tai, todėl galite overallocate, 366 00:20:35,000 --> 00:20:39,000 , kuris gali būti patogu, jei jūs nežinote, iš anksto, kaip daug ką galima tikėtis. 367 00:20:39,000 --> 00:20:41,000 >> GetString yra puikus pavyzdys. 368 00:20:41,000 --> 00:20:44,000 GetString, parašyta ne mums, neturi jokios idėjos, kiek simbolių galima tikėtis, 369 00:20:44,000 --> 00:20:48,000 todėl tai, kad mes galime skirti gabaliukus vientisos atminties yra gera. 370 00:20:48,000 --> 00:20:51,000 Matricos taip pat išspręsti problemą, mes matėme prieš porą savaičių dabar 371 00:20:51,000 --> 00:20:54,000 jūsų kodas prasideda pereina į kažką labai prastai parengto. 372 00:20:54,000 --> 00:20:57,000 Prisiminkite, kad aš sukūriau studentų struktūrą, pasišaukęs Dovydą, 373 00:20:57,000 --> 00:21:00,000 ir tada, kad iš tikrųjų buvo alternatyva, nors, 374 00:21:00,000 --> 00:21:04,000 kad kintamasis vadinamas vardą ir kito kintamojo pavadinimu, manau, namas, 375 00:21:04,000 --> 00:21:08,000 kitas kintamasis vadinamas ID, nes toje istorija Aš tada norėjau pristatyti ką nors kita 376 00:21:08,000 --> 00:21:11,000 patinka Rob į programą, taip, tada aš nusprendė palauk, 377 00:21:11,000 --> 00:21:13,000 Man reikia pervadinti šiuos kintamuosius. 378 00:21:13,000 --> 00:21:16,000 Susisiekime kasyklos NAME1, ID1, house1. 379 00:21:16,000 --> 00:21:20,000 Susisiekime Rob NAME2 house2, ID2. 380 00:21:20,000 --> 00:21:22,000 Bet tada palauk minutėlę, ką apie Tommy? 381 00:21:22,000 --> 00:21:24,000 Tada mes turėjome tris kintamuosius. 382 00:21:24,000 --> 00:21:27,000 Mes pristatėme kažkas kitas, keturių kintamųjų rinkinius. 383 00:21:27,000 --> 00:21:30,000 Pradėjo gauti purvinas pasaulis labai greitai, 384 00:21:30,000 --> 00:21:33,000 todėl mes pristatėme structs, o kas įtikinamų apie struct? 385 00:21:33,000 --> 00:21:39,000 Ką C struct jums tai padaryti? 386 00:21:39,000 --> 00:21:42,000 Tai tikrai nepatogu šiandien. 387 00:21:42,000 --> 00:21:44,000 Ką? >> [Nesigirdi studentas atsakas] 388 00:21:44,000 --> 00:21:47,000 Taip, būtent, Typedef leidžia jums sukurti naują duomenų tipą, 389 00:21:47,000 --> 00:21:51,000 struct struct raktinį žodį, leidžia jums įdėti į kapsulę 390 00:21:51,000 --> 00:21:54,000 konceptualiai susiję duomenų vienetų 391 00:21:54,000 --> 00:21:56,000 , o po to jiems skambinti kažką panašaus studentas. 392 00:21:56,000 --> 00:21:58,000 >> Kad buvo gerai, nes dabar mes galime modeliuoti 393 00:21:58,000 --> 00:22:03,000 daug daugiau rūšiuoti konceptualiai atitinka studento sąvoka kintamasis 394 00:22:03,000 --> 00:22:07,000 o ne savavališkai, turintys vieną eilutę, po vieną asmens tapatybę ir pan. 395 00:22:07,000 --> 00:22:10,000 Matricos yra gražus, nes jie leidžia mums pradėti valyti savo kodą. 396 00:22:10,000 --> 00:22:13,000 Bet kas yra neigiama masyvo? 397 00:22:13,000 --> 00:22:15,000 , Ką galite daryti? Taip. 398 00:22:15,000 --> 00:22:17,000 [Studentų] Jūs turite žinoti, kaip didelis jis yra. 399 00:22:17,000 --> 00:22:19,000 Jūs turite žinoti, kaip didelis jis yra, todėl rūšies skausmas. 400 00:22:19,000 --> 00:22:21,000 Tiems iš jūsų, ankstesnės programavimo patirties žinome, kad daug kalbų, 401 00:22:21,000 --> 00:22:24,000 pavyzdžiui, "Java", galite paprašyti atminties riekė, specialiai masyvo, 402 00:22:24,000 --> 00:22:28,000 kaip didelis, kurių ilgis, turtinės padėties, taip sakant, ir tai tikrai patogu. 403 00:22:28,000 --> 00:22:32,000 C, jūs negalite net skambinti strlen bendrinis masyvo 404 00:22:32,000 --> 00:22:35,000 nes strlen, nes žodis reiškia, yra tik stygos, 405 00:22:35,000 --> 00:22:39,000 ir jūs galite išsiaiškinti, eilutės ilgis, nes šio žmogaus konvencijos 406 00:22:39,000 --> 00:22:43,000 A \ 0, bet masyvo, bendrąja prasme, yra tik atminties riekė. 407 00:22:43,000 --> 00:22:46,000 , Jei tai int masyvas, ten nebus kai specialus simbolis 408 00:22:46,000 --> 00:22:48,000 pabaigoje laukia Jūsų. 409 00:22:48,000 --> 00:22:50,000 Jūs turite prisiminti, masyvo ilgį. 410 00:22:50,000 --> 00:22:54,000 Kitas masyvo neigiama, auginami savo galvą į save GetString. 411 00:22:54,000 --> 00:22:59,000 Kas yra kitą masyvo neigiama? 412 00:22:59,000 --> 00:23:01,000 Pone, tik tu ir aš šiandien. 413 00:23:01,000 --> 00:23:04,000 [Nesigirdi studentas atsakas] >> Tai ką? 414 00:23:04,000 --> 00:23:06,000 Jis deklaruojamas kamino. 415 00:23:06,000 --> 00:23:09,000 Gerai, deklaruojamas kamino. Kodėl gi ne jums tai patinka? 416 00:23:09,000 --> 00:23:13,000 [Studentų], nes jis gauna pakartotinai naudoti. 417 00:23:13,000 --> 00:23:15,000 Ji gauna pakartotinai naudoti. 418 00:23:15,000 --> 00:23:18,000 Gerai, jei jūs naudojate masyvą paskirstyti atmintį, 419 00:23:18,000 --> 00:23:21,000 Pavyzdžiui, jūs negalite grįžti, nes tai ant kamino. 420 00:23:21,000 --> 00:23:23,000 Gerai, kad trūkumas. 421 00:23:23,000 --> 00:23:25,000 Ir kaip apie vieną su kita masyvo? 422 00:23:25,000 --> 00:23:28,000 Kai jūs jį skirti, esate rūšies prisukamas, jei jums reikia daugiau vietos, 423 00:23:28,000 --> 00:23:30,000 , nei masyvas. 424 00:23:30,000 --> 00:23:34,000 >> Tada mes pristatėme, prisiminti, malloc, kuris davė mums galimybę dinamiškai paskirstyti atmintį. 425 00:23:34,000 --> 00:23:37,000 Bet kas, jei mes bandėme kitą pasaulį apskritai? 426 00:23:37,000 --> 00:23:40,000 Ką daryti, jei mes norėjome išspręsti keletą šių problemų 427 00:23:40,000 --> 00:23:45,000 , kad mes, o ne-mano parkeris užmigo čia 428 00:23:45,000 --> 00:23:51,000 ką daryti, jei mes, o ne norėjo iš esmės sukurti pasaulį, kad ne ilgiau kaip tai? 429 00:23:51,000 --> 00:23:56,000 Tai masyvas, ir, žinoma, šios rūšies pablogėja, kai mes paspauskite masyvo pabaigos, 430 00:23:56,000 --> 00:24:00,000 ir aš dabar nebeturi kito sveikojo skaičiaus ar kitokio pobūdžio vietos. 431 00:24:00,000 --> 00:24:03,000 Ką daryti, jei mes tarsi Preemptively pasakyti, kodėl ne mes atsipalaiduoti 432 00:24:03,000 --> 00:24:07,000 šis reikalavimas, kad visi šie atminties gabaliukus ribotis atgal atgal, 433 00:24:07,000 --> 00:24:10,000 ir kodėl gi ne, kai man reikia int arba char 434 00:24:10,000 --> 00:24:12,000 tik duok man vietos vienam iš jų? 435 00:24:12,000 --> 00:24:14,000 Ir kai aš turiu kitą, duok man kitą erdvę, 436 00:24:14,000 --> 00:24:16,000 ir kai man reikia kito, duok man kitą erdvę. 437 00:24:16,000 --> 00:24:19,000 Kurio privalumas yra tai, kad, jei kas nors 438 00:24:19,000 --> 00:24:21,000 per čia mano atminties, ne big deal. 439 00:24:21,000 --> 00:24:25,000 Imsiu šį papildomą atminties riekė čia tai jo. 440 00:24:25,000 --> 00:24:28,000 >> Dabar, tik sugavimo čia yra tai, kad beveik jaučiasi turiu 441 00:24:28,000 --> 00:24:30,000 visa krūva įvairių kintamųjų. 442 00:24:30,000 --> 00:24:33,000 Tai jaučiasi penkių skirtingų kintamųjų, galinčių daryti poveikį. 443 00:24:33,000 --> 00:24:36,000 Bet kas, jei mes pavogti idėją nuo styginių 444 00:24:36,000 --> 00:24:41,000 kurią mes kažkaip susieti šiuos dalykus kartu konceptualiai, ir ką daryti, jei aš padariau tai? 445 00:24:41,000 --> 00:24:44,000 Tai yra mano labai prastai parengtas rodyklė. 446 00:24:44,000 --> 00:24:46,000 Tačiau tarkime, kad kiekvienas iš šių atminties gabaliukus 447 00:24:46,000 --> 00:24:52,000 atkreipė dėmesį į kitą, ir šis vaikinas, kuris neturi broliai ir seserys savo teisę, 448 00:24:52,000 --> 00:24:54,000 neturi tokio rodyklę. 449 00:24:54,000 --> 00:24:56,000 Tai yra iš tikrųjų, tai, kas vadinama susieta sąrašas. 450 00:24:56,000 --> 00:25:00,000 Tai nauja duomenų struktūra, kuri leidžia mums skirti atminties riekė, 451 00:25:00,000 --> 00:25:03,000 tada kitą, tada kitą, tada kitą, bet kuriuo metu mes norime 452 00:25:03,000 --> 00:25:07,000 programos metu, ir mes prisiminti, kad jie visi kažkaip susiję 453 00:25:07,000 --> 00:25:11,000 pažodžiui Grupavimo juos kartu, o mes padarėme, kad pictorially su rodykle. 454 00:25:11,000 --> 00:25:15,000 Bet kodu, koks būtų mechanizmas, per kurį galėtų kažkaip sujungti, 455 00:25:15,000 --> 00:25:20,000 beveik kaip nulio, viena į kitą riekė riekė? 456 00:25:20,000 --> 00:25:22,000 Mes galime naudoti rodyklę, tiesa? 457 00:25:22,000 --> 00:25:25,000 Nes tikrai rodyklė, kad manimi vyksta viršutiniame kairiajame aikštėje, 458 00:25:25,000 --> 00:25:31,000 šis vaikinas šį vieną, gali būti viduje šioje aikštėje 459 00:25:31,000 --> 00:25:34,000 ne tik kai int, ne tik kai char, bet kas, jei aš iš tikrųjų skiriama 460 00:25:34,000 --> 00:25:37,000 šiek tiek daugiau erdvės, kad dabar, 461 00:25:37,000 --> 00:25:41,000 kiekvienas mano gabaliukus atminties, nors tai kainuos man, 462 00:25:41,000 --> 00:25:45,000 dabar atrodo šiek tiek stačiakampio formos, kai vienas iš atminties gabaliukus 463 00:25:45,000 --> 00:25:47,000 naudojamas numerį, kaip ir skaičiumi 1, 464 00:25:47,000 --> 00:25:50,000 ir tada, jei šis vaikinas saugo skaitmeniu "2", 465 00:25:50,000 --> 00:25:52,000 tai kitas gabalas atminties naudojama rodykle, 466 00:25:52,000 --> 00:25:54,000 arba konkrečiau, žymeklis. 467 00:25:54,000 --> 00:25:59,000 Ir manau, kad aš čia įrašykite šį numerį iš 3, o aš naudoju tai, pabrėžiama, kad vaikinas, 468 00:25:59,000 --> 00:26:02,000 ir dabar šis vaikinas, tarkime, aš tik noriu tris tokius gabaliukus atminties. 469 00:26:02,000 --> 00:26:05,000 Aš nubrėžti liniją, kad, nurodant null. 470 00:26:05,000 --> 00:26:07,000 Nėra jokių papildomų pobūdis. 471 00:26:07,000 --> 00:26:10,000 >> Iš tiesų, tai, kaip mes galime eiti apie įgyvendinimo 472 00:26:10,000 --> 00:26:12,000 kažkas, kad vadinama susieta sąrašas. 473 00:26:12,000 --> 00:26:18,000 Sąrašas nauja duomenų struktūra, o tai yra pirmasis žingsnis link 474 00:26:18,000 --> 00:26:21,000 daug mėgėjas duomenų struktūras, kad pradėti spręsti problemas 475 00:26:21,000 --> 00:26:23,000 kartu "Facebook" tipo problemų linijų ir tipo "Google" problemų 476 00:26:23,000 --> 00:26:26,000 kur jūs turite didelius duomenų rinkinius, ir ji nebepalaiko gabalai jį 477 00:26:26,000 --> 00:26:29,000 laikyti viską Kaimynystėje ir naudoti kažką panašaus į tiesinės paieškos 478 00:26:29,000 --> 00:26:31,000 ar net kažkas panašaus dvejetainis paieškos. 479 00:26:31,000 --> 00:26:33,000 Jūs norite dar geresnių rodymo laikus. 480 00:26:33,000 --> 00:26:37,000 Iš tiesų, viena Šventosios Grails mes kalbame apie vėliau šią savaitę arba kitą 481 00:26:37,000 --> 00:26:41,000 yra algoritmas, kurio trukmė yra pastovi. 482 00:26:41,000 --> 00:26:44,000 Kitaip tariant, ji visada mano pačios trukmės laikotarpį, nesvarbu, 483 00:26:44,000 --> 00:26:47,000 kaip didelis indėlis yra, ir kad iš tikrųjų būtų įtikinamų, 484 00:26:47,000 --> 00:26:49,000 netgi labiau nei kas nors logaritminis. 485 00:26:49,000 --> 00:26:51,000 Kas tai yra ekrane čia? 486 00:26:51,000 --> 00:26:55,000 Kiekviena iš stačiakampių, yra būtent tai, ką aš ką tik piešė rankomis. 487 00:26:55,000 --> 00:26:59,000 Bet dalykas kairėje yra specialus kintamasis. 488 00:26:59,000 --> 00:27:02,000 Tai bus viena rodyklė, nes vienas kabliuko 489 00:27:02,000 --> 00:27:04,000 susietą sąrašą, kaip šie dalykai yra vadinami 490 00:27:04,000 --> 00:27:09,000 yra, kad jūs turite pakabinti ant vieno galo susietojo sąrašą. 491 00:27:09,000 --> 00:27:13,000 >> Tiesiog patinka su eilutę, jūs turite žinoti, pirmą char adresą. 492 00:27:13,000 --> 00:27:15,000 Tas pats spręsti dėl susijusių sąrašų. 493 00:27:15,000 --> 00:27:19,000 Jūs turite žinoti, kad pirmą riekė atminties adresą 494 00:27:19,000 --> 00:27:25,000 , nes iš ten, jūs galite pasiekti kiekvieną kitą. 495 00:27:25,000 --> 00:27:27,000 Neigiama. 496 00:27:27,000 --> 00:27:30,000 Kokia kaina mes mokėti už šio universalumo dinamiškai 497 00:27:30,000 --> 00:27:34,000 didelis duomenų struktūra, kad, jei mes kada nors reikia daugiau atminties, gerai, 498 00:27:34,000 --> 00:27:37,000 tiesiog skirti dar vieną gabalą ir parengti rodyklę 499 00:27:37,000 --> 00:27:39,000 sena į naują sąrašo uodega? 500 00:27:39,000 --> 00:27:41,000 Taip. 501 00:27:41,000 --> 00:27:43,000 [Studentų] Tai užtrunka maždaug dvigubai daug vietos. 502 00:27:43,000 --> 00:27:45,000 Tai užtrunka dvigubai daug vietos, todėl tai tikrai neigiama, ir mes matėme tai 503 00:27:45,000 --> 00:27:48,000 kompromisas prieš tarp laiko ir erdvės ir lankstumo 504 00:27:48,000 --> 00:27:51,000 dabar, mes turime ne 32 bitus kiekvienam iš šių numerių. 505 00:27:51,000 --> 00:27:57,000 Mums tikrai reikia 64, 32 skaičių ir 32 už rodyklė. 506 00:27:57,000 --> 00:27:59,000 Bet hey, aš turiu 2 GB RAM. 507 00:27:59,000 --> 00:28:02,000 Pridėti kitą 32 bitų čia ir čia neatrodo, kad didelis spręsti. 508 00:28:02,000 --> 00:28:05,000 Tačiau kai duomenų rinkiniai dideli, tai tikrai prideda iki tiesiog dvigubai tiek, kiek. 509 00:28:05,000 --> 00:28:09,000 Kaip dar neigiama dabar, ar ką funkciją mes pasiduoti, 510 00:28:09,000 --> 00:28:12,000 jei mes atstovaujame dalykų sąrašus su susietą sąrašą ir ne masyvo? 511 00:28:12,000 --> 00:28:14,000 [Studentų] Jūs negalite feed jį atgal. 512 00:28:14,000 --> 00:28:16,000 Jūs negalite feed jį atgal, todėl jūs tipo prisukamas, jei jūs vaikščioti 513 00:28:16,000 --> 00:28:19,000 iš kairės į dešinę linijos ar while cikle 514 00:28:19,000 --> 00:28:21,000 ir tada jūs suprasite, "O, aš noriu grįžti prie sąrašo pradžioje." 515 00:28:21,000 --> 00:28:26,000 Jūs negalite, nes šių patarimų tik eiti iš kairės į dešinę, kaip strėlės rodo. 516 00:28:26,000 --> 00:28:29,000 >> Dabar galite prisiminti sąrašo pradžioje su kito kintamojo, 517 00:28:29,000 --> 00:28:31,000 bet tai sudėtingumą reikia nepamiršti. 518 00:28:31,000 --> 00:28:35,000 Masyvas, nesvarbu, kaip toli jums eiti, jūs visada galite padaryti minuso, minusas, minusas, atėmus 519 00:28:35,000 --> 00:28:37,000 ir grįžti atgal, iš kur tu atėjai. 520 00:28:37,000 --> 00:28:40,000 Kaip dar neigiama čia? Taip. 521 00:28:40,000 --> 00:28:43,000 [Nesigirdi studentas klausimas] 522 00:28:43,000 --> 00:28:47,000 , Todėl Jūs galite jūs iš tikrųjų tiesiog pasiūlė duomenų struktūrą, vadinamas dvigubai susijęs sąrašas 523 00:28:47,000 --> 00:28:50,000 ir iš tiesų, jums reikės pridėti dar vieną žymiklį į kiekvieną iš šių stačiakampių 524 00:28:50,000 --> 00:28:53,000 kad eina kita kryptimi, aukštyn 525 00:28:53,000 --> 00:28:55,000 dabar, jums gali eiti į priekį ir atgal, 526 00:28:55,000 --> 00:28:59,000 kurių neigiama dabar jūs naudojate tris kartus daugiau atminties, kaip mes panaudojome 527 00:28:59,000 --> 00:29:04,000 ir sudėtingumą, taip pat pridedant kodą, jūs turite parašyti, teisę ją gauti. 528 00:29:04,000 --> 00:29:08,000 Tačiau visa tai yra galbūt labai pagrįstų kompromisų, jei atstatymas yra svarbesnis. 529 00:29:08,000 --> 00:29:10,000 Taip. 530 00:29:10,000 --> 00:29:12,000 [Studentų] Jūs taip pat negali turėti 2D susietą sąrašą. 531 00:29:12,000 --> 00:29:16,000 Gerai, jūs negalite iš tikrųjų turi 2D susijęs sąrašą. 532 00:29:16,000 --> 00:29:18,000 Galima. Tai toli gražu ne taip paprasta, kaip masyvo. 533 00:29:18,000 --> 00:29:21,000 Kaip masyvo, jūs skliaustai atidaromi uždarą skliaustelius, skliaustai atidaromi, uždaryti laikiklį, 534 00:29:21,000 --> 00:29:23,000 ir jūs gaunate šiek tiek 2-dimensijų struktūrą. 535 00:29:23,000 --> 00:29:26,000 Jūs galite įgyvendinti 2-dimensijų susijęs sąrašą 536 00:29:26,000 --> 00:29:29,000 jei jūs add-proposed-trečiąją žymeklį į kiekvieną iš šių dalykų, 537 00:29:29,000 --> 00:29:34,000 ir jei jūs manote apie kito sąrašo, dar ne 3D stilius 538 00:29:34,000 --> 00:29:40,000 iš ekrano į mus visus, o tai tik dar vienas tam tikros rūšies grandinės. 539 00:29:40,000 --> 00:29:45,000 Mes galime tai padaryti, bet tai nėra taip paprasta, kaip rašyti skliaustai atidaromi, kvadratas laikiklis. Taip. 540 00:29:45,000 --> 00:29:48,000 [Nesigirdi studentas klausimas] 541 00:29:48,000 --> 00:29:50,000 Gerai, kad tai yra realus skandalistas. 542 00:29:50,000 --> 00:29:54,000 >> Šie algoritmai, kad mes pined daugiau, kaip oh, dvejetainis paieškos 543 00:29:54,000 --> 00:29:57,000 skaičių masyvo galite ieškoti ant lentos 544 00:29:57,000 --> 00:30:01,000 arba per telefono knygą, daug greičiau, jei jūs naudojate skaldyk ir valdyk 545 00:30:01,000 --> 00:30:05,000 ir dvejetainis paieškos algoritmas, bet dvejetainis paieškos reikalaujama dvi prielaidas. 546 00:30:05,000 --> 00:30:09,000 Vienas iš jų, kad duomenys buvo surūšiuoti. 547 00:30:09,000 --> 00:30:11,000 Dabar mes galime matyt išlaikyti šią surūšiuoti, 548 00:30:11,000 --> 00:30:14,000 tad gal tai ne problema, bet dvejetainis paieškos pat daroma prielaida, 549 00:30:14,000 --> 00:30:18,000 , kad jūs turėjo laisvą prieigą prie numerių sąraše, 550 00:30:18,000 --> 00:30:21,000 ir pasirinkimas leidžia jums turėti laisvą prieigą, ir laisvą prieigą, 551 00:30:21,000 --> 00:30:24,000 Aš turiu galvoje, jei jūs masyvą, kiek laiko tai užtruks jums 552 00:30:24,000 --> 00:30:26,000 patekti į laikiklio 0? 553 00:30:26,000 --> 00:30:29,000 Viena operacija, tiesiog naudokite [0] ir tu teisus ten. 554 00:30:29,000 --> 00:30:33,000 Kiek žingsnių reikia, kad patekti į 10 vietą? 555 00:30:33,000 --> 00:30:36,000 Vienas žingsnis, jums tiesiog eikite į [10] ir jūs ten. 556 00:30:36,000 --> 00:30:40,000 Priešingai, kaip jums gauti į susietą sąrašą 10 sveikąjį skaičių? 557 00:30:40,000 --> 00:30:42,000 Jūs turite pradėti iš pradžių, nes jūs tik prisiminti, 558 00:30:42,000 --> 00:30:45,000 įsimenamas susietą sąrašo pradžioje, kaip ir eilutės 559 00:30:45,000 --> 00:30:48,000 savo pirmojo char adresą, ir rasti, kad 10 int 560 00:30:48,000 --> 00:30:53,000 arba, kad 10 simbolių į eilutę, jūs turite ieškoti visoje Damn Thing. 561 00:30:53,000 --> 00:30:55,000 >> Vėlgi, mes ne spręsti mūsų problemų. 562 00:30:55,000 --> 00:31:00,000 Mes pristatome naujus, bet tai tikrai priklauso nuo to, ką jūs bandote kurti. 563 00:31:00,000 --> 00:31:04,000 Įgyvendinimo, mes galime skolintis idėja, kad studentas struktūros. 564 00:31:04,000 --> 00:31:07,000 Sintaksė yra labai panaši, išskyrus dabar, idėja yra šiek tiek daugiau abstraktus 565 00:31:07,000 --> 00:31:09,000 nei namas, vardas ir pavardė ir ID. 566 00:31:09,000 --> 00:31:13,000 Bet aš siūlau, kad galėtume turėti duomenų struktūrą C 567 00:31:13,000 --> 00:31:17,000 tai yra vadinama mazgas, paskutinis žodis skaidrėje rodo, 568 00:31:17,000 --> 00:31:21,000 viduje mazgas, mazgas yra tik bendrinis informatikos konteineris. 569 00:31:21,000 --> 00:31:25,000 Tai paprastai sudarytas apskritimas ar kvadratas ar stačiakampis, kaip mes padarėme. 570 00:31:25,000 --> 00:31:27,000 Ir šios duomenų struktūros, mes turime int, n, 571 00:31:27,000 --> 00:31:29,000 taip, kad I norite išsaugoti. 572 00:31:29,000 --> 00:31:36,000 Bet kas tai yra antra eilutė, Struct mazgas * šalia? 573 00:31:36,000 --> 00:31:40,000 Kodėl tai yra teisinga, ar kokį vaidmenį tai, ką žaisti, 574 00:31:40,000 --> 00:31:42,000 nors tai šiek tiek paslaptingas, iš pirmo žvilgsnio? 575 00:31:42,000 --> 00:31:44,000 Taip. 576 00:31:44,000 --> 00:31:46,000 [Nesigirdi studentas atsakas] 577 00:31:46,000 --> 00:31:50,000 Tiksliai, todėl * tarsi grobio, kad tai tam tikra rodyklė. 578 00:31:50,000 --> 00:31:53,000 Šio rodyklė vardas savavališkai kitą, 579 00:31:53,000 --> 00:32:00,000 , tačiau mes galime jį pavadino ką norime, bet ką tai rodyklė taškas? 580 00:32:00,000 --> 00:32:03,000 [Studentų] Kitas mazgas. >> Būtent, ji nurodo kitas toks mazgas. 581 00:32:03,000 --> 00:32:05,000 >> Dabar, tai yra tarsi C. smalsumo 582 00:32:05,000 --> 00:32:09,000 Prisiminkite, kad C skaito sudarytojas viršaus į apačią, iš kairės į dešinę, 583 00:32:09,000 --> 00:32:13,000 tai reiškia, jei, tai yra šiek tiek skiriasi nuo to, ką mes padarėme su mokiniu. 584 00:32:13,000 --> 00:32:16,000 Kai mes apibrėžta studentas, mes iš tikrųjų nebuvo įdėjo žodį. 585 00:32:16,000 --> 00:32:18,000 Jis tiesiog pasakė Typedef. 586 00:32:18,000 --> 00:32:20,000 Tada mes turėjome int id, String vardas, String namas, 587 00:32:20,000 --> 00:32:23,000 ir tada studentas struct apačioje. 588 00:32:23,000 --> 00:32:26,000 Ši deklaracija yra šiek tiek kitoks, nes, 589 00:32:26,000 --> 00:32:28,000 vėl, C kompiliatorius yra šiek tiek kvailas. 590 00:32:28,000 --> 00:32:30,000 Tai tik ketina skaityti iš viršaus į apačią, 591 00:32:30,000 --> 00:32:33,000 todėl, jei jis pasiekia 2-oji linija 592 00:32:33,000 --> 00:32:37,000 toliau yra paskelbta ir ji mato, oi, čia kintamasis vadinamas kitą. 593 00:32:37,000 --> 00:32:39,000 Tai rodyklė struct mazgo. 594 00:32:39,000 --> 00:32:42,000 Kompiliatorių suprasti, kas yra Struct mazgas? 595 00:32:42,000 --> 00:32:44,000 Aš niekada girdėjote apie prieš šio dalyko, 596 00:32:44,000 --> 00:32:47,000 , nes žodis mazgas gali kitaip pasirodyti 597 00:32:47,000 --> 00:32:49,000 iki dugno, todėl yra šis rezervo. 598 00:32:49,000 --> 00:32:53,000 Jūs turite pasakyti struct mazgas, kurį galite sutrumpinti vėliau 599 00:32:53,000 --> 00:32:56,000 dėka Typedef žemai čia, bet tai yra dėl 600 00:32:56,000 --> 00:33:02,000 mes nuorodų struktūra pati viduje struktūros. 601 00:33:02,000 --> 00:33:05,000 Štai kabliuko nėra. 602 00:33:05,000 --> 00:33:07,000 >> Keletas įdomių problemų atsirasti. 603 00:33:07,000 --> 00:33:09,000 Mes turime numerių sąrašą. Kaip mes įterpti į jį? 604 00:33:09,000 --> 00:33:11,000 Kaip mes ieškoti? Kaip mes ištrinti iš jo? 605 00:33:11,000 --> 00:33:13,000 Ypač dabar, kad mes turime valdyti visus šiuos patarimus. 606 00:33:13,000 --> 00:33:15,000 Jūs manėte, patarimų buvo tarsi iš proto-lenkimo 607 00:33:15,000 --> 00:33:17,000 kai turėjo vienas iš jų tiesiog bando skaityti int. 608 00:33:17,000 --> 00:33:20,000 Dabar mes turime visą sąrašą verta manipuliuoti. 609 00:33:20,000 --> 00:33:22,000 Kodėl ne mes atsižvelgti į mūsų 5-minučių pertrauką, ir tada mes atnešti 610 00:33:22,000 --> 00:33:34,000 kai ant scenos žmonės daryti būtent tai. 611 00:33:34,000 --> 00:33:36,000 >> C yra daug smagiau, kai jis veikė. 612 00:33:36,000 --> 00:33:39,000 Kas būtų tiesiog norite būti pirmas? 613 00:33:39,000 --> 00:33:41,000 Gerai, ateiti iki. Jūs esate pirmas. 614 00:33:41,000 --> 00:33:44,000 Kas norėtų būti 9? Gerai, 9. 615 00:33:44,000 --> 00:33:46,000 Kaip apie 9? 17? 616 00:33:46,000 --> 00:33:51,000 Mažai klika čia. 22 ir 26 toje pirmoje eilėje. 617 00:33:51,000 --> 00:33:53,000 Ir tada, kaip apie ką nors ten buvo pažymėti. 618 00:33:53,000 --> 00:33:57,000 Jūs esate 34. Gerai, 34, ateiti iki. 619 00:33:57,000 --> 00:33:59,000 Pirma, tai ten. Gerai, iš jūsų vaikinai visi keturi. 620 00:33:59,000 --> 00:34:01,000 Ir kas mes sakome, 9? 621 00:34:01,000 --> 00:34:04,000 Kas yra mūsų 9? 622 00:34:04,000 --> 00:34:07,000 , Kuris tikrai nori būti 9? Viskas gerai, nagi, būti 9. 623 00:34:07,000 --> 00:34:10,000 Čia mes einame. 624 00:34:10,000 --> 00:34:13,000 34, mes susitikti su jumis ten. 625 00:34:13,000 --> 00:34:17,000 Pirmoji dalis yra padaryti sau atrodyti, kad. 626 00:34:17,000 --> 00:34:21,000 26, 22, 17, geras. 627 00:34:21,000 --> 00:34:25,000 Jei jūs galite stovėti ne į tą pusę, nes mes ketiname malloc jums akimirką. 628 00:34:25,000 --> 00:34:29,000 >> Gerai, gerai. 629 00:34:29,000 --> 00:34:32,000 Gerai, puikiai, todėl galime užduoti porą klausimų. 630 00:34:32,000 --> 00:34:34,000 Ir iš tikrųjų, kas yra jūsų vardas? >> Anita. 631 00:34:34,000 --> 00:34:37,000 Anita, gerai, eikš čia. 632 00:34:37,000 --> 00:34:41,000 Anita ketina padėti mums tarsi išspręsti vieną gana paprastą klausimą pirmąjį, 633 00:34:41,000 --> 00:34:44,000 kaip jums atrodo, ar ne vertė yra sąraše? 634 00:34:44,000 --> 00:34:48,000 Dabar pastebėti, kad, pirma, sudarė čia Lucas, 635 00:34:48,000 --> 00:34:52,000 yra šiek tiek kitoks, ir todėl jo gabalas popieriaus sąmoningai į šoną 636 00:34:52,000 --> 00:34:55,000 , nes tai nėra labai aukštas ir neužima kuo daugiau bitų, 637 00:34:55,000 --> 00:34:58,000 nors techniškai jis yra tokio paties dydžio popieriaus, yra pasukti. 638 00:34:58,000 --> 00:35:01,000 Bet jis šiek tiek skiriasi tuo, kad jis yra tik 32 bitų rodykle, 639 00:35:01,000 --> 00:35:05,000 ir visi šie vaikinai yra 64 bitų, iš kurių pusė yra skaičius, iš kurių pusė yra žymeklis. 640 00:35:05,000 --> 00:35:08,000 Bet rodyklė nėra vaizduojamas, todėl, jei jus vaikinai galėtų šiek tiek nerangiai 641 00:35:08,000 --> 00:35:12,000 naudoti savo kairę ranką, pabrėžiama, kad asmuo šalia tavęs. 642 00:35:12,000 --> 00:35:14,000 Ir jūs numeris 34. Koks tavo vardas? 643 00:35:14,000 --> 00:35:16,000 Ari. 644 00:35:16,000 --> 00:35:19,000 Ari, kad iš tikrųjų, laikykite popierių į savo dešinę ranką ir kairę ranka eina tiesiai žemyn. 645 00:35:19,000 --> 00:35:21,000 Jūs pareiškiate null kairėje. 646 00:35:21,000 --> 00:35:24,000 >> Dabar mūsų žmogaus vaizdas yra labai nuosekli. 647 00:35:24,000 --> 00:35:26,000 Iš tikrųjų tai yra kaip patarimų dirbti. 648 00:35:26,000 --> 00:35:29,000 Ir, jei galite Menkė šiek tiek tokiu būdu, kad aš ne į savo kelią. 649 00:35:29,000 --> 00:35:34,000 Anita čia, rasti man 22 skaičių, 650 00:35:34,000 --> 00:35:40,000 bet prisiimti ne žmonės telpa popieriaus lapų apribojimą, 651 00:35:40,000 --> 00:35:43,000 bet tai yra sąrašas, ir jūs turite tik Lucas pradėti 652 00:35:43,000 --> 00:35:46,000 , nes jis yra tiesiog pirmas rodyklė. 653 00:35:46,000 --> 00:35:51,000 Tarkime, jūs sau yra žymeklis, ir kad jūs taip pat turi galimybę atkreipti dėmesį į kažką. 654 00:35:51,000 --> 00:35:56,000 Kodėl gi ne jums pradėti, nurodydami, ką Lucas nukreipta? 655 00:35:56,000 --> 00:35:58,000 Geras, ir leiskite man priimti tai iš čia. 656 00:35:58,000 --> 00:36:04,000 Tik diskusijos dėlei, leiskite man atsigriebti tuščią puslapį. 657 00:36:04,000 --> 00:36:06,000 Kaip rašoma jūsų vardas? >> Anita. 658 00:36:06,000 --> 00:36:08,000 Gerai, Anita. 659 00:36:08,000 --> 00:36:18,000 Tarkime, mazgas * anita = Lucas. 660 00:36:18,000 --> 00:36:22,000 Na, mes neturėtume skambinti jums Lucas. Turėtume skambinti pirmą kartą. 661 00:36:22,000 --> 00:36:25,000 Kodėl tai iš tikrųjų atitinka su tikrove čia? 662 00:36:25,000 --> 00:36:27,000 Vienas, pirmiausia, jau egzistuoja. 663 00:36:27,000 --> 00:36:30,000 Pirma buvo skirta turbūt kažkur čia. 664 00:36:30,000 --> 00:36:35,000 Mazgas * pirma ir tai buvo skirta sąrašą kažkaip. 665 00:36:35,000 --> 00:36:37,000 Aš nežinau, kaip tai atsitiko. Tai atsitiko prieš klasę pradėjo. 666 00:36:37,000 --> 00:36:40,000 Šis susijęs su žmonių sąrašas buvo sukurtas. 667 00:36:40,000 --> 00:36:44,000 , O šiuo metu šio punkto istorija-tai yra viskas "Facebook", matyt, vėliau- 668 00:36:44,000 --> 00:36:49,000 Šiuo istorija Anita buvo inicijuoti, turi būti lygus, pirmiausia, 669 00:36:49,000 --> 00:36:51,000 bet tai nereiškia, kad Anita punktai Lucas. 670 00:36:51,000 --> 00:36:53,000 Atvirkščiai, ji atkreipia į tai, ką jis nurodo 671 00:36:53,000 --> 00:36:57,000 nes tas pats adresas, tai viduje Lucas "32 bits - 1, 2, 3 - 672 00:36:57,000 --> 00:37:01,000 dabar taip pat viduje Anita "32 bitų - 1, 2, 3. 673 00:37:01,000 --> 00:37:05,000 >> Dabar rasti 22. Kaip tu apie tai darote? 674 00:37:05,000 --> 00:37:07,000 Kas tai? >> Point whatever. 675 00:37:07,000 --> 00:37:11,000 Atkreipti whatever, kad eiti į priekį ir veikti tai, kaip geriausiai galite čia. 676 00:37:11,000 --> 00:37:15,000 Gerai, gerai, ir dabar jūs nukreipta į, koks tavo vardas su 22? 677 00:37:15,000 --> 00:37:18,000 Ramonas. >> Ramonas, todėl Ramonas telpa 22. 678 00:37:18,000 --> 00:37:20,000 Jūs jau padaryta čekį. 679 00:37:20,000 --> 00:37:24,000 Ar Ramonas == 22 ir jei taip, pavyzdžiui, mes galime grįžti tiesa. 680 00:37:24,000 --> 00:37:26,000 Leiskite man, o šie vaikinai stoviu čia šiek tiek nerangiai 681 00:37:26,000 --> 00:37:32,000 leiskite man padaryti kažką greitai, kaip Bool rasti. 682 00:37:32,000 --> 00:37:37,000 Aš ruošiuosi eiti į priekį ir pasakyti (mazgas * sąrašas, int n). 683 00:37:37,000 --> 00:37:39,000 Aš būsiu su jumis vaikinai. Aš tiesiog parašyti šiek tiek kodo. 684 00:37:39,000 --> 00:37:45,000 Ir dabar aš ruošiuosi eiti į priekį ir tai padaryti, mazgas * anita = sąrašą. 685 00:37:45,000 --> 00:37:51,000 Ir aš ruošiuosi eiti į priekį ir pasakyti, o (Anita! = NULL). 686 00:37:51,000 --> 00:37:57,000 >> Metafora čia truputį ištempti, bet o (Anita! = NULL), ką aš noriu padaryti,? 687 00:37:57,000 --> 00:38:03,000 Man reikia šiek tiek nuorodų kelią 688 00:38:03,000 --> 00:38:05,000 sveikasis skaičius, kad Anita nukreipta. 689 00:38:05,000 --> 00:38:08,000 Praeityje, kai mes turėjome struktūras, kurios mazgas yra, 690 00:38:08,000 --> 00:38:11,000 mes naudojome taško žymėjimą, ir mes norime pasakyti kažką panašaus 691 00:38:11,000 --> 00:38:15,000 anita.n, bet problema čia yra ta, kad Anita struct savaime nėra. 692 00:38:15,000 --> 00:38:17,000 Kas ji yra? 693 00:38:17,000 --> 00:38:21,000 Ji yra žymeklis, kad tikrai, jei norime naudoti šią dot žymėjimą 694 00:38:21,000 --> 00:38:23,000 ir tai vyksta ieškoti sąmoningai šiek tiek paslaptingas 695 00:38:23,000 --> 00:38:28,000 mes turime kažką daryti, pavyzdžiui, eiti į Nepriklausomai Anita kaire ranka nukreipta į 696 00:38:28,000 --> 00:38:31,000 ir tada gauti lauką pavadinimu n. 697 00:38:31,000 --> 00:38:35,000 Anita yra rodyklė, bet, kas yra * anita? 698 00:38:35,000 --> 00:38:38,000 Kaip jums atrodo, kai jūs einate į ką Anita nukreipta? 699 00:38:38,000 --> 00:38:42,000 Struct mazgas ir mazgas, išėmimą iš apyvartos, turi lauką, vadinamą n 700 00:38:42,000 --> 00:38:47,000 nes ji, prisiminti, šie 2 laukai, šalia ir N, 701 00:38:47,000 --> 00:38:50,000 kad mes matėme prieš akimirką čia. 702 00:38:50,000 --> 00:38:53,000 >> Faktiškai imituoti kodu, 703 00:38:53,000 --> 00:39:02,000 galėtume tai padaryti ir pasakyti, ar ((* anita). n == n), n, kad aš ieškau. 704 00:39:02,000 --> 00:39:04,000 Atkreipkite dėmesį, kad funkcija buvo perduota skaičius man rūpi. 705 00:39:04,000 --> 00:39:10,000 Tada aš galiu eiti į priekį ir padaryti kažką panašaus Return TRUE. 706 00:39:10,000 --> 00:39:12,000 Kitur, jei tai ne tas atvejis, ką aš noriu daryti? 707 00:39:12,000 --> 00:39:19,000 Kaip man išversti kodas Anita taip ir padarė intuityviai pėsčiomis per sąrašą? 708 00:39:19,000 --> 00:39:26,000 Ką turėčiau daryti, čia, kad būtų imituotos Anita šį žingsnį į kairę, kad žingsnis į kairę? 709 00:39:26,000 --> 00:39:28,000 [Nesigirdi studentas atsakas] >> Kas tai? 710 00:39:28,000 --> 00:39:30,000 [Nesigirdi studentas atsakas] 711 00:39:30,000 --> 00:39:34,000 Gera, o ne bloga idėja, bet anksčiau, kai mes padarėme tai, mes baigsite Anita + + 712 00:39:34,000 --> 00:39:37,000 , nes tai būtų pridėti 1 Anita 713 00:39:37,000 --> 00:39:40,000 , kuri paprastai nurodo kitą asmenį, kaip Ramon, 714 00:39:40,000 --> 00:39:44,000 arba asmuo, šalia jo, arba šalia jo asmuo žemyn linija. 715 00:39:44,000 --> 00:39:49,000 Bet tai dar ne gana gera čia, nes tai, ką šis dalykas atrodo kaip atminties? 716 00:39:49,000 --> 00:39:54,000 Ne todėl, kad. Turime išjungti. 717 00:39:54,000 --> 00:40:00,000 Atrodo, kad ši atminties, ir nors aš paruošiau 1 ir 2 ir 3 arti vienas kito, 718 00:40:00,000 --> 00:40:03,000 jei mes tikrai imituoti tai gali jus vaikinai, o dar nukreipta į tų pačių žmonių, 719 00:40:03,000 --> 00:40:07,000 kai kurie iš jūsų atsitiktinį žingsnį atgal, kai kurie iš jūsų atsitiktinis žingsnis į priekį? 720 00:40:07,000 --> 00:40:10,000 >> Ši netvarka yra vis dar susieta sąrašas 721 00:40:10,000 --> 00:40:13,000 tačiau šie vaikinai gali būti bet kur į atmintį, 722 00:40:13,000 --> 00:40:15,000 taip Anita + + yra nesiruošia dirbti, kodėl? 723 00:40:15,000 --> 00:40:19,000 Kas LOCATION anita + +? 724 00:40:19,000 --> 00:40:21,000 Kas žino. 725 00:40:21,000 --> 00:40:24,000 Tai kai kita vertė, kad tiesiog taip atsitinka, turi būti tarpininke 726 00:40:24,000 --> 00:40:28,000 tarp visų šių atsitiktinai mazgų, nes mes ne naudojant masyvą. 727 00:40:28,000 --> 00:40:30,000 Skyrėme vienas iš šių mazgų atskirai. 728 00:40:30,000 --> 00:40:32,000 Gerai, jei jus vaikinai galite valyti save atgal į viršų. 729 00:40:32,000 --> 00:40:37,000 Leiskite man pasiūlyti, kad vietoj anita + +, mes, o ne daryti anita gauna 730 00:40:37,000 --> 00:40:42,000 gerai, tai kodėl ne mes einame kokia Anita nukreipta ir tada daryti. toliau? 731 00:40:42,000 --> 00:40:45,000 Kitaip tariant, mes einame į Ramon, kas holdingo kurios numeris 22, 732 00:40:45,000 --> 00:40:51,000 ir tada. šalia yra, nors Anita būtų kopijuoti Jo kairė ranka žymeklį. 733 00:40:51,000 --> 00:40:54,000 Bet ji negali eiti toliau nei Ramon, nes mes radome 22. 734 00:40:54,000 --> 00:40:56,000 Bet tai būtų idėja. Dabar, tai yra dievas baisu netvarka. 735 00:40:56,000 --> 00:40:59,000 Sąžiningai, niekas kada nors prisiminti šią sintaksę, ir, laimei 736 00:40:59,000 --> 00:41:04,000 tai tikrai šiek tiek sąmoningas-Oh, jūs ne iš tikrųjų matyti, ką parašiau. 737 00:41:04,000 --> 00:41:08,000 Tai būtų patrauklesni, jei galėtumėte. Voila! 738 00:41:08,000 --> 00:41:10,000 >> Užkulisiuose, aš išspręsti šią problemą šiuo būdu. 739 00:41:10,000 --> 00:41:14,000 Anita, žengti šį žingsnį į kairę, 740 00:41:14,000 --> 00:41:18,000 pirma, mes eiti tuo adresu, Anita nukreipta į 741 00:41:18,000 --> 00:41:23,000 ir kur ji ras ne tik n, kurį mes ką tik patikrino palyginimas labui, 742 00:41:23,000 --> 00:41:25,000 bet jūs taip pat rasti kitą - šiuo atveju, 743 00:41:25,000 --> 00:41:28,000 Ramon kaire ranka, nukreipta į kitą mazgą sąraše. 744 00:41:28,000 --> 00:41:32,000 Bet tai yra dievas baisu netvarka, aš paminėjo anksčiau, 745 00:41:32,000 --> 00:41:34,000 tačiau paaiškėja, C leidžia mums supaprastinti šią. 746 00:41:34,000 --> 00:41:40,000 Vietoj to, kad raštu (* anita), mes galime, o ne tiesiog parašyti Anita> N, 747 00:41:40,000 --> 00:41:45,000 ir tai yra lygiai toks pats dalykas funkciškai, bet tai daug daugiau intuityvi, 748 00:41:45,000 --> 00:41:48,000 ir tai daug labiau atitiktų vaizdą, kad mes buvo piešimo 749 00:41:48,000 --> 00:41:50,000 visą šį laiką naudojant rodykles. 750 00:41:50,000 --> 00:41:57,000 >> Galiausiai, ką mes turime padaryti, šios programos pabaigoje? 751 00:41:57,000 --> 00:42:00,000 Yra viena eilutė kodo likusių. 752 00:42:00,000 --> 00:42:02,000 Grįžti ką? 753 00:42:02,000 --> 00:42:05,000 Klaidinga, nes, jei mes gauname per visą while cikle 754 00:42:05,000 --> 00:42:10,000 ir Anita, iš tiesų, yra nulis, tai reiškia, kad ji nuėjo visą kelią į sąrašo pabaigoje 755 00:42:10,000 --> 00:42:12,000 kur ji buvo nukreipta ne-koks tavo vardas dar kartą? 756 00:42:12,000 --> 00:42:15,000 Ari Ari. >> Kairė ranka, kuris yra niekinis. 757 00:42:15,000 --> 00:42:18,000 Anita dabar yra nulis, ir aš suprantu, jūs tiesiog čia stovėjo nerangiai nežinioje 758 00:42:18,000 --> 00:42:21,000 nes aš ruošiuosi į monologą, 759 00:42:21,000 --> 00:42:23,000 bet mes įtraukti jus vėl vos akimirką. 760 00:42:23,000 --> 00:42:27,000 Anita yra niekinis tuo istorija tašką, todėl while cikle baigiasi, 761 00:42:27,000 --> 00:42:30,000 ir mes turime gražins false, nes, jei ji gavo visą kelią iki Ari NULL pointeris 762 00:42:30,000 --> 00:42:34,000 ten buvo ne skaičius, kad ji siekė sąraše. 763 00:42:34,000 --> 00:42:39,000 Mes galime išvalyti iki pat, tačiau tai yra gana gera įgyvendinimo 764 00:42:39,000 --> 00:42:43,000 Sankryþos funkcija, rasti funkcijos susietos sąrašą. 765 00:42:43,000 --> 00:42:48,000 Jis vis dar yra linijinis paieška, bet tai nėra taip paprasta, kaip + + rodyklė 766 00:42:48,000 --> 00:42:52,000 + + i kintamasis, nes dabar mes galime negali atspėti 767 00:42:52,000 --> 00:42:54,000 kur kiekvienas iš šių mazgų yra atminties. 768 00:42:54,000 --> 00:42:57,000 Mes turime tiesiog sekti duonos trupinių takas arba, tiksliau, 769 00:42:57,000 --> 00:43:00,000 rodyklės, gauti iš vieno mazgo į kitą. 770 00:43:00,000 --> 00:43:02,000 >> Dabar pabandykime dar vieną. Anita, jūs norite grįžti čia? 771 00:43:02,000 --> 00:43:06,000 Kodėl ne mes einame į priekį ir paskirti po vieną asmenį iš auditorijos? 772 00:43:06,000 --> 00:43:08,000 Malloc-koks tavo vardas? >> Rebecca. 773 00:43:08,000 --> 00:43:10,000 Rebecca. Rebecca buvo malloced iš auditorijos, 774 00:43:10,000 --> 00:43:13,000 ir ji saugoti, kurios numeris 55. 775 00:43:13,000 --> 00:43:17,000 Ir po ranka tikslas dabar yra Anita įterpti 776 00:43:17,000 --> 00:43:22,000 Rebecca į susietą sąrašą čia savo tinkamoje vietoje. 777 00:43:22,000 --> 00:43:24,000 Nagi čia for a moment. 778 00:43:24,000 --> 00:43:28,000 Aš padariau kažką panašaus į tai. 779 00:43:28,000 --> 00:43:32,000 Aš padariau mazgas *. Ir koks tavo vardas dar kartą? 780 00:43:32,000 --> 00:43:34,000 Rebecca. >> Rebecca, gerai. 781 00:43:34,000 --> 00:43:41,000 Rebecca gauna malloc (sizeof (mazgas)). 782 00:43:41,000 --> 00:43:44,000 Tiesiog kaip ir skyrėme anksčiau, dalykų, pavyzdžiui, studentams ir Papuošalą 783 00:43:44,000 --> 00:43:46,000 mums reikia mazgo dydį, todėl dabar Rebecca 784 00:43:46,000 --> 00:43:49,000 yra nukreipta į tai, ką? 785 00:43:49,000 --> 00:43:52,000 Rebecca jos viduje turi du laukus, iš kurių vienas yra 55. 786 00:43:52,000 --> 00:43:55,000 Darykime ką, Rebecca-> = 55. 787 00:43:55,000 --> 00:44:00,000 Bet tada rebecca-> Kitas turėtų būti kaip dabar, jos ranka yra natūra, kuris žino,? 788 00:44:00,000 --> 00:44:03,000 Ji nukreipta į kai šiukšlių vertės, tai kodėl gi ne į gera priemonė 789 00:44:03,000 --> 00:44:07,000 mes bent jau tai padaryti taip, kad kairė ranka dabar jos pusėje. 790 00:44:07,000 --> 00:44:09,000 Dabar Anita, išgerkite ją iš čia. 791 00:44:09,000 --> 00:44:11,000 Turite Rebecca, kuriems buvo skirtos. 792 00:44:11,000 --> 00:44:20,000 Eiti į priekį ir rasti, kur turėtume Rebecca. 793 00:44:20,000 --> 00:44:25,000 Gerai, labai gerai. 794 00:44:25,000 --> 00:44:28,000 Gerai, gerai, ir dabar mes turime jums pateikti šiek tiek krypties, 795 00:44:28,000 --> 00:44:30,000 todėl jūs pasiekėte Ario. 796 00:44:30,000 --> 00:44:33,000 Jo kairė ranka yra niekinis, bet Rebecca aiškiai priklauso į dešinę, 797 00:44:33,000 --> 00:44:36,000 taip, kaip mes turime pakeisti šią susietą sąrašą 798 00:44:36,000 --> 00:44:38,000 siekiant įtraukti Rebecca į tinkamą vietą? 799 00:44:38,000 --> 00:44:42,000 , Jei galėtumėte tiesiog perkelti žmonių kairę rankas aplink, kiek reikia, 800 00:44:42,000 --> 00:44:48,000 mes jums išspręsti šią problemą, kad taip. 801 00:44:48,000 --> 00:44:52,000 Gerai, gerai, o tuo tarpu, Rebecca kaire ranka dabar šalia jos. 802 00:44:52,000 --> 00:44:54,000 >> Tai buvo labai lengva. 803 00:44:54,000 --> 00:44:57,000 Pabandykime skiriant mes beveik jau padaryta, 20. 804 00:44:57,000 --> 00:44:59,000 Gerai, ateiti iki. 805 00:44:59,000 --> 00:45:04,000 20 buvo skirta, todėl leiskite man eiti į priekį ir dar kartą pasakyti, čia 806 00:45:04,000 --> 00:45:07,000 mes ką tik padaryta mazgas * Saad. 807 00:45:07,000 --> 00:45:11,000 Mes turime malloc (sizeof (mazgas)). 808 00:45:11,000 --> 00:45:16,000 Mes tada daryti tą patį tiksliai sintaksę, kaip mes padarėme prieš, 20 809 00:45:16,000 --> 00:45:20,000 ir aš padarysiu next = NULL, ir dabar jis iki Anita 810 00:45:20,000 --> 00:45:23,000 įterpti į susietą sąrašą, jei galima žaisti, kad tą patį vaidmenį. 811 00:45:23,000 --> 00:45:30,000 Vykdyti. 812 00:45:30,000 --> 00:45:32,000 Gerai, gerai. 813 00:45:32,000 --> 00:45:38,000 Dabar pagalvokite, prieš pradėdami juda į kairę rankas aplink. 814 00:45:38,000 --> 00:45:46,000 Jūs iki šiol gavo labiausiai nepatogios vaidmenį šiandien. 815 00:45:46,000 --> 00:45:59,000 Kurio ranką turėtų būti perkeltas pirmas? 816 00:45:59,000 --> 00:46:02,000 Gerai, palauk, aš klausos kai ne. 817 00:46:02,000 --> 00:46:07,000 , Jei kai kurie žmonės būtų mandagiai patinka padėti išspręsti nepatogią padėtį čia. 818 00:46:07,000 --> 00:46:11,000 Kieno kairė ranka turėtų būti atnaujintas galbūt? Taip. 819 00:46:11,000 --> 00:46:13,000 [Studentų] Saad. 820 00:46:13,000 --> 00:46:15,000 Gerai, Saad, kodėl, nors? 821 00:46:15,000 --> 00:46:17,000 [Nesigirdi studentas atsakas] 822 00:46:17,000 --> 00:46:19,000 Gerai, nes jei mes einame-koks tavo vardas? >> Maršalo 823 00:46:19,000 --> 00:46:22,000 Marshall, jei mes einame į ranką null 824 00:46:22,000 --> 00:46:25,000 dabar mes tiesiog našlaičiais keturi žmonės šiame sąraše 825 00:46:25,000 --> 00:46:29,000 , nes jis buvo vienintelis dalykas, nukreipta į Ramon ir kiekvienas į kairę, 826 00:46:29,000 --> 00:46:31,000 atnaujinti, kad žymeklį pirmą kartą buvo blogas. 827 00:46:31,000 --> 00:46:33,000 Leiskite anuliuoti, kad. 828 00:46:33,000 --> 00:46:37,000 Gera, ir dabar eiti į priekį ir perkelti atitinkamą kairę ranką, nukreipta į Ramon. 829 00:46:37,000 --> 00:46:39,000 Tai jaučiasi šiek tiek nereikalingas. 830 00:46:39,000 --> 00:46:41,000 Dabar yra du žmonės, rodančių, Ramon, bet tai gerai 831 00:46:41,000 --> 00:46:43,000 nes dabar kaip kitaip mes atnaujinti šį sąrašą? 832 00:46:43,000 --> 00:46:48,000 Kas kita vertus, turi judėti? 833 00:46:48,000 --> 00:46:53,000 Puikus, dabar mes prarado atmintį? 834 00:46:53,000 --> 00:46:57,000 Ne, taip gerai, galime pamatyti, jei mes galime padalyti dar kartą. 835 00:46:57,000 --> 00:47:00,000 >> Paskutinį kartą, Mallocing numeris 5. 836 00:47:00,000 --> 00:47:04,000 Visi atgal būdas, nagi žemyn. 837 00:47:04,000 --> 00:47:08,000 Tai labai įdomi. 838 00:47:08,000 --> 00:47:15,000 [Plojimai] 839 00:47:15,000 --> 00:47:17,000 Koks tavo vardas? >> Ron. 840 00:47:17,000 --> 00:47:19,000 Ron, gerai, jūs malloced kaip 5 numeriu. 841 00:47:19,000 --> 00:47:23,000 Mes ką tik įvykdytas kodą, kuris beveik identiškas šių 842 00:47:23,000 --> 00:47:26,000 tik kitu pavadinimu. 843 00:47:26,000 --> 00:47:28,000 Puikus. 844 00:47:28,000 --> 00:47:38,000 Dabar Anita, geros kloties, įterpiant į sąrašą 5. 845 00:47:38,000 --> 00:47:43,000 Geras, ir? 846 00:47:43,000 --> 00:47:47,000 Puikus, todėl tai yra tikrai trečiasis iš trijų visų susirgimų. 847 00:47:47,000 --> 00:47:49,000 Mes pirmą kartą buvo kažkas pabaigoje, Rebecca. 848 00:47:49,000 --> 00:47:51,000 Mes tada buvo kažkas per vidurį. 849 00:47:51,000 --> 00:47:53,000 Dabar mes turime ką nors pradžioje, ir šiame pavyzdyje, 850 00:47:53,000 --> 00:47:56,000 dabar mes pirmą kartą teko atnaujinti Lucas 851 00:47:56,000 --> 00:48:00,000 nes pirmasis elementas sąraše dabar turi atkreipti naujas mazgas, 852 00:48:00,000 --> 00:48:03,000 kurie, savo ruožtu, yra nukreipta mazgo numeris 9. 853 00:48:03,000 --> 00:48:06,000 >> Tai buvo labai nepatogu demonstravimas, aš tikiu, 854 00:48:06,000 --> 00:48:08,000 todėl didelis audringi plojimai šie vaikinai, jei galėtumėte. 855 00:48:08,000 --> 00:48:11,000 Gražiai padaryta. 856 00:48:11,000 --> 00:48:17,000 Štai ir viskas. Galite palikti popieriaus lapų, šiek tiek atminties. 857 00:48:17,000 --> 00:48:22,000 Pasirodo, kad tai daryti kodas 858 00:48:22,000 --> 00:48:26,000 yra ne visai taip paprasta, kaip tiesiog perkelti rankas aplink 859 00:48:26,000 --> 00:48:28,000 ir rodo, patarimų įvairių dalykų. 860 00:48:28,000 --> 00:48:31,000 Bet suprantame, kad kai jis ateina laikas įgyvendinti kažką panašaus 861 00:48:31,000 --> 00:48:34,000 susijęs sąrašas ar jo variantas, jei jums sutelkti dėmesį į tikrai 862 00:48:34,000 --> 00:48:38,000 šie pagrindiniai pagrindai, kąsnio dydžio problemos, turiu išsiaiškinti, 863 00:48:38,000 --> 00:48:43,000 tai ranka ar tai ranka, reikia suprasti, kad tai, kas kitaip gana sudėtinga programa 864 00:48:43,000 --> 00:48:47,000 , iš tiesų, gali būti sumažintas iki gana paprastų statybinių blokų, kaip šis. 865 00:48:47,000 --> 00:48:51,000 >> Paimkime dalykų sudėtingesnių kryptimi. 866 00:48:51,000 --> 00:48:53,000 Dabar mes turime iš susietų sąrašo sąvoka. 867 00:48:53,000 --> 00:48:57,000 Mes taip pat turime dėl šio pasiūlymo atgal yra dvigubai susijęs sąrašas, 868 00:48:57,000 --> 00:49:01,000 , kuris atrodo beveik tas pats, bet dabar mes turime dvi rodykles viduje struct 869 00:49:01,000 --> 00:49:05,000 vietoj vieno, ir mes turbūt galėtų skambinti tos rodykles ankstesniojo ir kito 870 00:49:05,000 --> 00:49:08,000 arba į kairę arba į dešinę, bet mes, tiesą sakant, reikia du iš jų. 871 00:49:08,000 --> 00:49:10,000 Kodas būtų šiek tiek aktyviau dalyvauti. 872 00:49:10,000 --> 00:49:12,000 Anita būtų turėjusi daugiau dirbti čia ant scenos. 873 00:49:12,000 --> 00:49:15,000 Bet mes tikrai galėtų įgyvendinti tokios struktūros. 874 00:49:15,000 --> 00:49:19,000 Važiavimo laikas, nors, kas būtų važiavimo laikas 875 00:49:19,000 --> 00:49:24,000 Anita rasti skaičiaus n susietos sąraše dabar? 876 00:49:24,000 --> 00:49:27,000 Vis dar didelis O n, todėl ne geriau ne linijinis paieška. 877 00:49:27,000 --> 00:49:29,000 Mes negalime daryti Dvejetainė paieška, nors vėl. 878 00:49:29,000 --> 00:49:34,000 Kodėl, kad byla? Jūs negalite šokinėti. 879 00:49:34,000 --> 00:49:36,000 , Nors mes akivaizdžiai pamatyti visas scenoje žmones, 880 00:49:36,000 --> 00:49:39,000 ir Anita galėjo eyeballed jį ir tarė: "Čia yra sąrašo viduryje" 881 00:49:39,000 --> 00:49:42,000 ji negalėjo žinoti, kad, jei ji buvo kompiuterinė programa 882 00:49:42,000 --> 00:49:47,000 nes vienintelis dalykas, ji turėjo sklende scenarijaus pradžioje 883 00:49:47,000 --> 00:49:50,000 Lucas, kuris buvo pirmasis žymeklis. 884 00:49:50,000 --> 00:49:53,000 Ji būtinai turi sekti tuos ryšius, 885 00:49:53,000 --> 00:49:56,000 skaičiuojant savo kelią, kol ji rado maždaug viduryje, 886 00:49:56,000 --> 00:49:58,000 ir net tada, ji nesiruošia žinoti, kai ji pasiekė vidurį 887 00:49:58,000 --> 00:50:01,000 nebent ji eina visą kelią iki galo išsiaiškinti, kiek yra, 888 00:50:01,000 --> 00:50:05,000 backtracks, ir kad taip pat būtų sunku, nebent jūs turėjote 889 00:50:05,000 --> 00:50:07,000 dvigubai susijęs sąrašas tam tikros rūšies. 890 00:50:07,000 --> 00:50:10,000 >> Tam tikrų problemų sprendimas šiandien, bet įvedant kitus. 891 00:50:10,000 --> 00:50:12,000 Ką apskritai apie skirtingas duomenų struktūros? 892 00:50:12,000 --> 00:50:15,000 Tai Mather House padėklai nuotrauka, 893 00:50:15,000 --> 00:50:19,000 ir šiuo atveju, mes turime duomenų struktūrą, mes taip pat rūšies jau kalbėti apie. 894 00:50:19,000 --> 00:50:22,000 Mes kalbėjome apie kamino atminties, 895 00:50:22,000 --> 00:50:26,000 ir tai tarsi sąmoningai pavadintas, nes kamino atminties 896 00:50:26,000 --> 00:50:31,000 iš esmės yra duomenų struktūra, kad yra vis daugiau ir daugiau dalykų Sluoksniuotas ant jo. 897 00:50:31,000 --> 00:50:35,000 Bet įdomus dalykas, apie kamino, kaip yra šiuo atveju, iš tikrųjų, 898 00:50:35,000 --> 00:50:38,000 yra tai, kad specialios rūšies duomenų struktūros. 899 00:50:38,000 --> 00:50:42,000 Tai duomenų struktūra, pagal kurią pirmasis elementas 900 00:50:42,000 --> 00:50:46,000 yra paskutinis elementas. 901 00:50:46,000 --> 00:50:50,000 Jei esate pirmasis dėklas turi būti įdėti į steką, 902 00:50:50,000 --> 00:50:53,000 jūs ketinate būti deja paskutinis dėklas būti išbraukti iš kamino, 903 00:50:53,000 --> 00:50:55,000 ir tai nebūtinai yra geras dalykas. 904 00:50:55,000 --> 00:50:58,000 Priešingai, jūs galite galvoti apie tai, atvirkščiai, 905 00:50:58,000 --> 00:51:02,000 paskutinis yra pirmas išėjo ". 906 00:51:02,000 --> 00:51:05,000 >> Dabar visi scenarijai ateiti į galvą, kai kamino 907 00:51:05,000 --> 00:51:08,000 duomenų struktūra, kur jūs turite, kad nuosavybė 908 00:51:08,000 --> 00:51:13,000 in, first out, iš tikrųjų yra įtikinamų? 909 00:51:13,000 --> 00:51:16,000 Yra tai, kad geras dalykas? Yra tai, kad yra blogas dalykas? 910 00:51:16,000 --> 00:51:19,000 Tai tikrai blogas dalykas, jei padėklai buvo ne visi identiški 911 00:51:19,000 --> 00:51:21,000 ir jie buvo visi specializuota įvairių spalvų arba Papuošalą, 912 00:51:21,000 --> 00:51:24,000 ir norimą spalvą visi apačioje būdas. 913 00:51:24,000 --> 00:51:26,000 Žinoma, jūs negalite gauti, kad be didelių pastangų. 914 00:51:26,000 --> 00:51:28,000 Jūs turite pradėti iš viršaus ir dirbti savo kelią žemyn. 915 00:51:28,000 --> 00:51:31,000 Be to, ką daryti, jei jums buvo viena iš šių ventiliatoriaus berniukai 916 00:51:31,000 --> 00:51:34,000 kas laukia visą naktį bando gauti "iPhone" ir linijų iki 917 00:51:34,000 --> 00:51:36,000 vietoje, kaip ši? 918 00:51:36,000 --> 00:51:40,000 Ar nebūtų puiku, jei "Apple" parduotuvė 919 00:51:40,000 --> 00:51:42,000 kamino duomenų struktūra? 920 00:51:42,000 --> 00:51:44,000 Yay? Dargi? 921 00:51:44,000 --> 00:51:47,000 Tai tik tiems žmonėms, kurie rodo iki paskutiniu minutę 922 00:51:47,000 --> 00:51:50,000 ir tada gauti nupešti eilę. 923 00:51:50,000 --> 00:51:52,000 Ir iš tiesų, tai, kad aš taip linkę pasakyti eilę 924 00:51:52,000 --> 00:51:56,000 iš tiesų yra suderinamas su tuo, ką mes vadiname šios rūšies duomenų struktūros, 925 00:51:56,000 --> 00:51:59,000 vienas iš tikrųjų, kai užsakymas yra svarbu, 926 00:51:59,000 --> 00:52:02,000 , ir jūs norite, kad pirmasis turi būti pirmasis 927 00:52:02,000 --> 00:52:04,000 jei tik Žmogiškojo teisingumo labui. 928 00:52:04,000 --> 00:52:07,000 Mes paprastai vadiname eilė duomenų struktūra. 929 00:52:07,000 --> 00:52:11,000 >> Pasirodo, be susijusių su sąrašų, mes galime pradėti naudoti tas pačias pagrindines idėjas 930 00:52:11,000 --> 00:52:15,000 ir pradėti kurti naujų ir skirtingų tipų sprendimų problemų. 931 00:52:15,000 --> 00:52:19,000 Pavyzdžiui, kamino, mes galime atstovauti kamino 932 00:52:19,000 --> 00:52:22,000 naudojant duomenų struktūrą, kaip tai, aš norėčiau pasiūlyti. 933 00:52:22,000 --> 00:52:26,000 Šiuo atveju, aš paskelbė struct, ir aš sakė šios struktūros viduje 934 00:52:26,000 --> 00:52:30,000 yra skaičių masyvas ir tada kintamasis vadinamas dydis, 935 00:52:30,000 --> 00:52:33,000 ir aš einu skambinti šis dalykas kamino. 936 00:52:33,000 --> 00:52:35,000 Dabar kodėl tai faktiškai dirba? 937 00:52:35,000 --> 00:52:43,000 Kamino, galėčiau daryti tai veiksmingai kaip masyvo ekrane. 938 00:52:43,000 --> 00:52:47,000 Čia yra mano kamino. Tie, kurie mano numeriai. 939 00:52:47,000 --> 00:52:50,000 Ir mes parengti juos, nes tai, tai, tai, tai, tai. 940 00:52:50,000 --> 00:52:53,000 Ir tada aš turiu kai kurių kitų duomenų narys čia 941 00:52:53,000 --> 00:52:58,000 kuris yra vadinamas dydis, todėl tai yra dydis, ir tai yra numeriai, 942 00:52:58,000 --> 00:53:02,000 ir kolektyviai, čia visa iPad atstovauja vieną kamino struktūrą. 943 00:53:02,000 --> 00:53:07,000 Dabar, pagal nutylėjimą, dydis, manoma, turite būti inicializuoti iki 0, 944 00:53:07,000 --> 00:53:11,000 ir tai, kas viduje skaičių masyvas iš pradžių 945 00:53:11,000 --> 00:53:14,000 kai aš pirmą kartą skirti masyvą? 946 00:53:14,000 --> 00:53:16,000 Šiukšlių. Kas žino? Ir tai iš tikrųjų nėra svarbu. 947 00:53:16,000 --> 00:53:20,000 Nesvarbu, jei tai yra 1, 2, 3, 4, 5, visiškai atsitiktinai 948 00:53:20,000 --> 00:53:25,000 nedalia saugomi mano struktūros, nes taip ilgai, kaip aš žinau, kad kamino dydis 949 00:53:25,000 --> 00:53:29,000 yra 0, tada aš žinau, programiškai, ne pažvelgti į bet kurį iš masyve elementų. 950 00:53:29,000 --> 00:53:31,000 Nesvarbu, kas ten. 951 00:53:31,000 --> 00:53:34,000 Nežiūrėkite į juos, kaip būtų nuo 0 dydžio potekstė. 952 00:53:34,000 --> 00:53:38,000 >> Tačiau tarkime, dabar aš eiti į priekį ir įrašyti kažką į kaminą. 953 00:53:38,000 --> 00:53:42,000 Noriu įrašyti skaičius 5, todėl aš įdėti skaičius 5, 954 00:53:42,000 --> 00:53:45,000 ir kas tada aš pribaigti? 955 00:53:45,000 --> 00:53:48,000 Dabar aš iš tikrųjų pribaigti 1 dydžio, 956 00:53:48,000 --> 00:53:50,000 o dabar krūva yra 1 dydžio. 957 00:53:50,000 --> 00:53:53,000 Ką daryti, jei aš einu į priekį ir įterpti skaičių, galime pasakyti, 7 Toliau? 958 00:53:53,000 --> 00:53:57,000 Tai tada bus atnaujintas iki 2, ir tada mes padarysime 9, 959 00:53:57,000 --> 00:54:02,000 ir tada tai bus atnaujintas iki 3. 960 00:54:02,000 --> 00:54:05,000 Bet įdomi funkcija šio kamino yra tai, kad 961 00:54:05,000 --> 00:54:09,000 Aš turėjo pašalinti, kuris elementas, jei aš noriu, kad pop 962 00:54:09,000 --> 00:54:12,000 ką nors ne iš kamino, taip kalbėti? 963 00:54:12,000 --> 00:54:14,000 9 būtų pirmas dalykas, kurį eiti. 964 00:54:14,000 --> 00:54:18,000 Kaip turėtų paveikslėlį pakeisti, jei noriu, kad pop-off kamino elementas, 965 00:54:18,000 --> 00:54:20,000 panašiai kaip dėklą Mather? 966 00:54:20,000 --> 00:54:22,000 Taip. >> [Studentų] Įrenginio dydis 2. 967 00:54:22,000 --> 00:54:27,000 Tiksliai, aš nustatyto dydžio 2, ir ką man daryti su masyvo? 968 00:54:27,000 --> 00:54:29,000 Aš neturiu nieko daryti. 969 00:54:29,000 --> 00:54:32,000 Galėjau, tiesiog, kad būtų analinis, 0 Nėra įdėti ar -1 ar kažką, rodanti 970 00:54:32,000 --> 00:54:34,000 , kad tai yra ne teisėtas, bet nesvarbu, nes 971 00:54:34,000 --> 00:54:37,000 Galiu užrašyti už masyvo, kiek laiko ji 972 00:54:37,000 --> 00:54:41,000 todėl, kad aš žinau, tik pažvelgti į pirmuosius du šio masyvo elementų. 973 00:54:41,000 --> 00:54:47,000 Dabar, jei aš einu skaičiumi 8, ir pridėti šio masyvo, kaip vaizdas keičia kitą? 974 00:54:47,000 --> 00:54:50,000 Tai tampa 8, ir tai tampa 3. 975 00:54:50,000 --> 00:54:52,000 Aš pjovimo kelis kampus. 976 00:54:52,000 --> 00:54:56,000 Dabar mes turime 5, 7, 8, ir mes grįžome į 3 dydžio. 977 00:54:56,000 --> 00:54:58,000 Tai gana paprasta įgyvendinti, 978 00:54:58,000 --> 00:55:06,000 bet kai mes ketiname apgailestauju sprendimą šio projekto? 979 00:55:06,000 --> 00:55:09,000 Kada viskas pradeda eiti labai, labai negerai? Taip. 980 00:55:09,000 --> 00:55:11,000 [Nesigirdi studentas atsakas] 981 00:55:11,000 --> 00:55:13,000 , Kai norite grįžti ir gauti pirmąjį elementą jūs įtraukėte in 982 00:55:13,000 --> 00:55:18,000 >> It turns out, nors krūva yra po gaubtu masyvas, 983 00:55:18,000 --> 00:55:21,000 Mes pradėjome kalbėti apie šių duomenų struktūros taip pat paprastai žinomas kaip 984 00:55:21,000 --> 00:55:25,000 Abstraktus duomenų struktūros, pagal kurią, kaip jie įgyvendinami 985 00:55:25,000 --> 00:55:27,000 yra visiškai be taško. 986 00:55:27,000 --> 00:55:31,000 Duomenų struktūra, kaip kamino Manoma, kad įtraukti paramą 987 00:55:31,000 --> 00:55:35,000 operacijos, pavyzdžiui, stumti, kuris verčia padėklą ant kamino, 988 00:55:35,000 --> 00:55:39,000 ir pop, kuris pašalina elementą iš kamino, ir viskas. 989 00:55:39,000 --> 00:55:43,000 Jei buvo atsisiųsti kažkieno kodą, kuris jau įgyvendinta 990 00:55:43,000 --> 00:55:46,000 šis dalykas, vadinamas kamino, kad asmuo būtų parašyta 991 00:55:46,000 --> 00:55:49,000 tik dvi funkcijos jums stumti ir pop, kurio vienintelis gyvenimo tikslas 992 00:55:49,000 --> 00:55:51,000 būtų daryti būtent tai. 993 00:55:51,000 --> 00:55:54,000 Jūs arba jam ar jai, kurie įgyvendino šią programą 994 00:55:54,000 --> 00:55:58,000 būtų buvę visiškai vienas nuspręsti, kaip įgyvendinti 995 00:55:58,000 --> 00:56:00,000 po gaubtu stumti ir Popping semantika 996 00:56:00,000 --> 00:56:03,000 arba stumti ir Popping funkcijos. 997 00:56:03,000 --> 00:56:07,000 Ir aš čia šiek tiek trumparegis sprendimą 998 00:56:07,000 --> 00:56:10,000 mano krūvą su šia paprasta duomenų struktūra, kodėl? 999 00:56:10,000 --> 00:56:12,000 Kada šio duomenų struktūros pertraukos? 1000 00:56:12,000 --> 00:56:18,000 , Ką turiu grąžina klaidos, kai vartotojas skambina stumti, pavyzdžiui? 1001 00:56:18,000 --> 00:56:20,000 [Studentų] Jei nėra daugiau vietos. 1002 00:56:20,000 --> 00:56:23,000 Tiksliai, jei yra ne daugiau vietos, jei aš viršijo pajėgumus, 1003 00:56:23,000 --> 00:56:27,000 yra visi dangteliai, nes ji rodo, kad tai kažkoks pasaulio konstantos. 1004 00:56:27,000 --> 00:56:30,000 Na, tada aš tik ketina turėti pasakyti: "Atsiprašau, aš negaliu stumti kitą vertę 1005 00:56:30,000 --> 00:56:32,000 ant kamino, "panašiai kaip Mather. 1006 00:56:32,000 --> 00:56:36,000 >> Tam tikru momentu, jie ketina hit viršutinę dalį, kad šiek tiek spintoje. 1007 00:56:36,000 --> 00:56:39,000 Daugiau nebėra vietos ar pajėgumus įrenginyje, kuriame taškas yra keletas klaidų rūšies. 1008 00:56:39,000 --> 00:56:42,000 Jie turi įdėti elementą kažkur kitur, dėklas kažkur kitur, 1009 00:56:42,000 --> 00:56:44,000 ar niekur ne visi. 1010 00:56:44,000 --> 00:56:47,000 Dabar, kai eilėje, mes galime įgyvendinti jai šiek tiek kitaip. 1011 00:56:47,000 --> 00:56:50,000 Eilė yra šiek tiek kitoks, kad po gaubtu, ji galėtų būti įgyvendinta 1012 00:56:50,000 --> 00:56:54,000 masyvo, bet kodėl, šiuo atveju, aš siūlo 1013 00:56:54,000 --> 00:56:59,000 taip pat galvos dalis, sudaranti sąrašo galvą, 1014 00:56:59,000 --> 00:57:06,000 sąrašo priekyje, pirmasis asmuo, atsižvelgiant į Apple Store, be dydžiui? 1015 00:57:06,000 --> 00:57:14,000 Kodėl aš turiu papildomų duomenų gabalas čia? 1016 00:57:14,000 --> 00:57:16,000 Prisiminkite ką numerius 1017 00:57:16,000 --> 00:57:18,000 jei aš paruošiau taip. 1018 00:57:18,000 --> 00:57:21,000 Tarkime, tai dabar vietoj kamino eilė, 1019 00:57:21,000 --> 00:57:24,000 yra kaip ir "Apple" parduotuvėje eilėje skirtumas yra teisinga. 1020 00:57:24,000 --> 00:57:27,000 Pirmasis asmuo eilėje prie sąrašo pradžioje, šiuo atveju 5 numeris, 1021 00:57:27,000 --> 00:57:30,000 jis ar ji bus tegul į parduotuvę. 1022 00:57:30,000 --> 00:57:32,000 Darykime, kad. 1023 00:57:32,000 --> 00:57:35,000 Tarkime, kad tai yra mano eilėje valstybės šiuo metu laiku, o dabar "Apple" parduotuvė 1024 00:57:35,000 --> 00:57:39,000 atidaro ir pirmasis asmuo, numeris 5, vadovauja į parduotuvę. 1025 00:57:39,000 --> 00:57:43,000 Kaip aš galiu pasikeisti paveikslėlį, dabar, kad aš įtraukiami į eilę ir joje pirmojo asmens- 1026 00:57:43,000 --> 00:57:47,000 priekinės linijos? 1027 00:57:47,000 --> 00:57:50,000 Kas tai? >> [Studentų] Keisti eilę. 1028 00:57:50,000 --> 00:57:52,000 Keisti galvą, todėl 5 dingsta. 1029 00:57:52,000 --> 00:57:56,000 Iš tikrųjų, tai kaip nors, kaip geriausiai tai padaryti? 1030 00:57:56,000 --> 00:58:00,000 Iš tikrųjų, tai, taip, lyg šis vaikinas dingsta. 1031 00:58:00,000 --> 00:58:03,000 Ką numeris 7 faktinė parduotuvėje? 1032 00:58:03,000 --> 00:58:05,000 Jie būtų didelis žingsnis į priekį. 1033 00:58:05,000 --> 00:58:08,000 >> Bet tai, ką mes vertiname, kai jis ateina į masyvų 1034 00:58:08,000 --> 00:58:10,000 ir perkelti dalykų aplink? 1035 00:58:10,000 --> 00:58:12,000 Tai tipo savo laiko švaistymas, tiesa? 1036 00:58:12,000 --> 00:58:16,000 Kodėl jūs turite būti, analinis, kad pirmasis asmuo 1037 00:58:16,000 --> 00:58:21,000 į eilutės pradžią, ne fiziškai, atminties riekė pradžios? 1038 00:58:21,000 --> 00:58:23,000 Tai visiškai nereikalingas. Kodėl? 1039 00:58:23,000 --> 00:58:26,000 Ką galėčiau tiesiog prisiminti vietoj? >> [Nesigirdi studentas atsakas] 1040 00:58:26,000 --> 00:58:30,000 Tiksliai, galėčiau tiesiog prisiminti šią papildomą duomenimis, valstybės galvos 1041 00:58:30,000 --> 00:58:34,000 kad dabar sąraše galva nebėra 0, kuris prieš tai buvo momentas. 1042 00:58:34,000 --> 00:58:39,000 Dabar tai tikrai numeris 1. Tokiu būdu, man šiek tiek optimizavimas. 1043 00:58:39,000 --> 00:58:44,000 Tik todėl, kad aš-į eilę ir joje ką nors iš linijos į eilutės pradžią Apple Store 1044 00:58:44,000 --> 00:58:47,000 nereiškia, kad kiekvienas turi pereiti, išėmimas iš apyvartos yra tiesinė operacija. 1045 00:58:47,000 --> 00:58:50,000 Galiu vietoj nuolatinio laiko praleisti tik 1046 00:58:50,000 --> 00:58:53,000 ir pasiekti daug greičiau reaguoti. 1047 00:58:53,000 --> 00:58:56,000 Bet kaina, aš mokėti yra tai, ką gauti, kad papildomos efektyvumą 1048 00:58:56,000 --> 00:58:58,000 ir nereikia perkelti visus? 1049 00:58:58,000 --> 00:59:01,000 Taip. >> [Nesigirdi studentas atsakas] 1050 00:59:01,000 --> 00:59:04,000 Galite pridėti daugiau žmonių, gerai, kad problema yra statmenos 1051 00:59:04,000 --> 00:59:07,000 į tai, kad mes ne perjungimo žmonių visame. 1052 00:59:07,000 --> 00:59:11,000 Jis vis dar yra masyvas, ar ne mes pereiti visus ar ne 1053 00:59:11,000 --> 00:59:13,000 oh, aš matau, ką tu kalbi, gerai. 1054 00:59:13,000 --> 00:59:16,000 Tiesą sakant, aš sutinku su tuo, ką jūs sakote, kad tai beveik kaip nors 1055 00:59:16,000 --> 00:59:19,000 mes dabar niekada naudoti šio masyvo pradžios nebėra 1056 00:59:19,000 --> 00:59:22,000 nes jei aš pašalinti 5, tada aš pašalinti 7. 1057 00:59:22,000 --> 00:59:24,000 Bet aš tik įdėti žmonių į dešinę. 1058 00:59:24,000 --> 00:59:28,000 >> Jis jaučiasi kaip aš taupiai, ir galiausiai mano eilė išsigimsta į visai nieko, 1059 00:59:28,000 --> 00:59:31,000 , kad galėtume tiesiog žmonės vaikjuostės 1060 00:59:31,000 --> 00:59:35,000 ir mes galime galvoti apie šiame masyve tikrai kažkokio apskrito struktūra, 1061 00:59:35,000 --> 00:59:38,000 bet mes naudojame, kas operatorių C padaryti, kad vaikjuostės rūšiuoti? 1062 00:59:38,000 --> 00:59:40,000 [Nesigirdi studentas atsakas] >> modulį operatorius. 1063 00:59:40,000 --> 00:59:43,000 Būtų šiek tiek erzina, apgalvoti, kaip jūs darote vaikjuostės, 1064 00:59:43,000 --> 00:59:46,000 , tačiau mes galime tai padaryti, ir mes galime pradėti išleisti žmones tuo, kas anksčiau buvo priekinės linijos, 1065 00:59:46,000 --> 00:59:52,000 bet mes tiesiog prisiminti su šio galvos kintamojo, kuris tikrasis vadovas linijos iš tikrųjų yra. 1066 00:59:52,000 --> 00:59:57,000 Ką daryti, jei, vietoj to, galiausiai mūsų tikslas, nors, 1067 00:59:57,000 --> 01:00:00,000 ieškoti numerius, kaip mes čia ant scenos su Anita, 1068 01:00:00,000 --> 01:00:02,000 bet mes tikrai norime, kad visų šių pasaulių geriausias? 1069 01:00:02,000 --> 01:00:05,000 Mes norime daugiau rafinuotumo kaip masyvas leidžia 1070 01:00:05,000 --> 01:00:09,000 nes mes norime, kad gebėjimas dinamiškai augti duomenų struktūrą. 1071 01:00:09,000 --> 01:00:12,000 Bet mes nenorime, kad turi kažką, kad jau minėta, 1072 01:00:12,000 --> 01:00:15,000 į pirmąją paskaitą nebuvo optimalus algoritmas, 1073 01:00:15,000 --> 01:00:17,000 kad tiesinio paieška. 1074 01:00:17,000 --> 01:00:21,000 It turns out, kad jūs galite iš tikrųjų, pasiekti 1075 01:00:21,000 --> 01:00:24,000 arba bent jau arti nuolat laiko, kuriuo kažkas panašaus Anita, 1076 01:00:24,000 --> 01:00:27,000 jei ji konfigūruoja savo duomenų struktūrą negali būti susieta sąrašas 1077 01:00:27,000 --> 01:00:30,000 negali būti kamino, negali būti eilė, galėtų, iš tiesų, 1078 01:00:30,000 --> 01:00:33,000 sugalvoti su duomenų struktūrą, kuri leidžia jai ieškoti dalykų, 1079 01:00:33,000 --> 01:00:37,000 net žodžiai, o ne tik skaičiai, ką mes vadiname pastovų laiko. 1080 01:00:37,000 --> 01:00:40,000 >> Ir iš tikrųjų, kalbant apie ateitį, vienas iš šios klasės psets beveik visada 1081 01:00:40,000 --> 01:00:43,000 iš spellchecker įgyvendinimas, kuriuo 1082 01:00:43,000 --> 01:00:46,000 mes suteikiame Jums dar keletą 150.000 angliškų žodžių ir tikslas yra 1083 01:00:46,000 --> 01:00:51,000 įkelti į atmintį ir greitai galės atsakyti į klausimus formos 1084 01:00:51,000 --> 01:00:54,000 yra parašyti teisingai šis žodis? 1085 01:00:54,000 --> 01:00:58,000 Ir tai būtų tikrai čiulpia, jei Jums teko pakartoti per visus 150.000 žodžių atsakyti, kad. 1086 01:00:58,000 --> 01:01:02,000 Bet, tiesą sakant, mes matome, kad galite tai padaryti labai, labai greitai laikas. 1087 01:01:02,000 --> 01:01:06,000 Ir tai vyksta įtraukti įgyvendinimo kažką, vadinamą maišos lentelė, 1088 01:01:06,000 --> 01:01:09,000 ir nors iš pirmo žvilgsnio šis dalykas, vadinamas maišos lentelė ketina 1089 01:01:09,000 --> 01:01:12,000 leiskite mums pasiekti šie Super Rapid reagavimo laikas, 1090 01:01:12,000 --> 01:01:18,000 paaiškėja, kad yra iš tikrųjų problema. 1091 01:01:18,000 --> 01:01:23,000 Kai ateina laikas įgyvendinti šią dalykas vadinamas-vėl, aš darau jį dar kartą. 1092 01:01:23,000 --> 01:01:25,000 Aš esu čia tik vienas. 1093 01:01:25,000 --> 01:01:28,000 Kai jis ateina laikas įgyvendinti tai, ką pavadino maišos lentelė 1094 01:01:28,000 --> 01:01:30,000 mes ketiname priimti sprendimą. 1095 01:01:30,000 --> 01:01:32,000 Kaip didelis turėtų tai, ką iš tikrųjų? 1096 01:01:32,000 --> 01:01:36,000 Ir kai mes pradedame nurodydami numerius į šią maišos lentelės, 1097 01:01:36,000 --> 01:01:38,000 kaip mes ketiname saugoti juos taip, 1098 01:01:38,000 --> 01:01:42,000 , kad mes galime gauti juos atgal taip greitai, kaip mes turime juos? 1099 01:01:42,000 --> 01:01:45,000 Bet mes pamatysime prieš ilgas, kad šis klausimas 1100 01:01:45,000 --> 01:01:48,000 kai kiekvienas gimtadienis yra klasės bus gana Priklauso. 1101 01:01:48,000 --> 01:01:51,000 Pasirodo, kad šiame kambaryje, mes turime kelis šimtus žmonių, 1102 01:01:51,000 --> 01:01:56,000 todėl tikimybė, kad du iš mūsų gimtadienis yra tikriausiai gana didelis. 1103 01:01:56,000 --> 01:01:58,000 Ką daryti, jei ten buvo tik 40 iš mūsų šiame kambaryje? 1104 01:01:58,000 --> 01:02:02,000 , Kas yra dviejų žmonių, turinčių tą patį gimtadienį šansai? 1105 01:02:02,000 --> 01:02:04,000 [Studentai] Daugiau nei 50%. 1106 01:02:04,000 --> 01:02:06,000 Taip, daugiau kaip 50%. Tiesą sakant, aš net davė diagramos. 1107 01:02:06,000 --> 01:02:08,000 Pasirodo, ir tai yra tikrai tik Slapta peržiūra 1108 01:02:08,000 --> 01:02:12,000 jei yra tik iš mūsų 58 šiame kambaryje, 2 tikimybė mus 1109 01:02:12,000 --> 01:02:16,000 turintys tą patį gimtadienį yra labai didelis, beveik 100%, 1110 01:02:16,000 --> 01:02:20,000 ir kad ketina sukelti mums skauda visa krūva trečiadienį. 1111 01:02:20,000 --> 01:02:24,000 >> Turint tai sakė, galime atidėti čia. Mes pamatysime trečiadienį. 1112 01:02:24,000 --> 01:02:28,000 [Plojimai] 1113 01:02:28,000 --> 01:02:30,000 [CS50.TV]