1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [6 skirsnis] [patogiau] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Harvardo universiteto] 3 00:00:04,000 --> 00:00:09,000 [Tai CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Mes galime galvą į mūsų skyriuje klausimų. 5 00:00:11,000 --> 00:00:17,000 Aš siunčiau URL erdvėje prieš. 6 00:00:17,000 --> 00:00:22,000 Klausimus skyriuje pradžia pasakyti 7 00:00:22,000 --> 00:00:26,000 matyt, aš nesu visiškai unsick yra labai paprastas klausimas 8 00:00:26,000 --> 00:00:28,000 tik tai, kas Valgrind? 9 00:00:28,000 --> 00:00:30,000 Ką Valgrind daryti? 10 00:00:30,000 --> 00:00:34,000 Kiekvienas nori pasakyti, ką Valgrind? 11 00:00:34,000 --> 00:00:36,000 [Studentų] Patikrinimai Atminties nutekėjimas. 12 00:00:36,000 --> 00:00:41,000 Taip, Valgrind bendras atminties tikrintuvas. 13 00:00:41,000 --> 00:00:44,000 , Galų gale, jis jums pasakys, jei turite Atminties nutekėjimas, 14 00:00:44,000 --> 00:00:49,000 , tai daugiausia, ką mes naudojame jį, nes jei norite 15 00:00:49,000 --> 00:00:54,000 padaryti problemą, arba, jei norite 16 00:00:54,000 --> 00:00:59,000 gauti didelis valdyboje, ką jums reikia turėti jokių Atminties nutekėjimas, 17 00:00:59,000 --> 00:01:01,000 ir jei turite Atminties nutekėjimas, kad jūs negalite rasti, 18 00:01:01,000 --> 00:01:04,000 Taip pat reikia nepamiršti, kad kai atidarote failą 19 00:01:04,000 --> 00:01:07,000 ir jei ne uždaryti, tai atminties nutekėjimas. 20 00:01:07,000 --> 00:01:10,000 >> Daug žmonių ieško kai mazge, kad jie ne išlaisvina 21 00:01:10,000 --> 00:01:15,000 kai iš tiesų jie nebuvo uždaryti žodyną labai pirmą žingsnį. 22 00:01:15,000 --> 00:01:19,000 Ji taip pat sako jums, jei turite kokių nors neteisingas skaito ar rašo 23 00:01:19,000 --> 00:01:22,000 tai reiškia, jei jūs bandote ir nustatyti vertę 24 00:01:22,000 --> 00:01:26,000 , kad ne krūvos pabaigoje ir tai neatsitinka seg kaltės 25 00:01:26,000 --> 00:01:30,000 bet Valgrind sugauti jį, kaip jūs iš tikrųjų neturėtų būti raštu yra, 26 00:01:30,000 --> 00:01:33,000 ir todėl jums tikrai turėtų neturėti bet iš tų, arba. 27 00:01:33,000 --> 00:01:38,000 Kaip jūs naudojate Valgrind? 28 00:01:38,000 --> 00:01:42,000 Kaip jūs naudojate Valgrind? 29 00:01:42,000 --> 00:01:45,000 >> Tai yra bendras klausimas 30 00:01:45,000 --> 00:01:49,000 rūšies paleiskite jį ir pažvelgti produkcijos. 31 00:01:49,000 --> 00:01:51,000 Produkcija yra didžioji daug kartų. 32 00:01:51,000 --> 00:01:54,000 Yra taip pat įdomus klaidų, kur, jei turite šiek tiek siaubingai blogai 33 00:01:54,000 --> 00:01:59,000 vyksta kilpa, tada ji bus galiausiai pasakyti ", būdas per daug klaidų. 34 00:01:59,000 --> 00:02:03,000 Aš ruošiuosi sustabdyti skaičiavimo dabar. " 35 00:02:03,000 --> 00:02:08,000 Tai iš esmės yra tekstinė produkcija, jūs turite išanalizuoti. 36 00:02:08,000 --> 00:02:13,000 , Galų gale, jis jums pasakys, jokių Atminties nutekėjimas, kad jūs turite, 37 00:02:13,000 --> 00:02:16,000 kaip daugelis blokai, kurie gali būti naudinga, nes 38 00:02:16,000 --> 00:02:20,000 jei tai vieno kvartalo unfreed, tada ji paprastai būtų lengviau rasti 39 00:02:20,000 --> 00:02:23,000 nei 1.000 blokai unfreed. 40 00:02:23,000 --> 00:02:26,000 1000 blokai unfreed tikriausiai reiškia, kad jūs ne išlaisvina 41 00:02:26,000 --> 00:02:30,000 Jūsų susiję sąrašai tinkamai ar kažką. 42 00:02:30,000 --> 00:02:32,000 Tai Valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Dabar mes turime skyrių klausimų, 44 00:02:35,000 --> 00:02:38,000 , kurie jums nereikia atsisiųsti. 45 00:02:38,000 --> 00:02:41,000 Jūs galite spustelėti ant mano vardo ir traukti juos erdvėje. 46 00:02:41,000 --> 00:02:44,000 Dabar paspauskite ant manęs. 47 00:02:44,000 --> 00:02:46,000 Peržiūra 1 bus kamino, kurį mes darote pirmiausia. 48 00:02:46,000 --> 00:02:55,000 2 redakcija bus eilėje, ir 3 redakcija bus atskirai susijęs sąrašas. 49 00:02:55,000 --> 00:02:58,000 Pradedant nuo mūsų kamino. 50 00:02:58,000 --> 00:03:02,000 Kaip ji sako, čia, kamino yra vienas iš pagrindinių, 51 00:03:02,000 --> 00:03:07,000 pagrindinės duomenų struktūros kompiuterių. 52 00:03:07,000 --> 00:03:11,000 Labai prototipu pavyzdys 53 00:03:11,000 --> 00:03:13,000 padėklai ir valgomajame kamino. 54 00:03:13,000 --> 00:03:16,000 Tai iš esmės, kai jūs diegiamos į kamino, 55 00:03:16,000 --> 00:03:20,000 kažkas vyksta pasakyti: "O, kaip padėklai kamino." 56 00:03:20,000 --> 00:03:22,000 Jūs sukrauti dėklus. 57 00:03:22,000 --> 00:03:24,000 Tada, kai jūs einate į traukite dėklą, 58 00:03:24,000 --> 00:03:31,000 , kad manimi vis ištrauktas pirmasis dėklas yra paskutinis, kuris buvo įtrauktas į kamino. 59 00:03:31,000 --> 00:03:34,000 Kamino taip pat, kaip ji sako, čia- 60 00:03:34,000 --> 00:03:37,000 mes turime atminties segmentą vadinamas kamino. 61 00:03:37,000 --> 00:03:40,000 Ir kodėl jis vadinamas kamino? 62 00:03:40,000 --> 00:03:42,000 >> Nes kaip kamino duomenų struktūros, 63 00:03:42,000 --> 00:03:46,000 verčia ir pasirodo ant kamino kamino rėmus, 64 00:03:46,000 --> 00:03:53,000 kur kamino rėmai yra kaip konkrečiu kvietimo funkcijos. 65 00:03:53,000 --> 00:03:57,000 Ir kaip kamino, jūs visada turite grąžinti 66 00:03:57,000 --> 00:04:03,000 skambinimo funkcijos prieš galite kibti į mažesnes kamino kadrų iš naujo. 67 00:04:03,000 --> 00:04:08,000 Jūs negalite turėti pagrindinį skambučių foo skambučio baras ir baras grįžti į Pagrindinis tiesiogiai. 68 00:04:08,000 --> 00:04:14,000 Jis visada turiu teisingą krūvą stumti ir Popping. 69 00:04:14,000 --> 00:04:18,000 Abi operacijos, kaip sakiau, yra push ir pop. 70 00:04:18,000 --> 00:04:20,000 Tai yra universalūs terminai. 71 00:04:20,000 --> 00:04:26,000 Turėtumėte žinoti, push ir pop kaminai, nesvarbu koks. 72 00:04:26,000 --> 00:04:28,000 Mes pamatysime, eiles rūšies skiriasi. 73 00:04:28,000 --> 00:04:32,000 Jis nėra iš tikrųjų yra universalus terminas, bet push ir pop yra universalus kaminai. 74 00:04:32,000 --> 00:04:34,000 Push yra tiesiog įdėti į steką. 75 00:04:34,000 --> 00:04:37,000 Pop kilimo kamino. 76 00:04:37,000 --> 00:04:43,000 Ir mes matome čia mes turime Typedef struct kamino, 77 00:04:43,000 --> 00:04:46,000 todėl mes turime char ** eilutes. 78 00:04:46,000 --> 00:04:51,000 Negalima nusigąsti bet **. 79 00:04:51,000 --> 00:04:54,000 Tai va, galų gale yra eilučių masyvas 80 00:04:54,000 --> 00:04:58,000 ar patarimų masyvas simbolių, kur 81 00:04:58,000 --> 00:05:00,000 rodykles į simbolių linkę būti stygos. 82 00:05:00,000 --> 00:05:05,000 Ji neturi būti stygos, bet čia jie ketina būti stygos. 83 00:05:05,000 --> 00:05:08,000 >> Mes turime eilučių masyvą. 84 00:05:08,000 --> 00:05:14,000 Mes turime dydį, kuris atstovauja, kiek elementai šiuo metu yra kamino, 85 00:05:14,000 --> 00:05:19,000 ir tada mes turime gebėjimus, kurie yra kiek elementai gali būti ant kamino. 86 00:05:19,000 --> 00:05:22,000 Galią reikėtų pradėti, kaip kažkas, didesnis nei 1, 87 00:05:22,000 --> 00:05:27,000 bet dydis ketina pradėti nuo 0. 88 00:05:27,000 --> 00:05:36,000 Dabar, iš esmės yra trys būdai, galite galvoti apie kamino. 89 00:05:36,000 --> 00:05:39,000 Na, yra tikriausiai daugiau, bet yra du pagrindiniai būdai 90 00:05:39,000 --> 00:05:43,000 galima įgyvendinti naudojant masyvą, arba galite ją įgyvendinti naudojant susietą sąrašą. 91 00:05:43,000 --> 00:05:48,000 Susietos sąrašai rūšies trivialus, kad kaminai. 92 00:05:48,000 --> 00:05:51,000 Tai labai lengva padaryti kamino susietų sąrašus, 93 00:05:51,000 --> 00:05:55,000 todėl čia mes ketiname padaryti kamino naudojant masyvų, 94 00:05:55,000 --> 00:05:59,000 ir tada naudojant masyvų, yra du būdai, galite galvoti apie tai. 95 00:05:59,000 --> 00:06:01,000 Anksčiau, kai aš sakiau, mes turime kamino pajėgumus, 96 00:06:01,000 --> 00:06:04,000 todėl gali tilpti ant kamino elementas. 97 00:06:04,000 --> 00:06:09,000 >> Vienas iš būdų tai gali įvykti, kai paspausite 10 elementus, tada jūs baigsite. 98 00:06:09,000 --> 00:06:13,000 Galbūt žinote, kad yra viršutinė riba 10 dalykų pasaulyje 99 00:06:13,000 --> 00:06:16,000 kad jūs niekada negali turėti daugiau kaip 10 dalykų apie savo kamino, 100 00:06:16,000 --> 00:06:20,000 tokiu atveju jūs galite turėti savo kamino dydžio viršutinė riba. 101 00:06:20,000 --> 00:06:23,000 Arba galite turėti savo kamino būti neribotą, 102 00:06:23,000 --> 00:06:27,000 tačiau, jei jūs darote masyvą, tai reiškia, kad kiekvieną kartą, kai paspausite 10 elementų, 103 00:06:27,000 --> 00:06:29,000 tada jūs ketinate turi išaugti iki 20 elementų, ir, kai paspausite 20 elementus, 104 00:06:29,000 --> 00:06:33,000 jūs ketinate turi augti savo 30 elementų arba 40 elementų masyvas. 105 00:06:33,000 --> 00:06:37,000 Jūs ketinate reikia didinti pajėgumus, o tai, ką mes ketiname daryti čia. 106 00:06:37,000 --> 00:06:40,000 Kiekvieną kartą, mes pasiekiame maksimalų dydį mūsų kamino, 107 00:06:40,000 --> 00:06:46,000 kai mes stumti kažką kita, mes ketiname reikia didinti pajėgumus. 108 00:06:46,000 --> 00:06:50,000 Čia mes turime stumti deklaruoti kaip Bool paspaudimu (char * str). 109 00:06:50,000 --> 00:06:54,000 Char * g yra eilutė, kad mes stumti ant kamino, 110 00:06:54,000 --> 00:06:58,000 ir bool tiesiog sako, ar mums pavyko ar nepavyko. 111 00:06:58,000 --> 00:07:00,000 >> Kaip mes galime žlugti? 112 00:07:00,000 --> 00:07:04,000 Kas yra vienintelė aplinkybė, kad galite galvoti apie 113 00:07:04,000 --> 00:07:07,000 kur mes būtume reikia grįžti klaidinga? 114 00:07:07,000 --> 00:07:09,000 Taip. 115 00:07:09,000 --> 00:07:12,000 [Studentų] Jei ji yra pilna ir mes naudojame apribotas įgyvendinimą. 116 00:07:12,000 --> 00:07:17,000 Taip, taip, kaip mes nustatyti Jis atsakė 117 00:07:17,000 --> 00:07:23,000 jei ji yra pilna ir mes naudojame apriboti įgyvendinimą. 118 00:07:23,000 --> 00:07:26,000 Tada mes būtinai grįžkite klaidinga. 119 00:07:26,000 --> 00:07:31,000 Kuo greičiau mes nukentėjo 10 dalykų masyve, mes negali tilpti 11, todėl mums gražins false. 120 00:07:31,000 --> 00:07:32,000 Ką daryti, jei jis yra neaiškus? Taip. 121 00:07:32,000 --> 00:07:38,000 Jei jūs negalite išplėsti dėl kokios nors priežasties masyvo. 122 00:07:38,000 --> 00:07:43,000 Taip, kad atmintis yra ribotas išteklius, 123 00:07:43,000 --> 00:07:51,000 ir, galiausiai, jei mes nuolat stumia daiktus ant kamino vėl ir vėl, 124 00:07:51,000 --> 00:07:54,000 mes ketiname išbandyti ir skirti didesnį masyvo, kad tilptų 125 00:07:54,000 --> 00:07:59,000 didesnės talpos, ir malloc ar kokia mes naudojame ketina gražins false. 126 00:07:59,000 --> 00:08:02,000 Na, malloc grąžina NULL. 127 00:08:02,000 --> 00:08:05,000 >> Atminkite, kad kiekvieną kartą jūs kada nors skambinti malloc, jums turėtų būti patikrinti, ar jis 128 00:08:05,000 --> 00:08:12,000 grąžina NULL ar kitur kad yra teisingumas atskaita. 129 00:08:12,000 --> 00:08:17,000 Kadangi mes norime turėti neribotos kamino, 130 00:08:17,000 --> 00:08:21,000 Vienintelis atvejis, mes ketiname grįžti klaidinga, jei mes bandome 131 00:08:21,000 --> 00:08:26,000 padidinti pajėgumus ir malloc arba bet False. 132 00:08:26,000 --> 00:08:30,000 Tada pop nesiima jokių argumentų, 133 00:08:30,000 --> 00:08:37,000 ir ji grąžina eilutę, kuri yra ant kamino viršuje. 134 00:08:37,000 --> 00:08:41,000 Nepriklausomai nuo neseniai buvo stumiama ant kamino, ką pop grįžta, 135 00:08:41,000 --> 00:08:44,000 ir ji taip pat pašalina jį iš kamino. 136 00:08:44,000 --> 00:08:50,000 Ir pastebėjo, kad ji grąžina NULL, jei nėra nieko, kas kamino. 137 00:08:50,000 --> 00:08:53,000 Tai visada įmanoma, kad lapų krūva yra tuščias. 138 00:08:53,000 --> 00:08:55,000 "Java", jei esate pripratę, kad arba kitomis kalbomis, 139 00:08:55,000 --> 00:09:01,000 bando, kad pop iš tuščio kaminą gali sukelti išimtį, ar kažką. 140 00:09:01,000 --> 00:09:09,000 >> Tačiau C, null tipo daug atvejų, kaip mes sprendžiame šias problemas. 141 00:09:09,000 --> 00:09:13,000 Grįžęs null, yra tai, kaip mes ketiname reiškia, kad kamino buvo tuščias. 142 00:09:13,000 --> 00:09:16,000 Mes pateikiame kodą, kuris bus išbandyti Jūsų žetonų funkcionalumą, 143 00:09:16,000 --> 00:09:19,000 įgyvendinti stumti ir pop. 144 00:09:19,000 --> 00:09:23,000 Tai nebus daug kodo. 145 00:09:23,000 --> 00:09:40,000 Aš iš tiesų tai, kol mes tai padaryti, užuomina, patarimas- 146 00:09:40,000 --> 00:09:44,000 jei jūs dar nematėte, malloc yra ne tik funkcija 147 00:09:44,000 --> 00:09:47,000 , kad suteikiama atmintį krūvą už jus. 148 00:09:47,000 --> 00:09:51,000 Yra šeimos ALLOC funkcijų. 149 00:09:51,000 --> 00:09:53,000 Pirmasis malloc, kuriuos esate pripratę. 150 00:09:53,000 --> 00:09:56,000 Tada ten calloc, kuris daro tą patį, ką malloc 151 00:09:56,000 --> 00:09:59,000 tačiau ji bus nulio viską už jus. 152 00:09:59,000 --> 00:10:04,000 Jeigu jūs kada nors norėjo nustatyti viską null po mallocing kažką 153 00:10:04,000 --> 00:10:06,000 jums turėtų būti tik naudojamas calloc į pirmąją vietą, o ne raštu 154 00:10:06,000 --> 00:10:09,000 kilpos nulio visą atminties blokas. 155 00:10:09,000 --> 00:10:15,000 >> Realloc kaip malloc ir turi daug ypatingais atvejais, 156 00:10:15,000 --> 00:10:19,000 bet iš esmės tai realloc nėra 157 00:10:19,000 --> 00:10:24,000 ji užima žymeklį, kad jau buvo skirta. 158 00:10:24,000 --> 00:10:27,000 Realloc yra funkcija, norite, kad atkreipti dėmesį į čia. 159 00:10:27,000 --> 00:10:31,000 Ji mano, kad jau grįžo iš malloc rodyklę. 160 00:10:31,000 --> 00:10:35,000 Tarkime, jūs reikalauti iš malloc žymiklį 10 baitų. 161 00:10:35,000 --> 00:10:38,000 Vėliau jūs suprasite, jūs norėjote 20 baitų, 162 00:10:38,000 --> 00:10:42,000 todėl jūs vadinate realloc tą rodyklė su 20 baitų, 163 00:10:42,000 --> 00:10:47,000 ir realloc bus automatiškai nukopijuoti per viską už jus. 164 00:10:47,000 --> 00:10:51,000 Jei tiesiog vadinamas malloc vėl, kaip aš turiu 10 baitų bloką. 165 00:10:51,000 --> 00:10:53,000 Dabar turiu 20 baitų bloką, 166 00:10:53,000 --> 00:10:58,000 , todėl, jei aš malloc 20 baitų, tada aš turiu rankiniu būdu nukopijuoti per 10 pirmas dalykas, baitus 167 00:10:58,000 --> 00:11:01,000 į antrąjį dalyką, ir tada pirmas dalykas. 168 00:11:01,000 --> 00:11:04,000 Realloc atliks už jus. 169 00:11:04,000 --> 00:11:11,000 >> Pranešimas parašas bus negaliojantis * 170 00:11:11,000 --> 00:11:15,000 kuris yra tik grąžinti žymiklį į atminties bloką, 171 00:11:15,000 --> 00:11:17,000 tada void * ptr. 172 00:11:17,000 --> 00:11:22,000 Jūs galite galvoti Lytinis * kaip bendrinis rodyklė. 173 00:11:22,000 --> 00:11:27,000 Apskritai, jūs niekada susidoroti su void *, 174 00:11:27,000 --> 00:11:30,000 bet malloc grąžinti void *, ir tada ji tiesiog naudojamas kaip 175 00:11:30,000 --> 00:11:34,000 tai tikrai bus char *. 176 00:11:34,000 --> 00:11:37,000 Ankstesnis void *, kad buvo grąžintos malloc 177 00:11:37,000 --> 00:11:41,000 dabar vyksta, turi būti perduota realloc ir tada dydis 178 00:11:41,000 --> 00:11:49,000 yra naujas baitų skaičius, kuriuos norite skirti, kad jūsų naujas pajėgumas. 179 00:11:49,000 --> 00:11:57,000 Aš duosiu jums keletą minučių, ir tai padaryti mūsų erdvės. 180 00:11:57,000 --> 00:12:02,000 Pradėti su redakcijos 1. 181 00:12:16,000 --> 00:12:21,000 Aš sustabdyti tave po to, kai, tikiuosi, apie pakankamai laiko įgyvendinti stumti, 182 00:12:21,000 --> 00:12:24,000 ir tada aš duosiu jums kitą pertraukos pop. 183 00:12:24,000 --> 00:12:27,000 Bet tai tikrai nėra, kad daug kodas ne visi. 184 00:12:27,000 --> 00:12:35,000 Labiausiai kodas yra tikriausiai plėsti dalykų, plėsti pajėgumus. 185 00:12:35,000 --> 00:12:39,000 Gerai, jokio spaudimo, turi būti visiškai padaryta, 186 00:12:39,000 --> 00:12:47,000 bet kaip ilgai, kaip jūs manote, kaip jūs teisingu keliu, tai gerai. 187 00:12:47,000 --> 00:12:53,000 >> Ar kas nors turi bet kokį kodą, jie jaučiasi patogiai su manimi traukdami? 188 00:12:53,000 --> 00:12:59,000 Taip, aš noriu, bet Ar kas nors turite kodą, galiu atsigriebti? 189 00:12:59,000 --> 00:13:05,000 Gerai, jūs galite pradėti, jį išsaugoti, kokia ji yra? 190 00:13:05,000 --> 00:13:09,000 Aš visada pamiršti šį žingsnį. 191 00:13:09,000 --> 00:13:15,000 Gerai, stumti, 192 00:13:15,000 --> 00:13:18,000 norite paaiškinti savo kodą? 193 00:13:18,000 --> 00:13:24,000 [Studentų] Visų pirma, aš padidino dydį. 194 00:13:24,000 --> 00:13:28,000 Manau, gal man reikia, kad vistiek, aš padidino dydį, 195 00:13:28,000 --> 00:13:31,000 ir aš pamatyti, jei jis mažiau nei pajėgumų. 196 00:13:31,000 --> 00:13:36,000 Ir jei tai mažiau nei pajėgumų, galiu pridėti į masyvą, kad mes jau turime. 197 00:13:36,000 --> 00:13:42,000 Ir jei ne, Aš padauginsiu pajėgumus 2, 198 00:13:42,000 --> 00:13:50,000 ir aš perskirstyti stygos masyvo kažką su didesnių pajėgumų dydį. 199 00:13:50,000 --> 00:13:55,000 Ir tada, jei ir tai nepadeda, sakau vartotoją ir gražins false, 200 00:13:55,000 --> 00:14:04,000 ir, jei viskas gerai, tada aš įdėti eilutę į naują vietą. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Taip pat pastebėsite, kad mes naudojamas gražią Bitinis operatorių čia 202 00:14:07,000 --> 00:14:09,000 padauginti iš 2. 203 00:14:09,000 --> 00:14:11,000 Atminkite, kad kairysis SHIFT visada bus padaugintas iš 2. 204 00:14:11,000 --> 00:14:15,000 Teisė Shift padalinti iš 2, tol, kol jūs žinote, kad tai reiškia, 205 00:14:15,000 --> 00:14:18,000 padalinti iš 2, kaip sveikasis skaičius, padalytas iš 2. 206 00:14:18,000 --> 00:14:20,000 Tai gali trumpinti 1 čia arba ten. 207 00:14:20,000 --> 00:14:26,000 Tačiau perėjimas paliko 1 visada bus padaugintas iš 2, 208 00:14:26,000 --> 00:14:32,000 nebent jūs perpildymo skaitinę ribas, ir tada ji nebus. 209 00:14:32,000 --> 00:14:34,000 Pusė komentaras. 210 00:14:34,000 --> 00:14:39,000 Man patinka, do-tai nesiruošia keisti kodavimo kokiu nors būdu, 211 00:14:39,000 --> 00:14:48,000 bet man patinka daryti kažką panašaus į tai. 212 00:14:48,000 --> 00:14:51,000 Ji iš tikrųjų vyksta, kad jis šiek tiek ilgesnis. 213 00:15:04,000 --> 00:15:08,000 Gal tai ir nėra tobulas, rodo, kad tai, 214 00:15:08,000 --> 00:15:14,000 bet man patinka ją išskaidyti į šių trinkelės 215 00:15:14,000 --> 00:15:17,000 gerai, jei tai, jei atsitinka, tada aš ruošiuosi ką nors padaryti, 216 00:15:17,000 --> 00:15:19,000 ir tada funkcija atliekama. 217 00:15:19,000 --> 00:15:22,000 Man nereikia tada pereikite visą kelią žemyn mano akys funkcijos 218 00:15:22,000 --> 00:15:25,000 pamatyti, kas atsitiks po else. 219 00:15:25,000 --> 00:15:27,000 Tai, jei tai, jei atsitinka, tada aš tiesiog grįžti. 220 00:15:27,000 --> 00:15:30,000 Ji taip pat turi gražią viską, išskyrus tai papildoma nauda 221 00:15:30,000 --> 00:15:33,000 dabar pasislinks kairėn vieną kartą. 222 00:15:33,000 --> 00:15:40,000 Aš nebereikia į jei jūs kada nors šalia juokingai ilgas eilutes, 223 00:15:40,000 --> 00:15:45,000 tada tie 4 baitai gali padėti, ir taip pat daugiau į kairę, kad kažkas yra, 224 00:15:45,000 --> 00:15:48,000 mažiau priblokšti jūs manote, jei patiko-gerai, turiu prisiminti 225 00:15:48,000 --> 00:15:53,000 Aš šiuo metu while cikle viduje kitas viduje už linijos. 226 00:15:53,000 --> 00:15:58,000 Bet jūs galite padaryti šią deklaraciją iš karto, aš tipo kaip. 227 00:15:58,000 --> 00:16:05,000 Tai visiškai nebūtina ir nėra jokiu būdu tikimasi. 228 00:16:05,000 --> 00:16:12,000 >> [Studentų] dydis - Gedimams būklės? 229 00:16:12,000 --> 00:16:19,000 Čia nepavyks sąlyga mums nepavyko realloc, taip taip. 230 00:16:19,000 --> 00:16:22,000 Atkreipkite dėmesį, kaip Gedimams sąlyga, matyt, 231 00:16:22,000 --> 00:16:26,000 vėliau, nebent mes free stuff, mes visada vyksta, kad žlugtų 232 00:16:26,000 --> 00:16:29,000 nesvarbu, kiek kartų mes bando stumti kažką. 233 00:16:29,000 --> 00:16:32,000 Jei mes nuolat stumia, mes nuolat pokyčio dydį, 234 00:16:32,000 --> 00:16:36,000 nors mes nieko nedėti ant kamino. 235 00:16:36,000 --> 00:16:39,000 Paprastai mes neturime prieaugio dydį iki 236 00:16:39,000 --> 00:16:43,000 po to, kai sėkmingai padėkite jį ant kamino. 237 00:16:43,000 --> 00:16:50,000 Mes norėtume tai padaryti, pasakyti, ar čia ir čia. 238 00:16:50,000 --> 00:16:56,000 Ir tada vietoj sakydamas s.size ≤ pajėgumus, tai mažiau nei pajėgumų, 239 00:16:56,000 --> 00:17:01,000 tik todėl, kad mes persikėlė, kur viskas buvo. 240 00:17:01,000 --> 00:17:07,000 >> Ir atminkite, kad vienintelė vieta, kad mes galbūt gražins false 241 00:17:07,000 --> 00:17:14,000 yra čia, kur realloc grįžo null, 242 00:17:14,000 --> 00:17:19,000 ir, jei atsitiktų prisiminti standartinė paklaida, 243 00:17:19,000 --> 00:17:22,000 gal galite apsvarstyti šį atvejį, kai norite spausdinti standartinė paklaida, 244 00:17:22,000 --> 00:17:26,000 tiek fprintf stderr, o ne tik spausdinimo tiesiogiai iš standartinės. 245 00:17:26,000 --> 00:17:31,000 Vėl, kad lūkesčiai, bet jei tai klaida, 246 00:17:31,000 --> 00:17:41,000 įveskite printf, tada jūs galbūt norėsite, kad ji spausdinti standartinė paklaida, o ne standartinio out. 247 00:17:41,000 --> 00:17:44,000 >> Kiekvienas turi nieko kito, į kuriuos reikėtų atkreipti dėmesį? Taip. 248 00:17:44,000 --> 00:17:47,000 [Studentų] Ar jūs einate per [negirdimo]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Taip, faktinis binariness apie tai, ar tai, ką ji yra? 250 00:17:55,000 --> 00:17:57,000 [Studentų] Taigi jūs padauginkite jį iš 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Taip, iš esmės. 252 00:17:59,000 --> 00:18:11,000 Dvejetainiu žemės, mes visada turime skaitmenų rinkinys. 253 00:18:11,000 --> 00:18:22,000 Perėjimas Tai paliko 1 esmės įterpia jį čia dešinėje pusėje. 254 00:18:22,000 --> 00:18:25,000 Grįžti į, tiesiog prisiminti, kad viską, dvejetainis 255 00:18:25,000 --> 00:18:28,000 2 galia, todėl tai yra 2 su 0, 256 00:18:28,000 --> 00:18:30,000 tai 2 į 1, tai 2 su 2. 257 00:18:30,000 --> 00:18:33,000 Įrašant 0 iki dešinėje pusėje dabar, mes tiesiog perkelti viską, per. 258 00:18:33,000 --> 00:18:38,000 Kas anksčiau buvo su 0 2 2 į 1, 2 į 2. 259 00:18:38,000 --> 00:18:41,000 Dešinėje pusėje, kad mes įterpiamas 260 00:18:41,000 --> 00:18:44,000 yra visada lygi 0, 261 00:18:44,000 --> 00:18:46,000 kuri turi prasmę. 262 00:18:46,000 --> 00:18:49,000 Jeigu jūs kada nors padauginti skaičių iš 2, jis nesiruošia baigti keista, 263 00:18:49,000 --> 00:18:54,000 2 0 Talpinti turėtų būti 0, 264 00:18:54,000 --> 00:18:59,000 ir tai, ką I pusm perspėjo apie prieš tai, jei atsitiktų pereiti 265 00:18:59,000 --> 00:19:01,000 už bitų sveikasis skaičius, 266 00:19:01,000 --> 00:19:04,000 1 dalis ketina baigti vyksta ne. 267 00:19:04,000 --> 00:19:10,000 Tai tik nerimauti, jei atsitiktų būti susijusios su tikrai dideliems pajėgumams. 268 00:19:10,000 --> 00:19:15,000 Bet tuo momentu, tada jūs susiduriame su milijardų dalykų masyvo, 269 00:19:15,000 --> 00:19:25,000 kuris gali tilpti į atmintį vistiek. 270 00:19:25,000 --> 00:19:31,000 >> Dabar mes galime gauti pop, kuri yra net lengviau. 271 00:19:31,000 --> 00:19:36,000 Tai galite padaryti patinka, jei atsitiktų pop visa krūva, 272 00:19:36,000 --> 00:19:38,000 ir dabar jūs pusę galingumo, vėl. 273 00:19:38,000 --> 00:19:42,000 Jūs galite realloc trauktis atminties kiekį turite, 274 00:19:42,000 --> 00:19:47,000 tačiau jūs neturite jaudintis dėl to, kad tik realloc atveju bus 275 00:19:47,000 --> 00:19:50,000 auganti atminties, niekada mažėja atmintį, 276 00:19:50,000 --> 00:19:59,000 ketina padaryti pop super lengva. 277 00:19:59,000 --> 00:20:02,000 Dabar eilės, kurie ketinate būti kaip kaminai, 278 00:20:02,000 --> 00:20:06,000 bet tam, kad jūs imtis ko yra atstatomas. 279 00:20:06,000 --> 00:20:10,000 Prototipinę pavyzdys eilėje yra linija, 280 00:20:10,000 --> 00:20:12,000 todėl aš manau, jei buvo anglų kalba, aš gi būtų galėjęs pasakyti 281 00:20:12,000 --> 00:20:17,000 prototipinę eilėje pavyzdys yra eilė. 282 00:20:17,000 --> 00:20:22,000 Taigi, kaip, jei esate pirmasis asmuo, linijos, linijos 283 00:20:22,000 --> 00:20:24,000 jūs tikitės būti pirmasis asmuo iš linijos. 284 00:20:24,000 --> 00:20:31,000 Jei esate paskutinis žmogus linijos, jūs ketinate būti paskutinis žmogus aptarnauja. 285 00:20:31,000 --> 00:20:35,000 Mes vadiname, kad FIFO modelį, o kamino LIFO modelis. 286 00:20:35,000 --> 00:20:40,000 Tie žodžiai yra gana universalus. 287 00:20:40,000 --> 00:20:46,000 >> , Pavyzdžiui, vamzdžiai ir skirtingai masyvai, eilės paprastai neturi leisti prieigą prie viduryje. 288 00:20:46,000 --> 00:20:50,000 Čia, kamino, mes turime push ir pop. 289 00:20:50,000 --> 00:20:54,000 Čia mes atsitiktų, kad pakvietė juos į eilę ir dequeue. 290 00:20:54,000 --> 00:20:58,000 Aš taip pat girdėjau, juos vadinamas kaitą ir unshift. 291 00:20:58,000 --> 00:21:02,000 Aš girdėjau, žmonės sako, push ir pop taip pat taikomos eilėse. 292 00:21:02,000 --> 00:21:05,000 Aš girdėjau, įterpti, pašalinti, 293 00:21:05,000 --> 00:21:11,000 stumti ir pop, jei tu kalbi apie kaminai, esate stumti ir Popping. 294 00:21:11,000 --> 00:21:16,000 Jei jūs kalbate apie eiles, galite pasirinkti žodžius, kuriuos norite naudoti 295 00:21:16,000 --> 00:21:23,000 įdėti ir išimti, ir nėra sutarimo, ką ji turėtų būti vadinama. 296 00:21:23,000 --> 00:21:27,000 Bet čia mes turime į eilę ir dequeue. 297 00:21:27,000 --> 00:21:37,000 Dabar struct atrodo beveik identiškas struct kamino. 298 00:21:37,000 --> 00:21:40,000 Bet mes turime sekti galvos. 299 00:21:40,000 --> 00:21:44,000 Manau, kad tai sako žemai čia, bet kodėl mes turime galvą? 300 00:21:53,000 --> 00:21:57,000 Prototipai, yra iš esmės identiškas stumti ir pop. 301 00:21:57,000 --> 00:21:59,000 Jūs galite galvoti apie tai, kaip stumti ir pop. 302 00:21:59,000 --> 00:22:08,000 Vienintelis skirtumas yra pop grįžta vietoj iš paskutiniųjų, tai grąžina. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, ar kažką. 304 00:22:12,000 --> 00:22:14,000 Ir štai pradžia. 305 00:22:14,000 --> 00:22:17,000 Mūsų eilėje yra visiškai pilnas, todėl jame yra keturi elementai. 306 00:22:17,000 --> 00:22:21,000 Mūsų eilėje galas yra 2, 307 00:22:21,000 --> 00:22:24,000 ir dabar mes einame įterpti ką nors kita. 308 00:22:24,000 --> 00:22:29,000 >> , Kai norime įterpti tą kažką kitą, ką mes padarėme, kamino versija 309 00:22:29,000 --> 00:22:36,000 mes praplėtėme mūsų atminties blokas. 310 00:22:36,000 --> 00:22:40,000 Kas yra su šia problema? 311 00:22:40,000 --> 00:22:45,000 [Studentų] Jūs perkeliate 2. 312 00:22:45,000 --> 00:22:51,000 Ką aš sakiau, apie eilės galą, 313 00:22:51,000 --> 00:22:57,000 tai nėra prasmės, kad mes pradėti nuo 1, 314 00:22:57,000 --> 00:23:01,000 tai mes norime dequeue 1, tada dequeue 3, kaip dequeue 4, 315 00:23:01,000 --> 00:23:05,000 tada dequeue 2, tada dequeue šį vieną. 316 00:23:05,000 --> 00:23:08,000 Mes negalime naudoti realloc dabar 317 00:23:08,000 --> 00:23:11,000 arba bent jau, turite naudoti realloc kitaip. 318 00:23:11,000 --> 00:23:15,000 Bet jūs tikriausiai turėtų ne tik naudotis realloc. 319 00:23:15,000 --> 00:23:18,000 Jūs ketinate turėti rankiniu būdu nukopijuoti savo atmintį. 320 00:23:18,000 --> 00:23:21,000 >> Yra dvi funkcijos kopijuoti atmintį. 321 00:23:21,000 --> 00:23:25,000 Yra memcopy ir memmove. 322 00:23:25,000 --> 00:23:29,000 Aš šiuo metu skaitau vyras puslapių ir pamatyti kuris iš jų jūs ketinate norite naudoti. 323 00:23:29,000 --> 00:23:35,000 Gerai, memcopy, skirtumas yra 324 00:23:35,000 --> 00:23:38,000 kad memcopy ir memmove, rankenos bylą teisingai 325 00:23:38,000 --> 00:23:41,000 kur jūs kopijuoti į regioną, kuris atsitinka uždengti regioną 326 00:23:41,000 --> 00:23:46,000 jūs kopijuoti. 327 00:23:46,000 --> 00:23:50,000 Memcopy netvarko. Memmove. 328 00:23:50,000 --> 00:23:59,000 Jūs galite galvoti apie AS-problemos 329 00:23:59,000 --> 00:24:09,000 tarkim noriu nukopijuoti šį vaikiną, 330 00:24:09,000 --> 00:24:13,000 šis vaikinas per šių keturių. 331 00:24:13,000 --> 00:24:16,000 , Galų gale, kas masyvas turėtų atrodyti 332 00:24:16,000 --> 00:24:26,000 po to, kai kopija 2, 1, 2, 1, 3, 4, ir tada kai pabaigoje stuff. 333 00:24:26,000 --> 00:24:29,000 Bet tai priklauso ta tvarka, kuria mes iš tikrųjų kopijuoti, 334 00:24:29,000 --> 00:24:32,000 nes, jei mes negalime atsižvelgti į tai, kad šis regionas mes kopijavimo į 335 00:24:32,000 --> 00:24:35,000 sutampa mes Kopijuojant iš, 336 00:24:35,000 --> 00:24:46,000 tada mes galime daryti, kaip pradžioje čia, kopijuoti norime eiti į vietą, 2, 337 00:24:46,000 --> 00:24:52,000 tada perkelkite savo rodykles į priekį. 338 00:24:52,000 --> 00:24:56,000 >> Dabar mes ketiname būti čia ir čia, ir dabar mes norime kopijuoti 339 00:24:56,000 --> 00:25:04,000 tai vėl šis vaikinas vaikinas ir perkelti savo rodykles į priekį. 340 00:25:04,000 --> 00:25:07,000 Ką mes ketiname baigti gauti yra 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 vietoj tinkamu 2, 1, 2, 1, 3, 4, nes 342 00:25:10,000 --> 00:25:15,000 2, 1 svarbesnis nei originalus 3, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove rankenos, kad teisingai. 344 00:25:19,000 --> 00:25:23,000 Šiuo atveju, iš esmės tiesiog visada naudokite memmove 345 00:25:23,000 --> 00:25:26,000 , nes ji elgiasi teisingai. 346 00:25:26,000 --> 00:25:29,000 Ji paprastai neatlieka, bet dar blogiau. 347 00:25:29,000 --> 00:25:32,000 Idėja yra, o ne pradėti nuo pradžių, ir tokiu būdu kopijavimo 348 00:25:32,000 --> 00:25:35,000 kaip mes čia ką tik padarė, ji prasideda nuo pabaigos ir kopijuoja, 349 00:25:35,000 --> 00:25:38,000 ir tuo atveju, jūs niekada negali turėti problemą. 350 00:25:38,000 --> 00:25:40,000 No performance prarasti. 351 00:25:40,000 --> 00:25:47,000 Visada naudokite memmove. Niekada nerimauti memcopy. 352 00:25:47,000 --> 00:25:51,000 Ir tai, kai jūs ketinate turi atskirai memmove 353 00:25:51,000 --> 00:26:01,000 dalis apvyniotas aplink savo eilės. 354 00:26:01,000 --> 00:26:04,000 Jokių rūpesčių, jei ne visiškai padaryta. 355 00:26:04,000 --> 00:26:10,000 Tai sunkiau, nei Stack, stumti, ir pop. 356 00:26:10,000 --> 00:26:15,000 >> Kas nors turite kodą, mes galime dirbti su? 357 00:26:15,000 --> 00:26:21,000 Net jei visiškai neišsamūs? 358 00:26:21,000 --> 00:26:23,000 [Studentų] Taip, tai visiškai neišsami, nors. 359 00:26:23,000 --> 00:26:27,000 Visiškai neišsamūs yra gerai tol, kol mes galite išsaugoti naujo? 360 00:26:27,000 --> 00:26:32,000 Aš pamiršti, kad kiekvieną kartą. 361 00:26:32,000 --> 00:26:39,000 Gerai, ignoravimas, kas atsitinka, kai mes turime dydį dalykų. 362 00:26:39,000 --> 00:26:42,000 Visiškai ignoruoti keisti. 363 00:26:42,000 --> 00:26:49,000 Paaiškinkite šį kodą. 364 00:26:49,000 --> 00:26:54,000 Aš patikrinti pirmiausia, jei dydis yra mažesnis nei kopijos, visų pirma 365 00:26:54,000 --> 00:27:01,000 ir tada po to, įterpti I galva + formato, 366 00:27:01,000 --> 00:27:05,000 ir aš įsitikinkite, kad antklodės aplink masyvo talpa, 367 00:27:05,000 --> 00:27:08,000 ir aš įterpti naują eilutę toje pozicijoje. 368 00:27:08,000 --> 00:27:12,000 Tada aš padidinti dydžio ir return true. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B] Tai tikrai vienas iš tais atvejais, kai jūs ketinate nori būti naudojant mod. 370 00:27:22,000 --> 00:27:25,000 Bet koks atveju natūra, kai jūs turite vyniojimo aplink, jei manote, vyniojimo aplink, 371 00:27:25,000 --> 00:27:29,000 nedelsiant mintis turėtų būti mod. 372 00:27:29,000 --> 00:27:36,000 Kaip greitai optimizavimo /, kad jūsų kodas vieną eilutę trumpesnis, 373 00:27:36,000 --> 00:27:42,000 jūs pastebėsite, kad linijos iš karto po šį vieną 374 00:27:42,000 --> 00:27:53,000 yra tik dydis + +, todėl jūs sujungti, kad į šią eilutę, dydis + +. 375 00:27:53,000 --> 00:27:58,000 Dabar žemyn čia, turime bylą 376 00:27:58,000 --> 00:28:01,000 jei mes neturime pakankamai atminties, 377 00:28:01,000 --> 00:28:05,000 todėl mes padidinti mūsų galimybes 2. 378 00:28:05,000 --> 00:28:09,000 Manau, galima su ta pačia problema čia, bet mes galime ignoruoti jį dabar, 379 00:28:09,000 --> 00:28:13,000 kur, jei nepavyko padidinti savo pajėgumus, 380 00:28:13,000 --> 00:28:18,000 tada jūs ketinate norite sumažinti savo pajėgumą 2 vėl. 381 00:28:18,000 --> 00:28:24,000 Kitas trumpos pastabos yra tik kaip jūs galite padaryti + =, 382 00:28:24,000 --> 00:28:30,000 taip pat galite padaryti << = 383 00:28:30,000 --> 00:28:43,000 Beveik viską galima eiti prieš lygus, + =, | =, & =, << = 384 00:28:43,000 --> 00:28:52,000 Char * nauja yra mūsų naujas atminties blokas. 385 00:28:52,000 --> 00:28:55,000 O, kaip čia. 386 00:28:55,000 --> 00:29:02,000 >> Ką žmonės galvoja apie mūsų naują atminties bloko tipo? 387 00:29:02,000 --> 00:29:06,000 [Studentų] Tai turėtų būti char **. 388 00:29:06,000 --> 00:29:12,000 Mintys atgal į mūsų struct čia, 389 00:29:12,000 --> 00:29:14,000 stygos yra tai, ką mes perskirstyti. 390 00:29:14,000 --> 00:29:21,000 Mes darome visą naują dinamišką saugojimo eilės elementų. 391 00:29:21,000 --> 00:29:25,000 Ką mes ketiname būti paskirti savo stygos yra tai, ką mes mallocing dabar, 392 00:29:25,000 --> 00:29:30,000 ir toks naujas bus char **. 393 00:29:30,000 --> 00:29:34,000 Tai bus eilučių masyvas. 394 00:29:34,000 --> 00:29:38,000 Tada, kas yra iš tikrųjų, pagal kurias mes ketiname grįžti klaidinga? 395 00:29:38,000 --> 00:29:41,000 [Studentų] turėtume daryti char *? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Taip, geras skambutis. 397 00:29:44,000 --> 00:29:46,000 [Studentų] Kas tai buvo? 398 00:29:46,000 --> 00:29:49,000 [Rob B] Mes norėjome padaryti dydį char *, nes mes nebe- 399 00:29:49,000 --> 00:29:53,000 tai iš tiesų būtų labai didelė problema, nes sizeof (char) būtų 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof char * bus 4, 401 00:29:55,000 --> 00:29:58,000 todėl daug kartų, kai jūs susiduriame su int 402 00:29:58,000 --> 00:30:01,000 jūs linkę išeiti su juo, nes dydis int ir dydžio int * 403 00:30:01,000 --> 00:30:04,000 32-bitų sistemos bus tas pats. 404 00:30:04,000 --> 00:30:09,000 Bet čia, sizeof (char) ir sizeof (char *) dabar bus tas pats. 405 00:30:09,000 --> 00:30:15,000 >> Kokia yra situacija, kai mes gražins false? 406 00:30:15,000 --> 00:30:17,000 Studentų] Nauja yra tuščias. 407 00:30:17,000 --> 00:30:23,000 Taip, jei naujas, yra nulis, gražins false, 408 00:30:23,000 --> 00:30:34,000 ir aš ruošiuosi mesti čia 409 00:30:34,000 --> 00:30:37,000 [Studentų] [nesigirdi] 410 00:30:37,000 --> 00:30:39,000 [Rob B] Taip, tai yra gerai. 411 00:30:39,000 --> 00:30:46,000 Jūs galite arba daryti 2 kartus pajėgumų arba pajėgumų perkėlimas 1 ir tik tada nustatyti, kad jis čia ar kokia. 412 00:30:46,000 --> 00:30:52,000 Mes tai padaryti, kaip mes tikėjomės. 413 00:30:52,000 --> 00:30:56,000 Talpa >> = 1. 414 00:30:56,000 --> 00:31:08,000 Ir jūs niekada nereikės nerimauti apie prarasti 1 vietą 415 00:31:08,000 --> 00:31:12,000 nes jums paliko atitraukiama 1, 1 vieta būtinai yra 0, 416 00:31:12,000 --> 00:31:16,000 tiek teisę perkeliant į 1, jūs vis dar ketinate būti bauda. 417 00:31:16,000 --> 00:31:19,000 [Studentų] Ar jums reikia padaryti, kad prieš grįžimą? 418 00:31:19,000 --> 00:31:29,000 [Rob B] Taip, tai daro absoliučiai jokios prasmės. 419 00:31:29,000 --> 00:31:36,000 >> Tarkime, mes ketiname baigti grįžtant true iki galo. 420 00:31:36,000 --> 00:31:39,000 Taip, kaip mes ketiname daryti šias memmoves, 421 00:31:39,000 --> 00:31:45,000 mes turime būti atsargūs su tuo, kaip mes juos. 422 00:31:45,000 --> 00:31:50,000 Ar kas nors turi kokių nors pasiūlymų, kaip galėtume padaryti juos? 423 00:32:17,000 --> 00:32:21,000 Štai mūsų pradžia. 424 00:32:21,000 --> 00:32:28,000 Neišvengiamai, mes norime vėl pradėti iš pradžių 425 00:32:28,000 --> 00:32:35,000 ir kopijuoti dalykų iš ten, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 How do you do? 427 00:32:41,000 --> 00:32:52,000 Pirma, aš turiu ieškoti žinyno puslapyje memmove vėl. 428 00:32:52,000 --> 00:32:57,000 Memmove argumentų, kad visada yra svarbus. 429 00:32:57,000 --> 00:33:01,000 Mes norime, kad mūsų tikslą, šaltinis, antra, dydis 3.. 430 00:33:01,000 --> 00:33:06,000 Yra daug funkcijų, kurios Grįžtamieji šaltinį ir paskirties. 431 00:33:06,000 --> 00:33:11,000 Paskirtis, šaltinis yra linkęs būti nuoseklūs šiek tiek. 432 00:33:17,000 --> 00:33:21,000 Perkelti, kokia ji grįžta? 433 00:33:21,000 --> 00:33:27,000 Jis grąžina rodyklę į paskirties vietą, dėl kokios nors priežasties jūs galbūt norėsite, kad. 434 00:33:27,000 --> 00:33:32,000 Galiu įsivaizduoti jį perskaityti, bet mes norime pereiti į mūsų tikslą. 435 00:33:32,000 --> 00:33:35,000 >> Kas yra mūsų tikslas bus? 436 00:33:35,000 --> 00:33:37,000 [Studentų] Naujas. 437 00:33:37,000 --> 00:33:39,000 [Rob B] Taip, ir kur mes kopijuojant iš? 438 00:33:39,000 --> 00:33:43,000 Pirmas dalykas, kurį kopijuojate tai 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Kas yra-tai 1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Kas yra šio straipsnio 1 adresas? 441 00:33:55,000 --> 00:33:58,000 Kas yra adresas, kad 1? 442 00:33:58,000 --> 00:34:01,000 [Studentų] [nesigirdi] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] Pagrindinis + pirmojo elemento adresas. 444 00:34:03,000 --> 00:34:05,000 Kaip mes pirmą masyvo elementą? 445 00:34:05,000 --> 00:34:10,000 [Studentų] eilėje. 446 00:34:10,000 --> 00:34:15,000 [Rob B] Taip, q.strings. 447 00:34:15,000 --> 00:34:20,000 Atminkite, čia, mūsų galva 1. 448 00:34:20,000 --> 00:34:24,000 Darn. Aš tiesiog manau, kad tai stebuklingai- 449 00:34:24,000 --> 00:34:29,000 Čia, mūsų galva 1. Aš ruošiuosi pakeisti savo spalvą. 450 00:34:29,000 --> 00:34:36,000 Ir čia yra stygos. 451 00:34:36,000 --> 00:34:41,000 Tai, mes galime arba parašyti, kaip mes padarėme per čia 452 00:34:41,000 --> 00:34:43,000 su galvutėmis + q.strings. 453 00:34:43,000 --> 00:34:51,000 Daugybė žmonių taip pat parašyti ir q.strings [vadovas]. 454 00:34:51,000 --> 00:34:55,000 Tai tikrai nėra mažiau efektyvus. 455 00:34:55,000 --> 00:34:58,000 Jūs galite galvoti apie tai, kaip jūs dereferencing jį ir tada gauti adresą, 456 00:34:58,000 --> 00:35:04,000 bet kompiliatorius jį išversti, ką mes turėjome anksčiau vistiek, q.strings + galvos. 457 00:35:04,000 --> 00:35:06,000 Bet kokiu atveju, jūs norite galvoti apie tai. 458 00:35:06,000 --> 00:35:11,000 >> Ir kiek baitų mes norime kopijuoti? 459 00:35:11,000 --> 00:35:15,000 [Studentų] Talpa - galva. 460 00:35:15,000 --> 00:35:18,000 Talpa - vadovas. 461 00:35:18,000 --> 00:35:21,000 Ir tada jūs visada galėtų surašyti pavyzdį 462 00:35:21,000 --> 00:35:23,000 išsiaiškinti, ar tai tiesa. 463 00:35:23,000 --> 00:35:26,000 [Studentų] Reikia padalinti iš 2, tada. 464 00:35:26,000 --> 00:35:30,000 Taip, todėl aš manau, mes galime naudoti dydžio. 465 00:35:30,000 --> 00:35:35,000 Mes vis dar turime dydis- 466 00:35:35,000 --> 00:35:39,000 dydis, turime dydis lygus 4. 467 00:35:39,000 --> 00:35:42,000 Mūsų dydis yra 4. Mūsų galva 1. 468 00:35:42,000 --> 00:35:46,000 Mes norime nukopijuoti šiuos 3 elementus. 469 00:35:46,000 --> 00:35:54,000 Štai normalumas patikrinti, kad dydis - galva teisingai 3. 470 00:35:54,000 --> 00:35:58,000 Ir grįžta čia, kaip mes minėta anksčiau, 471 00:35:58,000 --> 00:36:00,000 jei mes pajėgumus, tada ir mes padalinti iš 2 472 00:36:00,000 --> 00:36:04,000 , nes mes jau išaugo savo gebėjimus, todėl vietoj, mes ketiname naudoti dydžio. 473 00:36:11,000 --> 00:36:13,000 Kuri kopijuoja ta dalis. 474 00:36:13,000 --> 00:36:18,000 Dabar, mes turime nukopijuoti kitą dalį, tą dalį, kuri yra į kairę nuo pradžios. 475 00:36:18,000 --> 00:36:28,000 >> , Kad ketina memmove padėtį, į tai, ką? 476 00:36:28,000 --> 00:36:32,000 [Studentų] Plius dydis - vadovas. 477 00:36:32,000 --> 00:36:38,000 Taip, kad mes jau nukopijuoti dydžio - galvos baitų, 478 00:36:38,000 --> 00:36:43,000 ir taip, kur mes norime kopijuoti likusių bytes naujo 479 00:36:43,000 --> 00:36:48,000 ir tada dydis minus gerai, Skaičius baitų, mes jau nukopijuotas. 480 00:36:48,000 --> 00:36:52,000 Ir tada kur mes kopijuojant iš? 481 00:36:52,000 --> 00:36:54,000 [Studentų] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B] Taip, q.strings. 483 00:36:56,000 --> 00:37:02,000 Mes galime daryti ir q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 Tai yra kur kas mažiau paplitęs, nei šis. 485 00:37:05,000 --> 00:37:14,000 Jei jis tiesiog bus 0, tada jūs linkę pamatyti, q.strings. 486 00:37:14,000 --> 00:37:16,000 Štai kur mes kopijuojant iš. 487 00:37:16,000 --> 00:37:18,000 Kiek baitų mes nepaliko kopijuoti? >> [Studentų] 10. 488 00:37:18,000 --> 00:37:20,000 Į dešinę. 489 00:37:20,000 --> 00:37:25,000 [Studentų] Ar mes turime daugintis 5 - 10 kartų dydis baitais arba kažkas? 490 00:37:25,000 --> 00:37:30,000 Taip, kad tai yra kur kas tiksliai yra kopijavimo? 491 00:37:30,000 --> 00:37:32,000 [Studentų] [nesigirdi] 492 00:37:32,000 --> 00:37:34,000 Kas yra dalykas, mes kopijavimo tipas? 493 00:37:34,000 --> 00:37:36,000 [Studentų] [nesigirdi] 494 00:37:36,000 --> 00:37:41,000 Taip, kad char * s, kad mes kopijuoti, mes nežinome, kur jie yra tiekiamos iš. 495 00:37:41,000 --> 00:37:47,000 Na, kur jie rodo, kaip stygos, mes galų gale stumti ant eilėje 496 00:37:47,000 --> 00:37:49,000 arba enqueuing ant eilėje. 497 00:37:49,000 --> 00:37:51,000 Kai kurie iš, neįsivaizduoju. 498 00:37:51,000 --> 00:37:56,000 Mes tiesiog reikia sekti char * s patys. 499 00:37:56,000 --> 00:38:00,000 Mes nenorime kopijuoti dydis - galvos baitų. 500 00:38:00,000 --> 00:38:03,000 Mes norime kopijuoti dydis - galvos char * s, 501 00:38:03,000 --> 00:38:11,000 todėl mes ketiname padauginti sizeof (char *). 502 00:38:11,000 --> 00:38:17,000 Tas pats žemyn čia, galva * sizeof (char *). 503 00:38:17,000 --> 00:38:24,000 >> [Studentų] Kas apie [nesigirdi? 504 00:38:24,000 --> 00:38:26,000 Tai čia? 505 00:38:26,000 --> 00:38:28,000 [Studentų] Ne, žemiau, kad dydis - vadovas. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Tai čia? 507 00:38:30,000 --> 00:38:32,000 Rodyklė aritmetika. 508 00:38:32,000 --> 00:38:35,000 Kaip rodyklė aritmetinis ketina dirbti 509 00:38:35,000 --> 00:38:40,000 automatiškai padaugins iš dydžio, tipo, kad mes susiduriame su. 510 00:38:40,000 --> 00:38:46,000 Tiesiog patinka čia, nauja + (dydis - vadovas) 511 00:38:46,000 --> 00:38:56,000 yra tiksliai ekvivalentiški & naujame [DYDIS - vadovas] 512 00:38:56,000 --> 00:39:00,000 kol mes tikimės, kad dirbti teisingai, 513 00:39:00,000 --> 00:39:04,000 nes jei mes susiduriame su int masyvas, tada mes ne indeksą int 514 00:39:04,000 --> 00:39:07,000 arba, jei tai jo dydis yra 5 ir norite 4. elementą, tada mes indeksas į 515 00:39:07,000 --> 00:39:10,000 int masyvas [4]. 516 00:39:10,000 --> 00:39:14,000 Jūs NeraŠykiTe [4] * int dydis. 517 00:39:14,000 --> 00:39:21,000 Kad tvarko automatiškai, ir Šiuo atveju 518 00:39:21,000 --> 00:39:29,000 yra tiesiog ekvivalentas, todėl laikiklis sintaksė 519 00:39:29,000 --> 00:39:34,000 yra tik ketina būti konvertuojamos į tai, kaip greitai, kaip jūs sudaryti. 520 00:39:34,000 --> 00:39:38,000 Tai yra kažkas, jūs turite būti atsargūs, kad 521 00:39:38,000 --> 00:39:42,000 kai jūs pridedate dydis - vadovas 522 00:39:42,000 --> 00:39:45,000 norite pridėti ne vieną baitą. 523 00:39:45,000 --> 00:39:53,000 Jūs įtraukiate vieną char *, kuri gali būti viena baitų ar kas. 524 00:39:53,000 --> 00:39:56,000 >> Kiti klausimai? 525 00:39:56,000 --> 00:40:04,000 Gerai, dequeue bus lengviau. 526 00:40:04,000 --> 00:40:11,000 Aš duosiu jums vieną minutę įgyvendinti. 527 00:40:11,000 --> 00:40:18,000 O, ir aš manau, tai ta pati situacija, kai 528 00:40:18,000 --> 00:40:21,000 ką į eilę atveju, jei mes enqueuing null, 529 00:40:21,000 --> 00:40:24,000 gal mes norime ją apdoroti, o gal mes ne. 530 00:40:24,000 --> 00:40:27,000 Mes ne padaryti jį dar kartą čia, bet tas pats kaip mūsų kamino atveju. 531 00:40:27,000 --> 00:40:34,000 Jei mes į eilę null, mes norime į ją nekreipti dėmesio. 532 00:40:34,000 --> 00:40:40,000 Kiekvienas turi tam tikrą kodą, galiu atsigriebti? 533 00:40:40,000 --> 00:40:45,000 [Studentų] Aš tiesiog dequeue. 534 00:40:45,000 --> 00:40:56,000 2 versija yra tai, kad gerai. 535 00:40:56,000 --> 00:40:59,000 Jūs norite paaiškinti? 536 00:40:59,000 --> 00:41:01,000 [Studentų] Pirma, jūs įsitikinkite, kad kažkas eilėje 537 00:41:01,000 --> 00:41:07,000 ir kad dydis 1. 538 00:41:07,000 --> 00:41:11,000 Ką jums reikia padaryti, ir tada grįšite galvą 539 00:41:11,000 --> 00:41:13,000 ir tada pereiti galvos iki 1. 540 00:41:13,000 --> 00:41:19,000 Gerai, kad yra kampas, mes turime apsvarstyti. Taip. 541 00:41:19,000 --> 00:41:24,000 [Studentų] Jei jūsų galva yra paskutinis elementas, 542 00:41:24,000 --> 00:41:26,000 tada jūs nenorite, kad galva atkreipti dėmesį ne masyvo. 543 00:41:26,000 --> 00:41:29,000 >> Taip, kad kuo greičiau galvos hitai mūsų masyvo pabaigos, 544 00:41:29,000 --> 00:41:35,000 , kai mes dequeue, mūsų pagrindinė turėtų būti modded atgal į 0. 545 00:41:35,000 --> 00:41:40,000 Deja, mes negalime padaryti, kad vienu žingsniu. 546 00:41:40,000 --> 00:41:44,000 Manau, taip, kaip aš tikriausiai išspręsti, tai yra 547 00:41:44,000 --> 00:41:52,000 tai bus char *, ką mes grįžti, 548 00:41:52,000 --> 00:41:55,000 kokia jūsų nori būti kintamojo vardas. 549 00:41:55,000 --> 00:42:02,000 Tai mes norime mūsų gebėjimą galvutės mod 550 00:42:02,000 --> 00:42:10,000 ir tada grįžti pamerkti. 551 00:42:10,000 --> 00:42:14,000 Daug žmonių čia jie gali padaryti 552 00:42:14,000 --> 00:42:19,000 -ty jūs matote žmones daryti, jei galva 553 00:42:19,000 --> 00:42:29,000 yra didesnis nei pajėgumų, galvą, - gebėjimus. 554 00:42:29,000 --> 00:42:36,000 Ir tai tik apie tai, ką mod yra. 555 00:42:36,000 --> 00:42:41,000 Vadovas mod = pajėgumas yra daug švaresnis 556 00:42:41,000 --> 00:42:51,000 vyniojimo aplink nei tuo atveju, jei galva didesnis nei pajėgumų galvos - pajėgumų. 557 00:42:51,000 --> 00:42:56,000 >> Turite klausimų? 558 00:42:56,000 --> 00:43:02,000 Gerai, paskutinis dalykas, mes palikome mūsų susieta sąrašas. 559 00:43:02,000 --> 00:43:07,000 Jums gali būti naudojami kai kurie susijęs sąrašą elgesio, jei tu 560 00:43:07,000 --> 00:43:11,000 susijęs sąrašus savo maišos lenteles, jei tu maišos lentelę. 561 00:43:11,000 --> 00:43:15,000 Aš primygtinai rekomenduojame tai maišos lentelę. 562 00:43:15,000 --> 00:43:17,000 Jūs galbūt jau padaryti trie 563 00:43:17,000 --> 00:43:23,000 bet stengiasi yra sunkiau. 564 00:43:23,000 --> 00:43:27,000 Teoriškai, jie asimptotiškai geriau. 565 00:43:27,000 --> 00:43:30,000 Bet tiesiog pažvelgti didelis valdybos, 566 00:43:30,000 --> 00:43:35,000 ir bando niekada padaryti geriau, ir jie užima daugiau atminties. 567 00:43:35,000 --> 00:43:43,000 Viskas apie bando, galų gale buvo blogiau už daugiau darbo. 568 00:43:43,000 --> 00:43:49,000 Tai, ką Davidas Malan sprendimas visada yra 569 00:43:49,000 --> 00:43:56,000 Jis visuomet pranešimų savo trie sprendimas, ir pažiūrėkime, kur šiuo metu yra. 570 00:43:56,000 --> 00:44:00,000 Kas jis pagal David J? 571 00:44:00,000 --> 00:44:06,000 # 18, todėl tai nėra baisiai blogai, 572 00:44:06,000 --> 00:44:09,000 ir tai bus vienas iš geriausių bando galite galvoti apie 573 00:44:09,000 --> 00:44:17,000 arba vienas iš geriausių bando iš trie. 574 00:44:17,000 --> 00:44:23,000 Ar ne tai jo originalus sprendimas? 575 00:44:23,000 --> 00:44:29,000 I feel like trie sprendimai linkę būti labiau šioje RAM naudojimą asortimentą. 576 00:44:29,000 --> 00:44:33,000 >> Eik į pačiame viršuje, ir RAM naudojimas yra vienaženkliai skaičiai. 577 00:44:33,000 --> 00:44:36,000 Eiti žemyn link dugno, ir tada jūs pradėtumėte matyti bando 578 00:44:36,000 --> 00:44:41,000 kur jūs gaunate visiškai masyvi RAM naudojimas, 579 00:44:41,000 --> 00:44:45,000 ir bando yra sunkiau. 580 00:44:45,000 --> 00:44:53,000 Ne tik verta, bet mokymosi patirtį, jei tu vieną. 581 00:44:53,000 --> 00:44:56,000 Paskutinis dalykas yra Susietos sąrašas 582 00:44:56,000 --> 00:45:04,000 ir šie trys dalykai, kaminai, eilės, ir siejami sąrašai, 583 00:45:04,000 --> 00:45:09,000 bet kokia būsima dalykas, kad jūs kada nors padaryti, kompiuterių mokslo 584 00:45:09,000 --> 00:45:12,000 laikys, turite supažindinti su šių dalykų. 585 00:45:12,000 --> 00:45:19,000 Jie tiesiog tokie svarbūs, kad viskas. 586 00:45:19,000 --> 00:45:25,000 >> Susijęs sąrašus, ir čia mes atskirai susijęs sąrašas bus mūsų įgyvendinimą. 587 00:45:25,000 --> 00:45:34,000 Ką atskirai susijęs, o ne dvigubai susijęs? Taip. 588 00:45:34,000 --> 00:45:37,000 [Studentų] Jis tik nurodo į kitą rodyklė, o ne į rodykles, 589 00:45:37,000 --> 00:45:39,000 kaip ir prieš ir po to, kai vienas. 590 00:45:39,000 --> 00:45:44,000 Taip, kad vaizdo formatas, ką aš tiesiog padaryti? 591 00:45:44,000 --> 00:45:48,000 Turiu du dalykus. Turiu vaizdas ir vaizdas. 592 00:45:48,000 --> 00:45:51,000 Vaizdo formatas, mūsų pavieniui susiję sąrašai 593 00:45:51,000 --> 00:45:57,000 neišvengiamai, mes turime kažkokį rodyklė į mūsų sąraše galvos, 594 00:45:57,000 --> 00:46:02,000 o tada per mūsų sąraše, mes tiesiog turi patarimų, 595 00:46:02,000 --> 00:46:05,000 o gal tai rodo null. 596 00:46:05,000 --> 00:46:08,000 Tai bus jūsų tipiškų brėžinys pavieniui susijęs sąrašą. 597 00:46:08,000 --> 00:46:14,000 Dvigubai susijęs sąrašas, galite eiti atgal. 598 00:46:14,000 --> 00:46:19,000 Jei aš jums bet kurį sąraše esantį mazgas, tada jums gali nebūti gauti 599 00:46:19,000 --> 00:46:23,000 bet kuris kitas mazgas sąraše, jei tai yra dvigubai susijęs sąrašas. 600 00:46:23,000 --> 00:46:27,000 Bet jei aš jums trečią sąrašo mazgas ir atskirai susijęs sąrašas, 601 00:46:27,000 --> 00:46:30,000 jokiu būdu, jūs kada nors patekti į pirmos ir antros mazgų. 602 00:46:30,000 --> 00:46:34,000 Ir ten naudą ir nenaudingus, ir vienas akivaizdus 603 00:46:34,000 --> 00:46:42,000 išgėrėte daugiau dydžio, ir jūs turite sekti, kur šie dalykai dabar yra nukreipta. 604 00:46:42,000 --> 00:46:49,000 Bet mes tik rūpi atskirai susijęs. 605 00:46:49,000 --> 00:46:53,000 >> Keletas dalykų, mes ketiname įgyvendinti. 606 00:46:53,000 --> 00:47:00,000 Typedef struct mazgas, int i: struct mazgas * next; mazgas. 607 00:47:00,000 --> 00:47:09,000 Turi būti sudegintos į savo protus kad Typedef. 608 00:47:09,000 --> 00:47:14,000 Quiz 1 turėtų būti suteikti susietą sąrašą mazgas Typedef 609 00:47:14,000 --> 00:47:18,000 ir jums turėtų būti suteikta galimybė nedelsiant rašinėti, kad nustatytų 610 00:47:18,000 --> 00:47:22,000 net galvoti apie tai. 611 00:47:22,000 --> 00:47:27,000 Manau, pora klausimų, kodėl mes turime Struct čia? 612 00:47:27,000 --> 00:47:32,000 Kodėl mes negalime pasakyti mazgas *? 613 00:47:32,000 --> 00:47:35,000 [Studentų] [nesigirdi] 614 00:47:35,000 --> 00:47:38,000 Taip. 615 00:47:38,000 --> 00:47:44,000 Vienintelis dalykas, kuris apibrėžia kaip dalykas mazgas 616 00:47:44,000 --> 00:47:47,000 Typedef pati. 617 00:47:47,000 --> 00:47:55,000 Tačiau, kaip šiuo metu, kai mes rūšies sintaksės per šį struct mazgo apibrėžimą, 618 00:47:55,000 --> 00:48:01,000 mes ne baigtas mūsų Typedef dar, nes Typedef nebaigė, 619 00:48:01,000 --> 00:48:05,000 mazgas neegzistuoja. 620 00:48:05,000 --> 00:48:12,000 Bet Struct mazgas, ir šis mazgas čia, 621 00:48:12,000 --> 00:48:14,000 tai taip pat gali būti vadinamas ką nors kita. 622 00:48:14,000 --> 00:48:16,000 Tai galėtų būti vadinama n. 623 00:48:16,000 --> 00:48:19,000 Tai galėtų būti susiję sąrašas mazgas. 624 00:48:19,000 --> 00:48:21,000 Buvo galima vadinti nieko. 625 00:48:21,000 --> 00:48:26,000 Bet tai Struct mazgas turi būti vadinamas tą patį kaip šis struct mazgas. 626 00:48:26,000 --> 00:48:29,000 Ką jūs vadinate, tai taip pat turi būti čia, 627 00:48:29,000 --> 00:48:32,000 ir kad taip pat atsako antrasis punktas klausimą 628 00:48:32,000 --> 00:48:37,000 kuris yra, kodėl daug kartų, kai jūs matote, structs structs ir tikrų tipų, 629 00:48:37,000 --> 00:48:42,000 pamatysite anoniminius structs, kur jūs tiesiog pamatyti Typedef struct, 630 00:48:42,000 --> 00:48:47,000 įgyvendinimas struct, Žodynas, ar whatever. 631 00:48:47,000 --> 00:48:51,000 >> Kodėl čia mums reikia pasakyti mazgas? 632 00:48:51,000 --> 00:48:54,000 Kodėl negali būti anoniminis struct? 633 00:48:54,000 --> 00:48:56,000 Tai beveik tas pats atsakymas. 634 00:48:56,000 --> 00:48:58,000 [Studentų] Jums reikia kreiptis į jį per struct. 635 00:48:58,000 --> 00:49:04,000 Taip, per struct, jums reikia kreiptis į struct pati. 636 00:49:04,000 --> 00:49:10,000 Jei jūs neduosite struct pavadinimą, jei tai anoniminis struct, jūs negalite kreiptis į jį. 637 00:49:10,000 --> 00:49:17,000 Ir paskutinis, bet ne mažiau kaip jie turėtų būti šiek tiek paprastas, 638 00:49:17,000 --> 00:49:20,000 ir jie turėtų padėti jums suprasti, jei rašote tai žemyn 639 00:49:20,000 --> 00:49:24,000 , kad jūs darote kažką blogo, jei šie dalykai rūšių neturi prasmės. 640 00:49:24,000 --> 00:49:28,000 Paskutinis, bet ne mažiau, kodėl tai turi būti Struct mazgas *? 641 00:49:28,000 --> 00:49:34,000 Kodėl negali jis tiesiog Struct mazgas toliau? 642 00:49:34,000 --> 00:49:37,000 [Studentų] Rodyklė į kitą struct. 643 00:49:37,000 --> 00:49:39,000 Kad neišvengiamai, ko norime. 644 00:49:39,000 --> 00:49:42,000 Kodėl ji galėjo niekada nebus Struct mazgas šalia? 645 00:49:42,000 --> 00:49:50,000 Kodėl ji turi būti Struct mazgas * šalia? Taip. 646 00:49:50,000 --> 00:49:53,000 [Studentų] Tai kaip begalinis ciklas. 647 00:49:53,000 --> 00:49:55,000 Taip. 648 00:49:55,000 --> 00:49:57,000 [Studentų] tai visi į vieną. 649 00:49:57,000 --> 00:50:02,000 Taip, tiesiog galvoti apie tai, kaip mes darysime dydžio ar kažką. 650 00:50:02,000 --> 00:50:08,000 Iš struct dydis iš esmės yra + arba - tam tikros pagal modelį čia arba ten. 651 00:50:08,000 --> 00:50:15,000 Tai iš esmės bus iš struct dalykų dydžių suma. 652 00:50:15,000 --> 00:50:18,000 Tai čia, nieko nekeisdami, dydis bus lengva. 653 00:50:18,000 --> 00:50:24,000 Struct mazgo dydis bus dydis + dydis kitą. 654 00:50:24,000 --> 00:50:27,000 Dydis i bus 4. Kito dydis bus 4. 655 00:50:27,000 --> 00:50:30,000 Struct mazgo dydis bus 8. 656 00:50:30,000 --> 00:50:34,000 Jei mes neturime *, galvoju, sizeof 657 00:50:34,000 --> 00:50:37,000 tada sizeof (i) bus 4. 658 00:50:37,000 --> 00:50:43,000 Struct mazgo dydis toliau bus dydis i + dydis struct mazgo kitą 659 00:50:43,000 --> 00:50:46,000 + Dydis + dydis struct mazgo kitą. 660 00:50:46,000 --> 00:50:55,000 Tai būtų begalinė rekursija mazgų. 661 00:50:55,000 --> 00:51:00,000 Tai kodėl taip yra, kaip viskas turi būti. 662 00:51:00,000 --> 00:51:03,000 >> Vėlgi, tikrai įsiminti, kad 663 00:51:03,000 --> 00:51:06,000 arba bent suprasti, kad tai pakankamai, kad jums gali būti suteikta galimybė 664 00:51:06,000 --> 00:51:12,000 prieţastis, ką ji turėtų atrodyti. 665 00:51:12,000 --> 00:51:14,000 Tai, ką mes ketiname norite įdiegti. 666 00:51:14,000 --> 00:51:18,000 Jei ilgis sąrašo 667 00:51:18,000 --> 00:51:21,000 jums gali apgauti ir nuolat aplink 668 00:51:21,000 --> 00:51:24,000 pasaulio ilgis ar kažką, bet mes neketiname daryti, kad. 669 00:51:24,000 --> 00:51:28,000 Mes ketiname pasikliauti sąrašo ilgį. 670 00:51:28,000 --> 00:51:34,000 Mes jau yra, kad iš esmės kaip paieškos, 671 00:51:34,000 --> 00:51:41,000 todėl mes turime susietą sveikųjų skaičių sąrašą, norėdami pamatyti, jei sveikasis skaičius yra į susietą sąrašą. 672 00:51:41,000 --> 00:51:44,000 Dėti vyksta įterpti sąrašo pradžioje. 673 00:51:44,000 --> 00:51:46,000 Papildyti ketina įtraukti pabaigoje. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted vyksta įterpti į išrūšiuotų sąrašo poziciją. 675 00:51:53,000 --> 00:52:01,000 Insert_sorted rūšies reiškia, kad jūs niekada nesinaudojo Dėti arba pridėti blogų būdų. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted kai jūs įgyvendinant insert_sorted 677 00:52:09,000 --> 00:52:13,000 tarkim, mes turime susijęs sąrašą. 678 00:52:13,000 --> 00:52:18,000 Tai, ką jis šiuo metu atrodo, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Norite įterpti 3, taip ilgai, kaip sąrašas pati yra jau surūšiuoti, 680 00:52:24,000 --> 00:52:27,000 tai lengva rasti, kur 3 priklauso. 681 00:52:27,000 --> 00:52:29,000 Aš pradėti 2. 682 00:52:29,000 --> 00:52:32,000 Gerai, 3 yra didesnis nei 2, todėl aš noriu nesustoti. 683 00:52:32,000 --> 00:52:35,000 Oh, 4 yra per didelis, kad aš žinau, 3 ketina eiti nuo 2 iki 4, 684 00:52:35,000 --> 00:52:39,000 ir aš turiu nustatyti nurodymus ir visi, kad kita. 685 00:52:39,000 --> 00:52:43,000 Bet jei mes ne griežtai naudoti insert_sorted 686 00:52:43,000 --> 00:52:50,000 patinka tegul tiesiog pasakyti, kad aš pridėkite iki keliu ženklas 6, 687 00:52:50,000 --> 00:52:55,000 tada mano susieta sąrašas taps. 688 00:52:55,000 --> 00:53:01,000 Jis dabar neturi jokios prasmės, todėl už insert_sorted, galite tiesiog manyti, 689 00:53:01,000 --> 00:53:04,000 kad šis sąrašas būtų rūšiuojamos, nors veikla yra 690 00:53:04,000 --> 00:53:09,000 , kurie gali sukelti, kad ji negali būti rūšiuojamos, ir viskas. 691 00:53:09,000 --> 00:53:20,000 Rasti naudinga įterpti, kad jie yra pagrindiniai dalykai, kuriuos jūs ketinate turi įgyvendinti. 692 00:53:20,000 --> 00:53:24,000 >> Dabar, skirkite šiek tiek ilgio ir yra, 693 00:53:24,000 --> 00:53:30,000 ir tas turėtų būti gana greitai. 694 00:53:41,000 --> 00:53:48,000 Artėja uždarymo laiko, todėl kiekvienas turi nieko ilgio arba jame yra? 695 00:53:48,000 --> 00:53:50,000 Jie bus beveik identiškas. 696 00:53:50,000 --> 00:53:57,000 [Studentų] ilgis. 697 00:53:57,000 --> 00:54:01,000 Pažiūrėkime, peržiūrą. 698 00:54:01,000 --> 00:54:04,000 Gerai. 699 00:54:12,000 --> 00:54:15,000 Jūs norite paaiškinti? 700 00:54:15,000 --> 00:54:21,000 [Studentų] aš tiesiog sukurti rodyklę mazgas, inicijuoti ir pirmąjį, kuris mūsų pasaulio kintamasis, 701 00:54:21,000 --> 00:54:27,000 ir tada aš patikrinti, pamatyti, jei ji yra niekinis, todėl aš ne gauti seg kaltės ir grįžti 0, jei tai toks atvejis. 702 00:54:27,000 --> 00:54:34,000 Priešingu atveju, aš linijos per, sekti per sveikojo skaičiaus 703 00:54:34,000 --> 00:54:38,000 kiek kartų aš pasiekiami kitą sąrašo elementą 704 00:54:38,000 --> 00:54:43,000 ir tuo pačiu prieaugio operacijos, taip pat pasiekti, kad faktinis elementas, 705 00:54:43,000 --> 00:54:47,000 ir tada aš nuolat atlikti patikrinimus, siekdama įsitikinti, jei tai null, 706 00:54:47,000 --> 00:54:56,000 ir, jei jis niekinis, tada ji nutraukia ir tiesiog grąžina aš atvertas elementų skaičių. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] Ar kas nors turite komentarus dėl nieko? 708 00:55:01,000 --> 00:55:06,000 Tai atrodo bauda teisingumas išmintinga. 709 00:55:06,000 --> 00:55:10,000 [Studentų] Nemanau, kad jums reikia mazgas == null. 710 00:55:10,000 --> 00:55:13,000 Taip, kad jei mazgas == null return 0. 711 00:55:13,000 --> 00:55:18,000 Bet jei mazgas == null tada tai-oh, tai tokia teisingumo klausimas. 712 00:55:18,000 --> 00:55:23,000 Tai buvo tiesiog jūs grįžti i, bet tai nėra komplekte dabar. 713 00:55:23,000 --> 00:55:30,000 Jums tiesiog reikia int i, kad i = 0. 714 00:55:30,000 --> 00:55:34,000 Bet jei mazgas yra niekinis, tada aš vis dar bus 0, 715 00:55:34,000 --> 00:55:39,000 ir mes ketiname grįžti 0, todėl šiuo atveju yra identiška. 716 00:55:39,000 --> 00:55:48,000 Kitas dažnas dalykas yra išlaikyti deklaraciją 717 00:55:48,000 --> 00:55:51,000 mazgo viduje už linijos. 718 00:55:51,000 --> 00:55:54,000 Galima sakyti-oh, ne. 719 00:55:54,000 --> 00:55:56,000 Galime laikyti, nes tai. 720 00:55:56,000 --> 00:55:59,000 Aš tikriausiai įdėti int i = 0 čia, 721 00:55:59,000 --> 00:56:05,000 tada mazgas * node = čia. 722 00:56:05,000 --> 00:56:11,000 Ir tai, turbūt, kaip atsikratyti tai dabar. 723 00:56:11,000 --> 00:56:14,000 Tai turbūt, kaip aš parašiau. 724 00:56:14,000 --> 00:56:21,000 Jūs taip pat galėtų žiūri į jį, kaip šis. 725 00:56:21,000 --> 00:56:25,000 Ši kilpa struktūros čia 726 00:56:25,000 --> 00:56:30,000 turėtų būti beveik lygiai taip pat natūralu kaip int i = 0 727 00:56:30,000 --> 00:56:33,000 i yra mažiau nei ilgio masyvas i + +. 728 00:56:33,000 --> 00:56:38,000 Jei tai, kaip jūs keistumėte per masyvo, tai, kaip galite pakartoti per susietą sąrašą. 729 00:56:38,000 --> 00:56:45,000 >> Tai turėtų būti savaime suprantamu dalyku tam tikru momentu. 730 00:56:45,000 --> 00:56:50,000 Turint tai omenyje, tai bus beveik tas pats. 731 00:56:50,000 --> 00:56:57,000 Jūs ketinate norite pakartoti per susietą sąrašą. 732 00:56:57,000 --> 00:57:02,000 Jei mazgas Aš neįsivaizduoju, kas vertė yra vadinamas. 733 00:57:02,000 --> 00:57:04,000 Mazgas i. 734 00:57:04,000 --> 00:57:15,000 Jei tuo mazgas vertė = i return true, ir viskas. 735 00:57:15,000 --> 00:57:18,000 Atkreipkite dėmesį, kad vienintelis būdas, kuriuo mes kada nors gražins false 736 00:57:18,000 --> 00:57:23,000 jei mes pakartoti per visą susijęs sąrašą ir niekada negali grįžti tiesa, 737 00:57:23,000 --> 00:57:29,000 todėl tai, ką šis daro. 738 00:57:29,000 --> 00:57:36,000 Kaip šalutinis dėmesį, mes tikriausiai nebus gauti įtraukti arba pridėkite iki keliu ženklas. 739 00:57:36,000 --> 00:57:39,000 >> Greitai paskutinė pastaba. 740 00:57:39,000 --> 00:57:52,000 Jei matote statinį raktinį žodį, todėl tarkim statinio int kiekis = 0, 741 00:57:52,000 --> 00:57:56,000 tada mes tai skaičius + +, galite iš esmės galvoti apie tai, kaip pasaulinį kintamąjį, 742 00:57:56,000 --> 00:58:00,000 net jei aš ką tik pasakė, tai yra ne tai, kaip mes ketiname įgyvendinti ilgis. 743 00:58:00,000 --> 00:58:06,000 Darau tai čia, ir tada suskaičiuoti + +. 744 00:58:06,000 --> 00:58:11,000 Bet kokiu būdu mes galime įvesti į mūsų susietą sąrašą, mes incrementing mūsų skaičius mazgas. 745 00:58:11,000 --> 00:58:15,000 Šis punktas yra, ką reiškia statinio raktažodį. 746 00:58:15,000 --> 00:58:20,000 Jei aš tiesiog turėjo int count = 0, kad būtų reguliariai senas pasaulio kintamasis. 747 00:58:20,000 --> 00:58:25,000 Kas yra static int kiekis reiškia, kad tai yra pasaulio kintamasis šiam failui. 748 00:58:25,000 --> 00:58:28,000 Neįmanoma kitą failą, 749 00:58:28,000 --> 00:58:34,000 patinka galvoti apie pset 5, jei jūs pradėjote. 750 00:58:34,000 --> 00:58:39,000 Turite tiek speller.c, ir turite dictionary.c, 751 00:58:39,000 --> 00:58:42,000 ir jei jūs tiesiog paskelbti pasaulio dalykas, tada nieko speller.c 752 00:58:42,000 --> 00:58:45,000 gali būti prieinama dictionary.c ir atvirkščiai. 753 00:58:45,000 --> 00:58:48,000 Visuotiniai kintamieji yra prieinama bet kokio c failas, 754 00:58:48,000 --> 00:58:54,000 bet statiniai kintamieji yra prieinama tik iš failo viduje, 755 00:58:54,000 --> 00:59:01,000 viduje rašybos tikrintuvą arba viduje dictionary.c, 756 00:59:01,000 --> 00:59:06,000 tai yra natūra, kaip aš norėčiau paskelbti mano kintamasis mano masyvo dydis 757 00:59:06,000 --> 00:59:10,000 ar mano žodžių žodyne dydis. 758 00:59:10,000 --> 00:59:15,000 Kadangi aš neturiu norite paskelbti pasaulinį kintamąjį, kad kiekvienas turi teisę susipažinti su 759 00:59:15,000 --> 00:59:18,000 Aš tikrai rūpi tik savo paties tikslams. 760 00:59:18,000 --> 00:59:21,000 >> Šis geras dalykas apie tai, taip pat visa vardas susidūrimo stuff. 761 00:59:21,000 --> 00:59:27,000 Jei kitą failą bando naudoti pasaulinį kintamąjį, pavadintą skaičius, viskas vyks labai, labai negerai, 762 00:59:27,000 --> 00:59:33,000 todėl tai gražiai išlaiko dalykų saugus, ir tik jūs galite jį pasiekti, 763 00:59:33,000 --> 00:59:38,000 ir niekas kitas gali, ir jei kas nors pareiškia globalinę kintamasis vadinamas skaičius, 764 00:59:38,000 --> 00:59:43,000 tada jis netrukdys jūsų statinis kintamasis vadinamas skaičius. 765 00:59:43,000 --> 00:59:47,000 Štai ką statinis yra. Jis yra failas pasaulio kintamasis. 766 00:59:47,000 --> 00:59:52,000 >> Klausimai dėl nieko? 767 00:59:52,000 --> 00:59:59,000 Visas rinkinys. Bye. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]