1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [6. jagu] [mugavam] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Harvardi Ülikool] 3 00:00:04,000 --> 00:00:09,000 [See on CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Me ei pea meie osa küsimustele. 5 00:00:11,000 --> 00:00:17,000 Saatsin URL ruumi enne. 6 00:00:17,000 --> 00:00:22,000 Lõigu alguses esitatud küsimuste öelda- 7 00:00:22,000 --> 00:00:26,000 ilmselt ma ei ole päris unsick-on väga lihtne küsimus 8 00:00:26,000 --> 00:00:28,000 on just see, mida on valgrind? 9 00:00:28,000 --> 00:00:30,000 Mis valgrind teha? 10 00:00:30,000 --> 00:00:34,000 Igaüks taha öelda, mida valgrind teeb? 11 00:00:34,000 --> 00:00:36,000 [Student] Kontrollimine mälu lekkeid. 12 00:00:36,000 --> 00:00:41,000 Jah, valgrind on üldine mälu kontrollija. 13 00:00:41,000 --> 00:00:44,000 See, et lõpuks ütleb teile, kui teil on mõni mälu lekked, 14 00:00:44,000 --> 00:00:49,000 mis on enamasti mida me kasutame seda, sest kui sa tahad 15 00:00:49,000 --> 00:00:54,000 teha ka lahendamist või kui soovite 16 00:00:54,000 --> 00:00:59,000 saada suurt ekraani, pead ei ole mälu lekkeid üldse, 17 00:00:59,000 --> 00:01:01,000 ja kui sul on mälu leke et sa ei leia, 18 00:01:01,000 --> 00:01:04,000 Samuti pidage meeles, et iga kord, kui avate faili 19 00:01:04,000 --> 00:01:07,000 ja kui sa ei sulge, see on mälu leke. 20 00:01:07,000 --> 00:01:10,000 >> Paljud inimesed otsivad mõned sõlme, et nad ei vabastamine 21 00:01:10,000 --> 00:01:15,000 kui tõesti, nad ei sulgenud sõnaraamatu kõige esimene samm. 22 00:01:15,000 --> 00:01:19,000 Samuti ütleb teile, kui teil on mõni vigane loeb või kirjutab, 23 00:01:19,000 --> 00:01:22,000 mis tähendab, kui sa püüad ja määra 24 00:01:22,000 --> 00:01:26,000 see on kauem hunnik ja see ei juhtu SEG süü 25 00:01:26,000 --> 00:01:30,000 kuid valgrind saak see, kui sa ei peaks tegelikult olema kirjalikult seal, 26 00:01:30,000 --> 00:01:33,000 ja nii sa kindlasti ei tohiks olla nende kas. 27 00:01:33,000 --> 00:01:38,000 Kuidas kasutada valgrind? 28 00:01:38,000 --> 00:01:42,000 Kuidas kasutada valgrind? 29 00:01:42,000 --> 00:01:45,000 >> See on üldine küsimus 30 00:01:45,000 --> 00:01:49,000 selline käivitada ja vaadata väljund. 31 00:01:49,000 --> 00:01:51,000 Väljund on valdav palju kordi. 32 00:01:51,000 --> 00:01:54,000 Seal on ka lõbus vigu kui kui teil on mõned kohutavalt vale asja 33 00:01:54,000 --> 00:01:59,000 toimub silmuse, siis hakkab see lõpuks öelda: "Liiga palju vigu. 34 00:01:59,000 --> 00:02:03,000 Ma lähen lõpetada lugedes nüüd. " 35 00:02:03,000 --> 00:02:08,000 See on põhimõtteliselt tekstiline väljund, et teil on sõeluda. 36 00:02:08,000 --> 00:02:13,000 Lõpuks ta ütleb sulle ükskõik mälu lekkeid, mis sul on, 37 00:02:13,000 --> 00:02:16,000 kui palju plokid, mis võib olla kasulik, sest 38 00:02:16,000 --> 00:02:20,000 kui see on üks plokk unfreed, siis on see tavaliselt kergem leida 39 00:02:20,000 --> 00:02:23,000 1000 plokki unfreed. 40 00:02:23,000 --> 00:02:26,000 1000 plokki unfreed tähendab ilmselt sa ei vabastamine 41 00:02:26,000 --> 00:02:30,000 Teie seotud nimekirju asjakohaselt või midagi. 42 00:02:30,000 --> 00:02:32,000 See on valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Nüüd on meil osa küsimusi, 44 00:02:35,000 --> 00:02:38,000 mis sa ei pea alla laadida. 45 00:02:38,000 --> 00:02:41,000 Võite klõpsata minu nimi ja tõmmata neid üles ruumis. 46 00:02:41,000 --> 00:02:44,000 Nüüd klõpsa mind. 47 00:02:44,000 --> 00:02:46,000 Versioon 1 on pinu, mis me teeme esimene. 48 00:02:46,000 --> 00:02:55,000 Kontroll 2 on järjekorda ja Kontroll 3 on üksikult seotud nimekirja. 49 00:02:55,000 --> 00:02:58,000 Alustades meie pinu. 50 00:02:58,000 --> 00:03:02,000 Nagu öeldakse siin, korstnat on üks kõige elementaarsem, 51 00:03:02,000 --> 00:03:07,000 põhiline andmestruktuurid infotehnoloogia. 52 00:03:07,000 --> 00:03:11,000 Väga prototüübi näide on 53 00:03:11,000 --> 00:03:13,000 virna plaate söögisaalis. 54 00:03:13,000 --> 00:03:16,000 See on põhimõtteliselt alati, kui on sisse, et korstnat 55 00:03:16,000 --> 00:03:20,000 keegi kavatseb öelda: "Oh, nagu virna plaate." 56 00:03:20,000 --> 00:03:22,000 Sa Kestab plaadid üles. 57 00:03:22,000 --> 00:03:24,000 Siis, kui lähete tõmmake salve, 58 00:03:24,000 --> 00:03:31,000 esimene plaat, mis on saada tõmmatakse, on viimane, mis pandi virna. 59 00:03:31,000 --> 00:03:34,000 Korstnat ka-nagu öeldakse siin- 60 00:03:34,000 --> 00:03:37,000 meil segment mälu nimetatakse pinu. 61 00:03:37,000 --> 00:03:40,000 Ja miks on selle nimi korstnat? 62 00:03:40,000 --> 00:03:42,000 >> Sest nagu pinu andmestruktuur, 63 00:03:42,000 --> 00:03:46,000 see lükkab ja hüppab korstna raamid korstnat 64 00:03:46,000 --> 00:03:53,000 kus korstna raamid on nagu konkreetse kõne funktsioon. 65 00:03:53,000 --> 00:03:57,000 Ja nagu pinu, siis on alati naasta 66 00:03:57,000 --> 00:04:03,000 alates funktsioon kõne enne saate ette võtta madalama korstnat raamid uuesti. 67 00:04:03,000 --> 00:04:08,000 Sul ei saa olla peamine kõne suva kõne baar ja baar naasta peamine otse. 68 00:04:08,000 --> 00:04:14,000 See on alati pead järgima õige korstna surudes ja popping. 69 00:04:14,000 --> 00:04:18,000 Kaks operatsiooni, nagu ma ütlesin, on push ja pop. 70 00:04:18,000 --> 00:04:20,000 Need on universaalsed tingimused. 71 00:04:20,000 --> 00:04:26,000 Sa peaksid teadma, push ja pop nii korstnad ükskõik mida. 72 00:04:26,000 --> 00:04:28,000 Eks näis järjekorrad on kuidagi teistsugused. 73 00:04:28,000 --> 00:04:32,000 See ei ole tõesti universaalne termin, kuid push ja pop on universaalsed korstnad. 74 00:04:32,000 --> 00:04:34,000 Push on lihtsalt panna virna. 75 00:04:34,000 --> 00:04:37,000 Pop on startida pinu. 76 00:04:37,000 --> 00:04:43,000 Ja me näeme siin oleme meie typedef struktuure korstnat 77 00:04:43,000 --> 00:04:46,000 nii et meil on char ** stringid. 78 00:04:46,000 --> 00:04:51,000 Ära lase hirmul ükski **. 79 00:04:51,000 --> 00:04:54,000 See läheb lõpuks on massiivi stringe 80 00:04:54,000 --> 00:04:58,000 või massiivi osuti sellistele tegelastele, kus 81 00:04:58,000 --> 00:05:00,000 viiteid, et märki kipuvad olema stringid. 82 00:05:00,000 --> 00:05:05,000 See ei pea olema stringid, kuid siin, nad ei kavatse olla stringid. 83 00:05:05,000 --> 00:05:08,000 >> Meil on hulgaliselt stringid. 84 00:05:08,000 --> 00:05:14,000 Meil on suurus, mis näitab, mitu elementi on praegu korstnat 85 00:05:14,000 --> 00:05:19,000 ja siis me võime, mis on, kui palju elemente võib olla pinu. 86 00:05:19,000 --> 00:05:22,000 Võimsus peaks alustad nagu midagi suurem kui 1, 87 00:05:22,000 --> 00:05:27,000 kuid suurus läheb alustad kui 0. 88 00:05:27,000 --> 00:05:36,000 Nüüd on põhiliselt kolmel erineval viisil saab mõelda pinu. 89 00:05:36,000 --> 00:05:39,000 Noh, seal on ilmselt rohkem, kuid kaks peamist võimalust on 90 00:05:39,000 --> 00:05:43,000 mida saab rakendada, kasutades massiivi, või saab rakendada, kasutades seotud loetelu. 91 00:05:43,000 --> 00:05:48,000 Seotud nimekirjad on selline triviaalne teha korstnad. 92 00:05:48,000 --> 00:05:51,000 See on väga lihtne teha virna kasutades lingitud nimekirjad, 93 00:05:51,000 --> 00:05:55,000 Nii et siin me läheme tegema korstnat kasutades massiive, 94 00:05:55,000 --> 00:05:59,000 ja siis kasutades massiive, seal on ka kaks võimalust võite mõelda. 95 00:05:59,000 --> 00:06:01,000 Enne, kui ma ütlesin, et meil on võime korstna 96 00:06:01,000 --> 00:06:04,000 nii me mahub elemendi pinu. 97 00:06:04,000 --> 00:06:09,000 >> Üks viis see võib juhtuda, on nii kiiresti kui jõuad 10 elementi, siis sa oled teinud. 98 00:06:09,000 --> 00:06:13,000 Sa võid teada, et on ülemine piir 10 asja maailmas 99 00:06:13,000 --> 00:06:16,000 et sa ei pea kunagi rohkem kui 10 asju oma korstnat 100 00:06:16,000 --> 00:06:20,000 millisel juhul saab olema ülemise suuruse kohta oma korstnat. 101 00:06:20,000 --> 00:06:23,000 Või siis võiks olla oma korstnat tuleb ääretu, 102 00:06:23,000 --> 00:06:27,000 aga kui sa teed massiivi, mis tähendab, et iga kord kui jõuad 10 elementi, 103 00:06:27,000 --> 00:06:29,000 siis sa lähed pea kasvada kuni 20 elementi, ja kui vajutad 20 elementi, 104 00:06:29,000 --> 00:06:33,000 sa lähed on kasvatada oma array 30 elementi või 40 elementi. 105 00:06:33,000 --> 00:06:37,000 Sa lähed vaja suurendada võimsust, mis on see, mida me teeme siin. 106 00:06:37,000 --> 00:06:40,000 Iga kord jõuame maksimaalne suurus meie korstnat 107 00:06:40,000 --> 00:06:46,000 kui vajutada midagi muud, me ei kavatse vaja suurendada võimsust. 108 00:06:46,000 --> 00:06:50,000 Siin me oleme push deklareeritud bool push (char * str). 109 00:06:50,000 --> 00:06:54,000 Char * str on string, mis me surudes peale virna, 110 00:06:54,000 --> 00:06:58,000 ja bool lihtsalt ütleb, kas meil õnnestus või ebaõnnestus. 111 00:06:58,000 --> 00:07:00,000 >> Kuidas saaksime jätta? 112 00:07:00,000 --> 00:07:04,000 Mis on ainus asjaolu, et sa ei mõtle 113 00:07:04,000 --> 00:07:07,000 kus meil oleks vaja tagasi false? 114 00:07:07,000 --> 00:07:09,000 Jah. 115 00:07:09,000 --> 00:07:12,000 [Student] Kui see on täis ja me kasutame piirneb rakendamist. 116 00:07:12,000 --> 00:07:17,000 Jah, nii kuidas me määratleme-ta vastas 117 00:07:17,000 --> 00:07:23,000 kas see on täielik ja me kasutame tõkestatud rakendamist. 118 00:07:23,000 --> 00:07:26,000 Siis me kindlasti tagasi false. 119 00:07:26,000 --> 00:07:31,000 Niipea kui me hit 10 asja sisse massiiv, me ei mahu 11, nii et me tagasi false. 120 00:07:31,000 --> 00:07:32,000 Mis siis, kui see on ääretu? Jah. 121 00:07:32,000 --> 00:07:38,000 Kui te ei saa laiendada massiivi mingil põhjusel. 122 00:07:38,000 --> 00:07:43,000 Jah, nii mälu on piiratud ressurss, 123 00:07:43,000 --> 00:07:51,000 ja lõpuks, kui me hoida surudes asju peale virna ikka ja jälle, 124 00:07:51,000 --> 00:07:54,000 me ei kavatse proovida ja eraldada suurem massiiv sobivaks 125 00:07:54,000 --> 00:07:59,000 suurem võimsus ja malloc või mis iganes me kasutame läheb tagasi false. 126 00:07:59,000 --> 00:08:02,000 Noh, malloc naaseb null. 127 00:08:02,000 --> 00:08:05,000 >> Pea meeles, et iga kord, kui kunagi helistada malloc, siis tuleks kontrollida, kas see 128 00:08:05,000 --> 00:08:12,000 tagastab null või muud, mis on õigsuse mahaarvamist. 129 00:08:12,000 --> 00:08:17,000 Kuna me tahame ääretu korstnat 130 00:08:17,000 --> 00:08:21,000 ainult juhul me ei kavatse tagasi vale on, kui püüame 131 00:08:21,000 --> 00:08:26,000 suurendada suutlikkust ja malloc või mis iganes FALSE. 132 00:08:26,000 --> 00:08:30,000 Siis pop võtab ühtegi argumenti, 133 00:08:30,000 --> 00:08:37,000 ja see tagastab stringi, mis on peal virnas. 134 00:08:37,000 --> 00:08:41,000 Ükskõik oli viimati lükatakse edasi pinu on see, mis pop on tagasi, 135 00:08:41,000 --> 00:08:44,000 ja see ka eemaldab selle virna. 136 00:08:44,000 --> 00:08:50,000 Ja märkate, et ta naaseb null, kui pole midagi pinu. 137 00:08:50,000 --> 00:08:53,000 Alati on võimalik, et korstnat on tühi. 138 00:08:53,000 --> 00:08:55,000 Java, kui sa oled harjunud, et või teistes keeltes, 139 00:08:55,000 --> 00:09:01,000 püüdes pop tühjast korstnat võib põhjustada erand või midagi. 140 00:09:01,000 --> 00:09:09,000 >> Aga C, null on selline palju juhtumeid, kuidas me käsitleme neid probleeme. 141 00:09:09,000 --> 00:09:13,000 Tulles null on, kuidas me kavatseme tähenda, et korstnat oli tühi. 142 00:09:13,000 --> 00:09:16,000 Oleme lisanud koodi, mis paneb proovile oma korstnat funktsionaalsust, 143 00:09:16,000 --> 00:09:19,000 rakendada push ja pop. 144 00:09:19,000 --> 00:09:23,000 See ei ole palju koodi. 145 00:09:23,000 --> 00:09:40,000 Ma ei unusta kunagi tegelikult, enne kui me seda teeme, vihje, vihje- 146 00:09:40,000 --> 00:09:44,000 kui sa pole seda näinud, malloc ei ole ainus funktsioon 147 00:09:44,000 --> 00:09:47,000 et eraldab mälu hunnik teile. 148 00:09:47,000 --> 00:09:51,000 On pere alloc funktsioone. 149 00:09:51,000 --> 00:09:53,000 Esimene on malloc, mis sa oled harjunud. 150 00:09:53,000 --> 00:09:56,000 Siis on calloc, mis teeb sama asja nagu malloc, 151 00:09:56,000 --> 00:09:59,000 kuid see nulli kõike sinu eest. 152 00:09:59,000 --> 00:10:04,000 Kui sa oled kunagi tahtnud, et seada kõik tühjaks pärast mallocing midagi 153 00:10:04,000 --> 00:10:06,000 sa oleks pidanud lihtsalt kasutada calloc esimese koha asemel kirjalikult 154 00:10:06,000 --> 00:10:09,000 jaoks silmus nullini viia kogu ploki mälu. 155 00:10:09,000 --> 00:10:15,000 >> RealLOC on nagu malloc ja on palju erijuhtudel 156 00:10:15,000 --> 00:10:19,000 kuid põhimõtteliselt mida RealLOC ei ole 157 00:10:19,000 --> 00:10:24,000 see võtab osuti, mis oli juba eraldatud. 158 00:10:24,000 --> 00:10:27,000 RealLOC on funktsioon, mida soovite pöörata tähelepanu siia. 159 00:10:27,000 --> 00:10:31,000 See võtab osuti, mis olid juba naasnud malloc. 160 00:10:31,000 --> 00:10:35,000 Oletame, et teil nõuda malloc pointer 10 baiti. 161 00:10:35,000 --> 00:10:38,000 Siis hiljem saad aru, et sa tahtsid 20 baiti, 162 00:10:38,000 --> 00:10:42,000 nii te nimetate RealLOC selle osuti on 20 baiti, 163 00:10:42,000 --> 00:10:47,000 ja RealLOC kopeerib automaatselt üle kõik sinu jaoks. 164 00:10:47,000 --> 00:10:51,000 Kui sa just helistas malloc jälle, nagu mul on plokk 10 baiti. 165 00:10:51,000 --> 00:10:53,000 Nüüd on mul vaja plokk 20 baiti, 166 00:10:53,000 --> 00:10:58,000 nii et kui ma malloc 20 baiti, siis mul on käsitsi kopeerida üle 10 baiti alates esimese asjana 167 00:10:58,000 --> 00:11:01,000 arvesse teise asi ja siis vaba esimene asi. 168 00:11:01,000 --> 00:11:04,000 RealLOC tegelen selle sulle. 169 00:11:04,000 --> 00:11:11,000 >> Teade allkirja saab olema tühine *, 170 00:11:11,000 --> 00:11:15,000 mis on lihtsalt tagastab viida, mis ploki mälu, 171 00:11:15,000 --> 00:11:17,000 siis void * ptr. 172 00:11:17,000 --> 00:11:22,000 Sa ei mõtle void * geneerilise pointer. 173 00:11:22,000 --> 00:11:27,000 Üldiselt sa kunagi tegelema void *, 174 00:11:27,000 --> 00:11:30,000 kuid malloc on tagasi void *, ja siis ta on lihtsalt kasutada nagu 175 00:11:30,000 --> 00:11:34,000 see on tegelikult saab olema char *. 176 00:11:34,000 --> 00:11:37,000 Eelmine void *, mis oli tagastatud malloc 177 00:11:37,000 --> 00:11:41,000 hakkab nüüd tuleb edasi anda RealLOC ja seejärel suurus 178 00:11:41,000 --> 00:11:49,000 on uus baitide arv, mida soovite jagada, nii endale võimsust. 179 00:11:49,000 --> 00:11:57,000 Ma annan sulle paar minutit, ja teha seda meie ruumis. 180 00:11:57,000 --> 00:12:02,000 Alusta 1. läbivaatamine. 181 00:12:16,000 --> 00:12:21,000 Ma peatan teie pärast loodetavasti umbes piisavalt aega, et rakendada push, 182 00:12:21,000 --> 00:12:24,000 ja siis ma teen sulle veel ühe pausi teha pop. 183 00:12:24,000 --> 00:12:27,000 Aga see tõesti ei ole nii palju koodi üldse. 184 00:12:27,000 --> 00:12:35,000 Kõige kood on tõenäoliselt laieneb kraami, laiendades võimsust. 185 00:12:35,000 --> 00:12:39,000 Okei, mingit survet olla täiesti tehtud, 186 00:12:39,000 --> 00:12:47,000 kuid nii kaua, kui teil on tunne, et sa oled õigel teel, see on hea. 187 00:12:47,000 --> 00:12:53,000 >> Kas keegi mingit koodi nad tunnevad end minuga mugavalt tõmmates? 188 00:12:53,000 --> 00:12:59,000 Jah, ma teen seda, aga kas keegi on mingeid koodi ma ei tõmba? 189 00:12:59,000 --> 00:13:05,000 Okei, sa saad alustada, salvestage see, mis see on? 190 00:13:05,000 --> 00:13:09,000 Olen alati unustada, et samm. 191 00:13:09,000 --> 00:13:15,000 Okei, vaadeldes tõuke, 192 00:13:15,000 --> 00:13:18,000 sa tahad selgitada oma koodi? 193 00:13:18,000 --> 00:13:24,000 [Student] Esiteks, ma kasvanud suurus. 194 00:13:24,000 --> 00:13:28,000 Ma arvan, et ma peaks olema, et-igatahes, ma kasvanud suurus, 195 00:13:28,000 --> 00:13:31,000 ja ma näen, kui see on väiksem kui võimsus. 196 00:13:31,000 --> 00:13:36,000 Ja kui see on väiksem kui võimsus, lisan, et massiivi meil juba on. 197 00:13:36,000 --> 00:13:42,000 Ja kui see ei ole, ma korrutan võimsus 2, 198 00:13:42,000 --> 00:13:50,000 ja ma ümber stringid massiivi midagi suurem võimsus suurus nüüd. 199 00:13:50,000 --> 00:13:55,000 Ja siis kui see ebaõnnestub, ma ütlen kasutaja ja tagastab false, 200 00:13:55,000 --> 00:14:04,000 ja kui see on korras, siis panin stringi uue koha. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] ka teate, et me kasutasime kena BitWise operaatori siin 202 00:14:07,000 --> 00:14:09,000 korrutada 2-ga. 203 00:14:09,000 --> 00:14:11,000 Pea meeles, vasakule nihe alati saab korrutatakse 2-ga. 204 00:14:11,000 --> 00:14:15,000 Right Shift on jagatud 2 nii kaua kui mäletan, et see tähendab, 205 00:14:15,000 --> 00:14:18,000 jagage 2 nagu täisarv jagatud 2. 206 00:14:18,000 --> 00:14:20,000 See võib kärpida 1 siin või seal. 207 00:14:20,000 --> 00:14:26,000 Aga nihe vasakule 1. alati saab korrutada 2 208 00:14:26,000 --> 00:14:32,000 kui sa ülevoolu piire täisarv, ja siis ei ole see. 209 00:14:32,000 --> 00:14:34,000 Külg kommentaari. 210 00:14:34,000 --> 00:14:39,000 Mulle meeldib teha-see ei muutu kodeerimine mingil moel, 211 00:14:39,000 --> 00:14:48,000 aga mulle meeldib teha midagi sellist. 212 00:14:48,000 --> 00:14:51,000 See tegelikult toimub, et see veidi kauem. 213 00:15:04,000 --> 00:15:08,000 Võib-olla see ei ole täiuslik asja näidata, 214 00:15:08,000 --> 00:15:14,000 aga mulle meeldib segmendi see need plokid- 215 00:15:14,000 --> 00:15:17,000 okei, kui see, kui juhtub, siis ma teen midagi, 216 00:15:17,000 --> 00:15:19,000 ja siis funktsioon on tehtud. 217 00:15:19,000 --> 00:15:22,000 Ma ei pea seejärel kerige minu silmis täiesti alla funktsioon 218 00:15:22,000 --> 00:15:25,000 näha, mis juhtub pärast teine. 219 00:15:25,000 --> 00:15:27,000 See on kui see, kui juhtub, siis ma lihtsalt tagasi. 220 00:15:27,000 --> 00:15:30,000 Samuti on kena lisakasu kõik väljaspool seda 221 00:15:30,000 --> 00:15:33,000 nüüd nihutatakse vasakule kord. 222 00:15:33,000 --> 00:15:40,000 Ma ei pea enam-kui sa kunagi lähedal naeruväärselt pikad read, 223 00:15:40,000 --> 00:15:45,000 siis need 4 baiti aitab, ja ka rohkem vasakule midagi on, 224 00:15:45,000 --> 00:15:48,000 vähem ülekoormatud te arvate, kui meeldib-okei, ma pean meeles pidama 225 00:15:48,000 --> 00:15:53,000 Ma olen praegu samas silmus sees veel sees jaoks silmus. 226 00:15:53,000 --> 00:15:58,000 Anywhere võite seda teha kohe tagasi, mulle nagu meeldib. 227 00:15:58,000 --> 00:16:05,000 See on täiesti vabatahtlik ja mitte oodata kuidagi. 228 00:16:05,000 --> 00:16:12,000 >> [Student] Kas tuleb suur - seda negatiivsete tingimus? 229 00:16:12,000 --> 00:16:19,000 Ebaõnnestuvad seisukorras siin on meil õnnestunud RealLOC, nii et jah. 230 00:16:19,000 --> 00:16:22,000 Märka, kuidas on negatiivsete seisukorras, arvatavasti, 231 00:16:22,000 --> 00:16:26,000 kui me tasuta kraami hiljem, me alati läbi kukkunud 232 00:16:26,000 --> 00:16:29,000 ükskõik kui palju kordi me proovi sundida midagi. 233 00:16:29,000 --> 00:16:32,000 Kui me hoida surudes, me hoida incrementing suurus, 234 00:16:32,000 --> 00:16:36,000 kuigi me ei pane midagi peale virna. 235 00:16:36,000 --> 00:16:39,000 Tavaliselt me ​​ei juurdekasvu suurus kuni 236 00:16:39,000 --> 00:16:43,000 pärast oleme edukalt panna see pinu. 237 00:16:43,000 --> 00:16:50,000 Soovime seda teha, öelda, kas siin ja siin. 238 00:16:50,000 --> 00:16:56,000 Ja siis selle asemel, et öelda s.size ≤ maht, seda on vähem kui võimsus, 239 00:16:56,000 --> 00:17:01,000 ainult sellepärast kolisime kus kõik oli. 240 00:17:01,000 --> 00:17:07,000 >> Ja pidage meeles, ainus koht, et me võiks tagasi false 241 00:17:07,000 --> 00:17:14,000 on siin, kus RealLOC tagastatakse null, 242 00:17:14,000 --> 00:17:19,000 ja kui juhtub, et mäletan standardviga, 243 00:17:19,000 --> 00:17:22,000 äkki sa võiksid kaaluda seda juhul, kui soovite printida standardviga, 244 00:17:22,000 --> 00:17:26,000 nii fprintf stderr asemel lihtsalt printida otse standard välja. 245 00:17:26,000 --> 00:17:31,000 Jällegi, see pole ootus, kuid kas see on viga, 246 00:17:31,000 --> 00:17:41,000 kirjuta printf, siis võiksite teha seda printida standardviga asemel standard välja. 247 00:17:41,000 --> 00:17:44,000 >> Igaüks on midagi märkida? Jah. 248 00:17:44,000 --> 00:17:47,000 [Student] Kas te lähete üle [kuuldamatu]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Jah, tegelik binariness seda või lihtsalt, mis see on? 250 00:17:55,000 --> 00:17:57,000 [Student] Nii et sa korrutada see 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Jah, põhimõtteliselt. 252 00:17:59,000 --> 00:18:11,000 In binaarne maa, meil on alati meie kogumi numbrit. 253 00:18:11,000 --> 00:18:22,000 Shifting see vasak 1. põhiliselt lisab seda siin paremal pool. 254 00:18:22,000 --> 00:18:25,000 Tagasi sellele, lihtsalt pea meeles, et kõik binaarne 255 00:18:25,000 --> 00:18:28,000 on võimsus 2, nii et see moodustab 2 0, 256 00:18:28,000 --> 00:18:30,000 see 2 kuni 1, see 2 2. 257 00:18:30,000 --> 00:18:33,000 Kui sisestate 0 kuni paremal pool nüüd, me lihtsalt minema kõik üle. 258 00:18:33,000 --> 00:18:38,000 Mida varem 2 0 on nüüd 2 1, 2 kuni 2. 259 00:18:38,000 --> 00:18:41,000 Paremal küljel, et me sisestatud 260 00:18:41,000 --> 00:18:44,000 paratamatult saab olema 0, 261 00:18:44,000 --> 00:18:46,000 mis mõtet. 262 00:18:46,000 --> 00:18:49,000 Kui sa kunagi Arvu korrutamiseks 2, ta ei kavatse lõpuks kummaline, 263 00:18:49,000 --> 00:18:54,000 nii 2 0 koht peaks olema 0, 264 00:18:54,000 --> 00:18:59,000 ja see, mida I poolaasta hoiatati enne on, kui sul juhtub minema 265 00:18:59,000 --> 00:19:01,000 kaugemale bittide arvuga täisarv, 266 00:19:01,000 --> 00:19:04,000 siis see 1 läheb lõpuks läheb maha. 267 00:19:04,000 --> 00:19:10,000 See on ainus mure, kui teil juhtub olema tegemist tõesti suur võimekus. 268 00:19:10,000 --> 00:19:15,000 Aga sel hetkel, siis olete tegelevad massiivi miljardeid asju, 269 00:19:15,000 --> 00:19:25,000 mis ei pruugi sobituda mälu niikuinii. 270 00:19:25,000 --> 00:19:31,000 >> Nüüd saame pop, mis on veelgi lihtsam. 271 00:19:31,000 --> 00:19:36,000 Sa võid seda teha nagu kui juhtub, et pop terve hunnik, 272 00:19:36,000 --> 00:19:38,000 ja nüüd sa oled poole võimsusega uuesti. 273 00:19:38,000 --> 00:19:42,000 Sa võid RealLOC kahaneb mälu teil on, 274 00:19:42,000 --> 00:19:47,000 aga sa ei pea muretsema, et nii ainult RealLOC juhul saab olema 275 00:19:47,000 --> 00:19:50,000 kasvab mälu, kunagi kahanemine mälu, 276 00:19:50,000 --> 00:19:59,000 mis toimub, et pop super lihtne. 277 00:19:59,000 --> 00:20:02,000 Nüüd järjekorrad, mis saab olema nagu korstnad, 278 00:20:02,000 --> 00:20:06,000 kuid selleks, et te võtate asju teha vastupidine. 279 00:20:06,000 --> 00:20:10,000 Prototüübi näide järjekord on rida, 280 00:20:10,000 --> 00:20:12,000 nii et ma arvan, kui sa olid inglise, oleksin öelnud 281 00:20:12,000 --> 00:20:17,000 prototüübi näide järjekord on sabas. 282 00:20:17,000 --> 00:20:22,000 Nii nagu joon, kui sa oled esimene inimene liin, 283 00:20:22,000 --> 00:20:24,000 ootate olla esimene inimene väljaspool järjekorda. 284 00:20:24,000 --> 00:20:31,000 Kui sa oled viimane inimene kooskõlas, te ei kavatse on viimane inimene hooldada. 285 00:20:31,000 --> 00:20:35,000 Kutsume et FIFO muster, samas korstnat oli LIFO muster. 286 00:20:35,000 --> 00:20:40,000 Need sõnad on päris universaalne. 287 00:20:40,000 --> 00:20:46,000 >> Nagu korstnad ja erinevalt massiivid, järjekorrad tavaliselt ei võimalda juurdepääsu elemendid keskel. 288 00:20:46,000 --> 00:20:50,000 Siin korstnat, meil on push ja pop. 289 00:20:50,000 --> 00:20:54,000 Siin me juhtumisi on neid kutsunud Lisa järjekorda ja dequeue. 290 00:20:54,000 --> 00:20:58,000 Olen kuulnud neid nimetatakse vahetustega ja unshift. 291 00:20:58,000 --> 00:21:02,000 Olen kuulnud inimesi rääkimas, push ja pop kohaldatakse ka järjekorrad. 292 00:21:02,000 --> 00:21:05,000 Olen kuulnud, sisestage, eemaldage, 293 00:21:05,000 --> 00:21:11,000 nii push ja pop, kui te räägite korstnad, olete tõukamiseks ja popping. 294 00:21:11,000 --> 00:21:16,000 Kui sa räägid järjekorrad, võid valida sõnu, mida soovite kasutada 295 00:21:16,000 --> 00:21:23,000 paigaldamise ja eemaldamise ning puudub üksmeel selles, milline see peaks olema nn. 296 00:21:23,000 --> 00:21:27,000 Aga siin on meil Lisa järjekorda ja dequeue. 297 00:21:27,000 --> 00:21:37,000 Nüüd struct näeb välja peaaegu identsed korstnat struct. 298 00:21:37,000 --> 00:21:40,000 Aga meil on jälgida pea. 299 00:21:40,000 --> 00:21:44,000 Ma arvan, et see ütleb siin, kuid miks me vajame peas? 300 00:21:53,000 --> 00:21:57,000 Prototüübid on põhimõtteliselt identne push ja pop. 301 00:21:57,000 --> 00:21:59,000 Sa ei mõtle seda push ja pop. 302 00:21:59,000 --> 00:22:08,000 Ainus erinevus on see pop on tagasi-, mitte viimasena, see on jälle esimene. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, või midagi. 304 00:22:12,000 --> 00:22:14,000 Ja siin on algus. 305 00:22:14,000 --> 00:22:17,000 Meie järjekord on täiesti täis, nii et seal on neli elemente. 306 00:22:17,000 --> 00:22:21,000 Lõpuks meie järjekord on praegu 2 307 00:22:21,000 --> 00:22:24,000 ja nüüd me läheme lisada midagi muud. 308 00:22:24,000 --> 00:22:29,000 >> Kui me tahame lisada, et midagi, mida meie tegime korstna versioon 309 00:22:29,000 --> 00:22:36,000 on meil laiendada meie ploki mälu. 310 00:22:36,000 --> 00:22:40,000 Mis on sellega probleem? 311 00:22:40,000 --> 00:22:45,000 [Student] Sa liigud 2. 312 00:22:45,000 --> 00:22:51,000 Mis ma enne ütlesin on otsas järjekorda, 313 00:22:51,000 --> 00:22:57,000 see ei ole loogiline, et me stardivad 1, 314 00:22:57,000 --> 00:23:01,000 siis me tahame dequeue 1, siis dequeue 3, siis dequeue 4, 315 00:23:01,000 --> 00:23:05,000 siis dequeue 2, siis dequeue see üks. 316 00:23:05,000 --> 00:23:08,000 Me ei saa kasutada RealLOC nüüd, 317 00:23:08,000 --> 00:23:11,000 või vähemalt, sa pead kasutama RealLOC teistmoodi. 318 00:23:11,000 --> 00:23:15,000 Aga sa ilmselt ei tohiks lihtsalt kasutada RealLOC. 319 00:23:15,000 --> 00:23:18,000 Sa ei kavatse on käsitsi kopeerida oma mälu. 320 00:23:18,000 --> 00:23:21,000 >> Seal on kaks funktsiooni kopeerida mälu. 321 00:23:21,000 --> 00:23:25,000 Seal on memcopy ja memmove. 322 00:23:25,000 --> 00:23:29,000 Ma olen praegu lugemine mees leheküljed, et näha, milline neist sa lähed soovite kasutada. 323 00:23:29,000 --> 00:23:35,000 Okei, memcopy, vahe on 324 00:23:35,000 --> 00:23:38,000 et memcopy ja memmove, üks tegeleb juhtumi õigesti 325 00:23:38,000 --> 00:23:41,000 kuhu kopeerimine arvesse piirkonnas, mis juhtub kattuda regioon 326 00:23:41,000 --> 00:23:46,000 sa kopeerimist. 327 00:23:46,000 --> 00:23:50,000 Memcopy ei saa sellega hakkama. Memmove teeb. 328 00:23:50,000 --> 00:23:59,000 Sa ei mõtle probleemi- 329 00:23:59,000 --> 00:24:09,000 oletame, et ma tahan kopeerida selle kuti, 330 00:24:09,000 --> 00:24:13,000 Nende nelja kuni see kutt. 331 00:24:13,000 --> 00:24:16,000 In the end, mida array peaks välja nägema 332 00:24:16,000 --> 00:24:26,000 pärast koopia on 2, 1, 2, 1, 3, 4, ja siis mõned asjad lõpus. 333 00:24:26,000 --> 00:24:29,000 Aga see sõltub, millises järjekorras me tegelikult kopeerida, 334 00:24:29,000 --> 00:24:32,000 sest kui me ei arva, et piirkond me kopeerimine sisse 335 00:24:32,000 --> 00:24:35,000 kattub üks me kopeerimist, 336 00:24:35,000 --> 00:24:46,000 siis me võiksime teha nagu alguses siin, kopeerige 2 arvesse kohas me tahame minna, 337 00:24:46,000 --> 00:24:52,000 seejärel liikuda meie osuti edasi. 338 00:24:52,000 --> 00:24:56,000 >> Nüüd me ei kavatse olla siin ja siin, ja nüüd tahame kopeerida 339 00:24:56,000 --> 00:25:04,000 see kutt seda meest ja liikuda meie osuti edasi. 340 00:25:04,000 --> 00:25:07,000 Mis me hakkame lõpuks saada on 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 asemel korral 2, 1, 2, 1, 3, 4, sest 342 00:25:10,000 --> 00:25:15,000 2, 1 kaalus originaal 3, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove käepidemed, et õigesti. 344 00:25:19,000 --> 00:25:23,000 Sel juhul põhiliselt just alati kasutada memmove 345 00:25:23,000 --> 00:25:26,000 sest see tegeleb ta õigesti. 346 00:25:26,000 --> 00:25:29,000 See üldiselt ei täida enam hullemaks minna. 347 00:25:29,000 --> 00:25:32,000 Idee on mitte alustada algusest ja kopeerimine sel viisil 348 00:25:32,000 --> 00:25:35,000 nagu me tegime siin, siis hakkab otsast ja kopeerib, 349 00:25:35,000 --> 00:25:38,000 ja sel juhul sa ei saa kunagi olla probleem. 350 00:25:38,000 --> 00:25:40,000 Ei saa jõudluse kadunud. 351 00:25:40,000 --> 00:25:47,000 Kasutage alati memmove. Mitte kunagi muretsema memcopy. 352 00:25:47,000 --> 00:25:51,000 Ja see, kui sa lähed pea eraldi memmove 353 00:25:51,000 --> 00:26:01,000 pakitud ümber osa oma järjekorda. 354 00:26:01,000 --> 00:26:04,000 Ära muretse, kui mitte täiesti valmis. 355 00:26:04,000 --> 00:26:10,000 See on raskem kui pinu, push ja pop. 356 00:26:10,000 --> 00:26:15,000 >> Igaüks on kood, võiksime teha koostööd? 357 00:26:15,000 --> 00:26:21,000 Isegi kui täiesti puudulik? 358 00:26:21,000 --> 00:26:23,000 [Student] Jah, see on täiesti puudulik, kuigi. 359 00:26:23,000 --> 00:26:27,000 Täiesti puudulik on ilus nii kaua kui me-saate salvestada läbivaatamist? 360 00:26:27,000 --> 00:26:32,000 Ma unustada, et iga kord. 361 00:26:32,000 --> 00:26:39,000 Okei, ignoreerides mis juhtub, kui me peame suurust asju. 362 00:26:39,000 --> 00:26:42,000 Täiesti ignoreerida resize. 363 00:26:42,000 --> 00:26:49,000 Selgitage see kood. 364 00:26:49,000 --> 00:26:54,000 Ma kontrollin kõigepealt, kui suurus on väiksem kui koopia kõigepealt 365 00:26:54,000 --> 00:27:01,000 ja siis pärast, et ma sisestan-ma võtan pea + suurus, 366 00:27:01,000 --> 00:27:05,000 ja ma veenduge, et see murtakse võimsus massiiv, 367 00:27:05,000 --> 00:27:08,000 ja ma sisestan uue stringi selles asendis. 368 00:27:08,000 --> 00:27:12,000 Siis ma suurendama ning tagastab tõsi. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] See on kindlasti üks neid juhtumeid, kus sa lähed tahad olla kasutades mod. 370 00:27:22,000 --> 00:27:25,000 Igasugune Juhul kui olete ümbriste ümber, kui te arvate ümbriste ümber, 371 00:27:25,000 --> 00:27:29,000 kohe mõte peaks olema moderaator. 372 00:27:29,000 --> 00:27:36,000 Nagu kiire optimeerimine / muuta oma koodi ühele reale lühem, 373 00:27:36,000 --> 00:27:42,000 märkate, et joon kohe pärast selle ühe 374 00:27:42,000 --> 00:27:53,000 on lihtsalt suuruse + +, nii et teil ühendada seda arvesse seda joont, suurus + +. 375 00:27:53,000 --> 00:27:58,000 Nüüd on siin, meil puhul 376 00:27:58,000 --> 00:28:01,000 kus meil ei ole piisavalt mälu, 377 00:28:01,000 --> 00:28:05,000 nii me suurendada meie suutlikkust 2. 378 00:28:05,000 --> 00:28:09,000 Ma arvan, et sa võiksid olla sama probleem, kuid me ei saa eirata seda nüüd, 379 00:28:09,000 --> 00:28:13,000 kus, kui sa ei tõsta oma suutlikkust, 380 00:28:13,000 --> 00:28:18,000 siis sa lähed tahad, et vähendada oma võimsust 2 uuesti. 381 00:28:18,000 --> 00:28:24,000 Teine lühike märkus on nagu saate teha + =, 382 00:28:24,000 --> 00:28:30,000 saate ka teha << =. 383 00:28:30,000 --> 00:28:43,000 Peaaegu kõike saab minna enne võrdub, + =, | =, & =, << =. 384 00:28:43,000 --> 00:28:52,000 Char * uus on meie uus ploki mälu. 385 00:28:52,000 --> 00:28:55,000 Oh, siin. 386 00:28:55,000 --> 00:29:02,000 >> Mida inimesed mõtlevad tüüp meie uus ploki mälu? 387 00:29:02,000 --> 00:29:06,000 [Student] See peaks olema char **. 388 00:29:06,000 --> 00:29:12,000 Mõeldes tagasi meie struct siin, 389 00:29:12,000 --> 00:29:14,000 stringid on see, mida me ümberjaotamise. 390 00:29:14,000 --> 00:29:21,000 Teeme kogu uus dünaamiline ladustamise elemendid järjekorda. 391 00:29:21,000 --> 00:29:25,000 Mida me ei kavatse paigutada oma stringid on see, mida me mallocing just nüüd, 392 00:29:25,000 --> 00:29:30,000 ja nii uus saab olema char **. 393 00:29:30,000 --> 00:29:34,000 See saab olema array stringid. 394 00:29:34,000 --> 00:29:38,000 Siis milline on juhtum, mille alusel me läheme tagasi false? 395 00:29:38,000 --> 00:29:41,000 [Student] me peaksime tegema char *? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Jah, hea kõne. 397 00:29:44,000 --> 00:29:46,000 [Student] Mis see oli? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Me tahtsime teha suurus char * sest me ei ole enam- 399 00:29:49,000 --> 00:29:53,000 see oleks tegelikult väga suur probleem, sest sizeof (char) oleks 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof char * saab olema 4, 401 00:29:55,000 --> 00:29:58,000 nii palju kordi, kui olete tegelevad ints, 402 00:29:58,000 --> 00:30:01,000 siis kipuvad minema sellega kuna suurus int ja suurus int * 403 00:30:01,000 --> 00:30:04,000 32-bitine süsteem saab olema sama asi. 404 00:30:04,000 --> 00:30:09,000 Aga siin, sizeof (char) ja sizeof (char *) nüüd saab olema sama asi. 405 00:30:09,000 --> 00:30:15,000 >> Milline on olukord, kus me tagasi false? 406 00:30:15,000 --> 00:30:17,000 [Student] Uus on null. 407 00:30:17,000 --> 00:30:23,000 Jah, kui uus on null, siis tagastab false, 408 00:30:23,000 --> 00:30:34,000 ja ma viskan siia alla- 409 00:30:34,000 --> 00:30:37,000 [Student] [kuuldamatu] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Jah, see on hea. 411 00:30:39,000 --> 00:30:46,000 Sa võid kas teha 2 korda suutlikkuse või tootmisvõimsuse muutus 1 ja seejärel ainult määratud see siia alla või mis iganes. 412 00:30:46,000 --> 00:30:52,000 Me teeme seda nagu meil oli see. 413 00:30:52,000 --> 00:30:56,000 Maht >> = 1. 414 00:30:56,000 --> 00:31:08,000 Ja sa oled kunagi muretsema kaotamata 1. koht 415 00:31:08,000 --> 00:31:12,000 sest sa jätsid nihutatakse 1, seega 1 koht on tingimata 0, 416 00:31:12,000 --> 00:31:16,000 nii õige nihkub 1., sa oled ikka läheb hästi. 417 00:31:16,000 --> 00:31:19,000 [Student] Kas sa pead tegema, et enne tagasi? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Jah, see teeb absoluutselt mingit mõtet. 419 00:31:29,000 --> 00:31:36,000 >> Oletame nüüd, me ei kavatse lõpuks tagasi tõsi lõpuni. 420 00:31:36,000 --> 00:31:39,000 Kuidas me teeme neid memmoves, 421 00:31:39,000 --> 00:31:45,000 me peame olema ettevaatlikud, kuidas me teeme neid. 422 00:31:45,000 --> 00:31:50,000 Kas kellelgi on mingeid ettepanekuid, kuidas me teeme neid? 423 00:32:17,000 --> 00:32:21,000 Siin on meie start. 424 00:32:21,000 --> 00:32:28,000 Paratamatult me ​​tahame alustada algusest uuesti 425 00:32:28,000 --> 00:32:35,000 ja koopia asju sealt, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Kuidas sa seda tegid? 427 00:32:41,000 --> 00:32:52,000 Esiteks, ma pean vaatama man-leheküljelt memmove uuesti. 428 00:32:52,000 --> 00:32:57,000 Memmove, et argumente on alati oluline. 429 00:32:57,000 --> 00:33:01,000 Me tahame, et meie sihtpunkt esimene, allikas teiseks suurus kolmandik. 430 00:33:01,000 --> 00:33:06,000 Seal on palju funktsioone, mis tagurdama allikas ja sihtpunkt. 431 00:33:06,000 --> 00:33:11,000 Sihtkoht, allikas kipub olema kooskõlas mõnevõrra. 432 00:33:17,000 --> 00:33:21,000 Teisalda, mida ta tagasi? 433 00:33:21,000 --> 00:33:27,000 Ta naaseb kursor sihtkohta ükskõik mis põhjusel võiksite seda. 434 00:33:27,000 --> 00:33:32,000 Võin pilti lugeda, kuid me tahame liikuda meie sihtkohta. 435 00:33:32,000 --> 00:33:35,000 >> Mis on meie sihtkoht saab olema? 436 00:33:35,000 --> 00:33:37,000 [Student] Uus. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Jah, ja kuhu me kopeerimist? 438 00:33:39,000 --> 00:33:43,000 Esimene asi, mida me kopeerimine on see 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Mis on-see 1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Mis on aadress selle 1? 441 00:33:55,000 --> 00:33:58,000 Mis on aadress, et 1? 442 00:33:58,000 --> 00:34:01,000 [Student] [kuuldamatu] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] Head + aadress esimese osaga. 444 00:34:03,000 --> 00:34:05,000 Kuidas me esimest elementi massiivi? 445 00:34:05,000 --> 00:34:10,000 [Student] järjekorda. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Jah, q.strings. 447 00:34:15,000 --> 00:34:20,000 Pea meeles, siin, meie peas on 1. 448 00:34:20,000 --> 00:34:24,000 Darn it. Ma lihtsalt arvan, et see võluväel- 449 00:34:24,000 --> 00:34:29,000 Siin on meie peas on 1. Ma muudan värvi ka. 450 00:34:29,000 --> 00:34:36,000 Ja siin on stringid. 451 00:34:36,000 --> 00:34:41,000 See, saame kas kirjutada see nagu tegime siin 452 00:34:41,000 --> 00:34:43,000 peaga + q.strings. 453 00:34:43,000 --> 00:34:51,000 Paljud inimesed ka seda kirjutada ja q.strings [juht]. 454 00:34:51,000 --> 00:34:55,000 See ei ole tõesti kuidagi vähem tõhus. 455 00:34:55,000 --> 00:34:58,000 Sa võid arvan et kui te viite mahavõtmine ja siis saada aadress, 456 00:34:58,000 --> 00:35:04,000 kuid kompilaator saab tõlkida seda mis meil oli enne niikuinii, q.strings + pea. 457 00:35:04,000 --> 00:35:06,000 Mõlemal juhul te soovite mõelda. 458 00:35:06,000 --> 00:35:11,000 >> Ja kui palju baite me tahame kopeerida? 459 00:35:11,000 --> 00:35:15,000 [Student] Capacity - peas. 460 00:35:15,000 --> 00:35:18,000 Maht - peas. 461 00:35:18,000 --> 00:35:21,000 Ja siis sa võid alati kirjutada näiteks 462 00:35:21,000 --> 00:35:23,000 aru saada, kui see on õige. 463 00:35:23,000 --> 00:35:26,000 [Student] Tuleb jagatud 2 siis. 464 00:35:26,000 --> 00:35:30,000 Jah, nii et ma arvan, et me võiks kasutada suurus. 465 00:35:30,000 --> 00:35:35,000 Meil on veel suurus on- 466 00:35:35,000 --> 00:35:39,000 kasutades suurus, meil on suurus, mis võrdub 4. 467 00:35:39,000 --> 00:35:42,000 Meie suurus on 4. Meie pea on 1. 468 00:35:42,000 --> 00:35:46,000 Me tahame kopeerida need 3 elementi. 469 00:35:46,000 --> 00:35:54,000 See on meelerahu vaadata, et suurus - pea on õigesti 3. 470 00:35:54,000 --> 00:35:58,000 Ja tulevad siia tagasi, nagu me varem öelnud, 471 00:35:58,000 --> 00:36:00,000 kui me kasutada võimsust, siis oleks meil jagada 2 472 00:36:00,000 --> 00:36:04,000 sest me oleme juba kasvanud meie suutlikkust, et selle asemel, me ei kavatse kasutada suurus. 473 00:36:11,000 --> 00:36:13,000 See koopiate osa. 474 00:36:13,000 --> 00:36:18,000 Nüüd on vaja kopeerida teiste osa, osa mis on jäänud algusest. 475 00:36:18,000 --> 00:36:28,000 >> See saab memmove arvesse millisel positsioonil? 476 00:36:28,000 --> 00:36:32,000 [Student] Plus suurus - peas. 477 00:36:32,000 --> 00:36:38,000 Jah, nii oleme juba kopeeritud suurus - pea baite 478 00:36:38,000 --> 00:36:43,000 ja seda siis, kui me tahame, et kopeerida ülejäänud baidid on uus 479 00:36:43,000 --> 00:36:48,000 ja siis miinus-hästi, baitide arvu me oleme juba kopeeritud sisse 480 00:36:48,000 --> 00:36:52,000 Ja siis, kui me kopeerimist? 481 00:36:52,000 --> 00:36:54,000 [Student] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Jah, q.strings. 483 00:36:56,000 --> 00:37:02,000 Võiksime kas teha ja q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 See on oluliselt vähem levinud kui see. 485 00:37:05,000 --> 00:37:14,000 Kui see on lihtsalt saab olema 0, siis saate kipuvad vt q.strings. 486 00:37:14,000 --> 00:37:16,000 See, kui me kopeerimist. 487 00:37:16,000 --> 00:37:18,000 Mitu baiti me lahkunud kopeerida? >> [Student] 10. 488 00:37:18,000 --> 00:37:20,000 Õigus. 489 00:37:20,000 --> 00:37:25,000 [Student] Kas peame korrutama 5-10 korda suurem baiti või midagi? 490 00:37:25,000 --> 00:37:30,000 Jah, nii see on, kus-mis täpselt me ​​kopeerimist? 491 00:37:30,000 --> 00:37:32,000 [Student] [kuuldamatu] 492 00:37:32,000 --> 00:37:34,000 Mis tüüpi on asi, mida me kopeerimist? 493 00:37:34,000 --> 00:37:36,000 [Student] [kuuldamatu] 494 00:37:36,000 --> 00:37:41,000 Jah, nii char * s, et me kopeerimine, me ei tea, kust need tulevad. 495 00:37:41,000 --> 00:37:47,000 Noh, kus nad osutavad, nagu stringid, me lõpuks surudes seda peale järjekorda 496 00:37:47,000 --> 00:37:49,000 või enqueuing peale järjekorda. 497 00:37:49,000 --> 00:37:51,000 Kui need tulevad, me ei tea. 498 00:37:51,000 --> 00:37:56,000 Me lihtsalt vaja jälgida char * s ise. 499 00:37:56,000 --> 00:38:00,000 Me ei taha kopeerida suurus - pea baiti. 500 00:38:00,000 --> 00:38:03,000 Me tahame kopeerida suurus - pea char * s, 501 00:38:03,000 --> 00:38:11,000 nii me läheme korrutada seda sizeof (char *). 502 00:38:11,000 --> 00:38:17,000 Sama siin, pea * sizeof (char *). 503 00:38:17,000 --> 00:38:24,000 >> [Student] Aga [kuuldamatu]? 504 00:38:24,000 --> 00:38:26,000 See siin? 505 00:38:26,000 --> 00:38:28,000 [Student] Ei, alla selle suurus - peas. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] See siin? 507 00:38:30,000 --> 00:38:32,000 Pointer aritmeetika. 508 00:38:32,000 --> 00:38:35,000 Kuidas pointer aritmeetika läheb tööle on 509 00:38:35,000 --> 00:38:40,000 see automaatselt korrutab suurusest tüüp, et me tegeleme. 510 00:38:40,000 --> 00:38:46,000 Just nagu siin, uus + (suurus - pea) 511 00:38:46,000 --> 00:38:56,000 on samaväärne & uus [size - pea] 512 00:38:56,000 --> 00:39:00,000 kuni me eeldame, et töötada õigesti, 513 00:39:00,000 --> 00:39:04,000 sest kui me tegeleme int massiiv, siis me ei indeks int- 514 00:39:04,000 --> 00:39:07,000 või kui see on suuruse 5 ja soovite 4. osa, siis me indeks 515 00:39:07,000 --> 00:39:10,000 int massiiv [4]. 516 00:39:10,000 --> 00:39:14,000 Sa ei-[4] * suurus int. 517 00:39:14,000 --> 00:39:21,000 See tegeleb ta automaatselt, ja sel juhul 518 00:39:21,000 --> 00:39:29,000 on sõna otseses mõttes samaväärne, nii sulg süntaks 519 00:39:29,000 --> 00:39:34,000 lihtsalt läheb ümber selle niipea kui kompileerida. 520 00:39:34,000 --> 00:39:38,000 See on midagi, sa pead olema ettevaatlik, et 521 00:39:38,000 --> 00:39:42,000 kui lisate suurus - pea 522 00:39:42,000 --> 00:39:45,000 seote mitte üks bait. 523 00:39:45,000 --> 00:39:53,000 Sa lisades ühe char *, mis võib olla üks baiti või mis iganes. 524 00:39:53,000 --> 00:39:56,000 >> Muud küsimused? 525 00:39:56,000 --> 00:40:04,000 Okei, dequeue saab olema lihtsam. 526 00:40:04,000 --> 00:40:11,000 Ma annan sulle hetke rakendada. 527 00:40:11,000 --> 00:40:18,000 Oh, ja ma arvan, et see on samas olukorras, kus 528 00:40:18,000 --> 00:40:21,000 Mis Lisa järjekorda juhul, kui me enqueuing null, 529 00:40:21,000 --> 00:40:24,000 võibolla me tahame seda käsitlemast, äkki meil ei ole. 530 00:40:24,000 --> 00:40:27,000 Me ei tee seda enam siin, kuid samas on meie stack nii. 531 00:40:27,000 --> 00:40:34,000 Kui me Lisa järjekorda null, tahetakse jätta see. 532 00:40:34,000 --> 00:40:40,000 Igaüks on natuke koodi ma ei tõmba? 533 00:40:40,000 --> 00:40:45,000 [Student] ma lihtsalt pean dequeue. 534 00:40:45,000 --> 00:40:56,000 Versioon 2 on see, et-eks. 535 00:40:56,000 --> 00:40:59,000 Sa tahad seletada? 536 00:40:59,000 --> 00:41:01,000 [Student] Esmalt veenduge, et seal on midagi järjekorras 537 00:41:01,000 --> 00:41:07,000 ja mis suurus läheb alla 1. 538 00:41:07,000 --> 00:41:11,000 Sa pead seda tegema, ja siis tagasi pea 539 00:41:11,000 --> 00:41:13,000 ja seejärel liikuda pea üles 1. 540 00:41:13,000 --> 00:41:19,000 Okei, nii et seal on nurgas juhul peame kaaluma. Jah. 541 00:41:19,000 --> 00:41:24,000 [Student] Kui su peas on viimasel element, 542 00:41:24,000 --> 00:41:26,000 siis sa ei taha pea juhtida väljaspool massiivi. 543 00:41:26,000 --> 00:41:29,000 >> Jah, nii kiiresti kui pea tabab lõpuks meie massiiv, 544 00:41:29,000 --> 00:41:35,000 kui me dequeue, meie pea peaks olema modded tagasi 0. 545 00:41:35,000 --> 00:41:40,000 Kahjuks me ei saa seda teha ühe sammuga. 546 00:41:40,000 --> 00:41:44,000 Ma arvan nii, nagu ma tahaks ilmselt seda parandada on 547 00:41:44,000 --> 00:41:52,000 see saab olema char *, mida me tagasi, 548 00:41:52,000 --> 00:41:55,000 sõltumata oma muutuja nimi tahab olla. 549 00:41:55,000 --> 00:42:02,000 Siis tahame mod pea meie suutlikkust 550 00:42:02,000 --> 00:42:10,000 ja siis tagasi ret. 551 00:42:10,000 --> 00:42:14,000 Paljud inimesed siin ka neile võib do- 552 00:42:14,000 --> 00:42:19,000 see on nii-Küll sa näed inimesi teha, kui pea 553 00:42:19,000 --> 00:42:29,000 on suurem kui võimsus, teha head - võimsus. 554 00:42:29,000 --> 00:42:36,000 Ja see on just töö ümber, mida moderaator on. 555 00:42:36,000 --> 00:42:41,000 Head mod = võimsus on palju puhtam 556 00:42:41,000 --> 00:42:51,000 ja ümbriste ümber kui siis, kui pea on suurem kui tootmisvõimsuse pea - võimsus. 557 00:42:51,000 --> 00:42:56,000 >> Küsimused? 558 00:42:56,000 --> 00:43:02,000 Okei, viimane asi, mida me oleme jätnud on meie seotud nimekirja. 559 00:43:02,000 --> 00:43:07,000 Sa võid kasutada mõned seotud nimekirja käitumist, kui sa tegid 560 00:43:07,000 --> 00:43:11,000 seotud loendite oma hash tabeleid, kui sa hash tabelit. 561 00:43:11,000 --> 00:43:15,000 Soovitan soojalt teed hash tabelit. 562 00:43:15,000 --> 00:43:17,000 Te olete juba teinud trie, 563 00:43:17,000 --> 00:43:23,000 vaid üritab raskem. 564 00:43:23,000 --> 00:43:27,000 Teoreetiliselt nad asümptootiliselt parem. 565 00:43:27,000 --> 00:43:30,000 Aga vaata Suurele lauale 566 00:43:30,000 --> 00:43:35,000 ja proovib kunagi paremini teha, ja nad võtavad rohkem mälu. 567 00:43:35,000 --> 00:43:43,000 Kõike üritab jõuab on halvem rohkem tööd. 568 00:43:43,000 --> 00:43:49,000 See on see, mida David Malan lahendus alati on 569 00:43:49,000 --> 00:43:56,000 on ta alati postitust oma trie lahendus, ja vaatame, kus ta praegu on. 570 00:43:56,000 --> 00:44:00,000 Milline oli ta all, David J? 571 00:44:00,000 --> 00:44:06,000 Ta on # 18, nii et ei ole väga halb, 572 00:44:06,000 --> 00:44:09,000 ja et see saab olema üks parimaid üritab võite mõelda 573 00:44:09,000 --> 00:44:17,000 või üks parimaid üritab kohta trie. 574 00:44:17,000 --> 00:44:23,000 Kas ei ole isegi oma originaalse lahenduse? 575 00:44:23,000 --> 00:44:29,000 Mul on tunne, trie lahendused kipuvad olema selles vahemikus RAM kasutust. 576 00:44:29,000 --> 00:44:33,000 >> Mine alla väga üleval, ja RAM kasutust on ühekohalised numbrid. 577 00:44:33,000 --> 00:44:36,000 Mine alla põhja poole, ja siis hakkate nägema püüab 578 00:44:36,000 --> 00:44:41,000 kus sa saad absoluutselt tohutu RAM kasutust, 579 00:44:41,000 --> 00:44:45,000 ja üritab raskem. 580 00:44:45,000 --> 00:44:53,000 Mitte täielikult seda väärt, kuid õpetlik kogemus, kui sa tegid ühe. 581 00:44:53,000 --> 00:44:56,000 Viimane asi on meie seotud nimekirja, 582 00:44:56,000 --> 00:45:04,000 ja need kolm asja, korstnad, järjekorrad, ja lingitud nimekirjad, 583 00:45:04,000 --> 00:45:09,000 tulevaste asi, mida kunagi teha infotehnoloogia 584 00:45:09,000 --> 00:45:12,000 eeldab teil on tuttav neid asju. 585 00:45:12,000 --> 00:45:19,000 Nad on lihtsalt nii fundamentaalne, kõike. 586 00:45:19,000 --> 00:45:25,000 >> Seotud nimekirjades, ja siin me oleme üksikult seotud nimekirja saab olema meie rakendamist. 587 00:45:25,000 --> 00:45:34,000 Mis üksikult seotud tähenda mitte kahekordselt seotud? Jah. 588 00:45:34,000 --> 00:45:37,000 [Student] See ainult punkti järgmisele osuti asemel suunanäitajaks, 589 00:45:37,000 --> 00:45:39,000 nagu üks eelnenud ja üks pärast seda. 590 00:45:39,000 --> 00:45:44,000 Jah, nii pildivormingu, mida ma just teha? 591 00:45:44,000 --> 00:45:48,000 Mul on kaks asja. Mul on pilt ja pilt. 592 00:45:48,000 --> 00:45:51,000 Aastal pildivormingu, meie üksikult seotud nimekirju, 593 00:45:51,000 --> 00:45:57,000 paratamatult on meil mingi kursor pea meie nimekirjas, 594 00:45:57,000 --> 00:46:02,000 ja siis meie nimekirjas, me lihtsalt viiteid, 595 00:46:02,000 --> 00:46:05,000 ja äkki viitab see tühjaks. 596 00:46:05,000 --> 00:46:08,000 See saab olema teie tüüpiline joonis üksikult seotud nimekirja. 597 00:46:08,000 --> 00:46:14,000 Kahekordselt seotud nimekirja, võite minna tagasi. 598 00:46:14,000 --> 00:46:19,000 Kui ma annan teile mingit sõlme nimekirja, siis saate kindlasti saada 599 00:46:19,000 --> 00:46:23,000 muu sõlme loetelu, kui see on kahekordselt seotud nimekirja. 600 00:46:23,000 --> 00:46:27,000 Aga kui ma saan sulle kolmanda sõlme nimekiri ja see on eraldi lingitud nimekiri, 601 00:46:27,000 --> 00:46:30,000 kuidagi sa oled kunagi saada esimese ja teise tippu. 602 00:46:30,000 --> 00:46:34,000 Ja seal on kasu ja puudustega ja üks ilmne 603 00:46:34,000 --> 00:46:42,000 on teil võtavad rohkem suuruse ja teil on jälgida, kus need asjad on suunatud nüüd. 604 00:46:42,000 --> 00:46:49,000 Aga me ainult hoolid üksikult seotud. 605 00:46:49,000 --> 00:46:53,000 >> Mõned asjad me lähed on rakendada. 606 00:46:53,000 --> 00:47:00,000 Sinu typedef struktuure sõlme, int i: struct tipp * next; sõlme. 607 00:47:00,000 --> 00:47:09,000 See typedef tuleb põletada oma mõtetes. 608 00:47:09,000 --> 00:47:14,000 Viktoriin 1 tuleks meeldib anda typedef on seotud nimekirja sõlme, 609 00:47:14,000 --> 00:47:18,000 ja sa peaks olema võimalik kohe kritseldus, et alla 610 00:47:18,000 --> 00:47:22,000 ilma isegi mõelda seda. 611 00:47:22,000 --> 00:47:27,000 Ma arvan, et paar küsimust, miks me vajame vatseti siin? 612 00:47:27,000 --> 00:47:32,000 Miks ei saa me öelda sõlme *? 613 00:47:32,000 --> 00:47:35,000 [Student] [kuuldamatu] 614 00:47:35,000 --> 00:47:38,000 Jah. 615 00:47:38,000 --> 00:47:44,000 Ainuke asi, mis määratleb sõlme kui asi 616 00:47:44,000 --> 00:47:47,000 on typedef ise. 617 00:47:47,000 --> 00:47:55,000 Aga kui selle punkti, kui me sellist parsing läbi selle struct tipp määratlus, 618 00:47:55,000 --> 00:48:01,000 me ei ole valmis meie typedef veel, et kuna typedef pole lõpetanud, 619 00:48:01,000 --> 00:48:05,000 sõlme ei eksisteeri. 620 00:48:05,000 --> 00:48:12,000 Aga struct sõlme teeb, ja see sõlme siin, 621 00:48:12,000 --> 00:48:14,000 see võib nimetada ka midagi muud. 622 00:48:14,000 --> 00:48:16,000 Seda võiks nimetada n. 623 00:48:16,000 --> 00:48:19,000 Seda võib nimetada seotud nimekirja sõlme. 624 00:48:19,000 --> 00:48:21,000 Seda võib nimetada midagi. 625 00:48:21,000 --> 00:48:26,000 Aga see struct tipp tuleb kutsuda sama asi kui see struct tipp. 626 00:48:26,000 --> 00:48:29,000 Mida te nimetate seda peab ka siin olema, 627 00:48:29,000 --> 00:48:32,000 ja nii, et vastab ka teises punktis küsimus 628 00:48:32,000 --> 00:48:37,000 mistõttu-palju kordi, kui näed structs ja typedefs kohta structs, 629 00:48:37,000 --> 00:48:42,000 näete anonüümne structs kus saad lihtsalt näha typedef struktuure, 630 00:48:42,000 --> 00:48:47,000 rakendamise struktuure, sõnastik, või mis iganes. 631 00:48:47,000 --> 00:48:51,000 >> Miks siin me peame ütlema sõlme? 632 00:48:51,000 --> 00:48:54,000 Miks ei saa see olla anonüümne struct? 633 00:48:54,000 --> 00:48:56,000 See on peaaegu sama vastus. 634 00:48:56,000 --> 00:48:58,000 [Student] Sa pead viitama jooksul struct. 635 00:48:58,000 --> 00:49:04,000 Jah jooksul struct, peate viitama struct ise. 636 00:49:04,000 --> 00:49:10,000 Kui te ei anna struct nimi, kui see on anonüümne struct, siis ei saa sellele viidata. 637 00:49:10,000 --> 00:49:17,000 Ja last but not least-need peaksid olema mõnevõrra arusaadav, 638 00:49:17,000 --> 00:49:20,000 ja need peaksid aitama teil mõista, kui olete kirjalikult selle alla 639 00:49:20,000 --> 00:49:24,000 et sa teed midagi valesti, kui neid erinevaid asju ei ole mõistlik. 640 00:49:24,000 --> 00:49:28,000 Last but not least, miks see peab olema struct tipp *? 641 00:49:28,000 --> 00:49:34,000 Miks ei saa see lihtsalt olla vatseti sõlme edasi? 642 00:49:34,000 --> 00:49:37,000 [Student] kursor järgmisele struct. 643 00:49:37,000 --> 00:49:39,000 See on paratamatult seda, mida tahame. 644 00:49:39,000 --> 00:49:42,000 Miks see võiks kunagi olla struct tipp edasi? 645 00:49:42,000 --> 00:49:50,000 Miks see peab olema struct tipp * edasi? Jah. 646 00:49:50,000 --> 00:49:53,000 [Student] See on nagu lõputu silmuse. 647 00:49:53,000 --> 00:49:55,000 Jah. 648 00:49:55,000 --> 00:49:57,000 [Student] See oleks kõik ühes. 649 00:49:57,000 --> 00:50:02,000 Jah, lihtsalt mõelda, kuidas me teeks suurus või midagi. 650 00:50:02,000 --> 00:50:08,000 Suurus struct on põhimõtteliselt + või - mõni muster siin või seal. 651 00:50:08,000 --> 00:50:15,000 See on põhimõtteliselt saab olema summa suuruses asju struct. 652 00:50:15,000 --> 00:50:18,000 See siin, muutmata midagi, suurus saab olema lihtne. 653 00:50:18,000 --> 00:50:24,000 Suurus struct tipp saab olema suurus i + suuruse kõrval. 654 00:50:24,000 --> 00:50:27,000 Suurus i saab olema 4. Suurus järgmise saab olema 4. 655 00:50:27,000 --> 00:50:30,000 Suurus struct tipp saab olema 8. 656 00:50:30,000 --> 00:50:34,000 Kui meil ei ole *, mõtlesin sizeof, 657 00:50:34,000 --> 00:50:37,000 siis sizeof (i) saab olema 4. 658 00:50:37,000 --> 00:50:43,000 Suurus struct tipp kõrval saab olema suurus i + suurus struct tipp kõrval 659 00:50:43,000 --> 00:50:46,000 + Suurus i + suurus struct tipp kõrval. 660 00:50:46,000 --> 00:50:55,000 Oleks lõpmatu rekursiooni sõlmede. 661 00:50:55,000 --> 00:51:00,000 See on põhjus, miks see on, kuidas asjad peavad olema. 662 00:51:00,000 --> 00:51:03,000 >> Jällegi, kindlasti meelde, et 663 00:51:03,000 --> 00:51:06,000 või vähemalt mõista seda piisavalt, et võite olla võimeline 664 00:51:06,000 --> 00:51:12,000 põhjusel läbi, mida ta peaks nägema. 665 00:51:12,000 --> 00:51:14,000 Asju, mida me ei kavatse soovite rakendada. 666 00:51:14,000 --> 00:51:18,000 Kui pikkus nimekirja- 667 00:51:18,000 --> 00:51:21,000 sa petad ja hoida umbes 668 00:51:21,000 --> 00:51:24,000 globaalse pikkus või midagi, aga me ei kavatse seda teha. 669 00:51:24,000 --> 00:51:28,000 Me loen pikkus nimekirja. 670 00:51:28,000 --> 00:51:34,000 Oleme sisaldab, nii see on põhimõtteliselt nagu otsing, 671 00:51:34,000 --> 00:51:41,000 nii et meil on seotud nimekirja täisarvud, et näha, kui see täisarv on seotud nimekirja. 672 00:51:41,000 --> 00:51:44,000 Nimedele läheb sisestada alguses nimekirja. 673 00:51:44,000 --> 00:51:46,000 Liida läheb sisestada lõpus. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted läheb lisada järjestatud positsiooni nimekirja. 675 00:51:53,000 --> 00:52:01,000 Insert_sorted liiki eeldab, et oled kunagi kasutanud nimedele või lisada halva viisil. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted kui sa rakendamisel insert_sorted- 677 00:52:09,000 --> 00:52:13,000 oletame, et meil on seotud nimekirja. 678 00:52:13,000 --> 00:52:18,000 See on see, mida ta praegu välja näeb, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Ma tahan lisada 3, nii kaua, kui nimekiri ise on juba sorteeritud, 680 00:52:24,000 --> 00:52:27,000 see on lihtne leida kus 3 kuulub. 681 00:52:27,000 --> 00:52:29,000 Hakkan temperatuuril 2. 682 00:52:29,000 --> 00:52:32,000 Okei, 3 on suurem kui 2, nii et ma tahan edasi. 683 00:52:32,000 --> 00:52:35,000 Oh, 4 on liiga suur, nii et ma tean 3 kavatse minna 2 kuni 4, 684 00:52:35,000 --> 00:52:39,000 ja ma pean määrata viiteid ja kõik see kraam. 685 00:52:39,000 --> 00:52:43,000 Aga kui me ei ole rangelt kasutada insert_sorted, 686 00:52:43,000 --> 00:52:50,000 meeldib ütleme lihtsalt ma ülaloleva 6 687 00:52:50,000 --> 00:52:55,000 siis minu lingitud nimekiri läheb muutunud see. 688 00:52:55,000 --> 00:53:01,000 See nüüd ei ole mõtet, nii insert_sorted, saate lihtsalt eeldada 689 00:53:01,000 --> 00:53:04,000 et nimekiri on sorteeritud, kuigi tegevus olemas 690 00:53:04,000 --> 00:53:09,000 mis võib põhjustada seda ei saa lahendada, ja ongi kõik. 691 00:53:09,000 --> 00:53:20,000 Leia kasulik lisada-nii need on peamised asjad, mida sa lähed on rakendada. 692 00:53:20,000 --> 00:53:24,000 >> Sest nüüd, võta minut aega, et teha pikk ja sisaldab 693 00:53:24,000 --> 00:53:30,000 ja need peaks olema suhteliselt kiire. 694 00:53:41,000 --> 00:53:48,000 Lähenemas sulgemise aeg, et keegi on midagi pikkus või sisaldab? 695 00:53:48,000 --> 00:53:50,000 Nad ei kavatse olla peaaegu identsed. 696 00:53:50,000 --> 00:53:57,000 [Student] pikkus. 697 00:53:57,000 --> 00:54:01,000 Vaatame, läbivaatamine. 698 00:54:01,000 --> 00:54:04,000 Okei. 699 00:54:12,000 --> 00:54:15,000 Sa tahad seletada? 700 00:54:15,000 --> 00:54:21,000 [Student] Ma lihtsalt luua kursori sõlme ja initsialiseerida ta kõigepealt, mis on meie globaalse muutuja, 701 00:54:21,000 --> 00:54:27,000 ja siis ma vaadata, kui see on null nii et ma ei saa SEG süü ja tagastab 0, kui see on nii. 702 00:54:27,000 --> 00:54:34,000 Muidu ma ahela kaudu, jälgimine jooksul täisarv 703 00:54:34,000 --> 00:54:38,000 mitu korda olen avanud järgmise elemendi nimekirja 704 00:54:38,000 --> 00:54:43,000 ja samas juurdekasvu töö juurde ka, et tegelik element, 705 00:54:43,000 --> 00:54:47,000 ja siis ma pidevalt tegema vaadata, kui see on null, 706 00:54:47,000 --> 00:54:56,000 ja kui see on null, siis katkestab ja lihtsalt tagastab elementide arvu olen avanud. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] Kas keegi on mingeid kommentaare midagi? 708 00:55:01,000 --> 00:55:06,000 See tundub hea õigsuse tark. 709 00:55:06,000 --> 00:55:10,000 [Student] Ma ei usu, teil on vaja sõlme == null. 710 00:55:10,000 --> 00:55:13,000 Jah, nii et kui sõlm == null return 0. 711 00:55:13,000 --> 00:55:18,000 Aga kui sõlme == null, siis see-oh, on õigsuse küsimus. 712 00:55:18,000 --> 00:55:23,000 See oli lihtsalt naasete i, kuid see ei ole ulatuselt kohe. 713 00:55:23,000 --> 00:55:30,000 Sa lihtsalt vaja int i, nii et i = 0. 714 00:55:30,000 --> 00:55:34,000 Aga kui sõlm on null, siis ma ikka saab olema 0, 715 00:55:34,000 --> 00:55:39,000 ja me ei kavatse naasta 0, seega antud juhul on identsed. 716 00:55:39,000 --> 00:55:48,000 Teine levinud asi on hoida deklaratsioon 717 00:55:48,000 --> 00:55:51,000 sõlme sees jaoks silmus. 718 00:55:51,000 --> 00:55:54,000 Võiks öelda, oh, ei. 719 00:55:54,000 --> 00:55:56,000 Jätame selle, kuna see. 720 00:55:56,000 --> 00:55:59,000 Ma oleks ilmselt panna int i = 0 siin, 721 00:55:59,000 --> 00:56:05,000 siis sõlme * sõlm = esimesena siin. 722 00:56:05,000 --> 00:56:11,000 Ja see on ilmselt kuidas-vabanemiseks see nüüd. 723 00:56:11,000 --> 00:56:14,000 See on ilmselt kuidas ma oleksin selle kirjutanud. 724 00:56:14,000 --> 00:56:21,000 Sa võid ka-vaadates seda niimoodi. 725 00:56:21,000 --> 00:56:25,000 See loop struktuur siinsamas 726 00:56:25,000 --> 00:56:30,000 peaks olema peaaegu sama loomulik teile nagu int i = 0 727 00:56:30,000 --> 00:56:33,000 i on väiksem kui pikkus massiivi i + +. 728 00:56:33,000 --> 00:56:38,000 Kui see on, kuidas sa itereerime massiiv, on see, kuidas sa itereerime seotud nimekirja. 729 00:56:38,000 --> 00:56:45,000 >> See peaks olema teist laadi mingil ajahetkel. 730 00:56:45,000 --> 00:56:50,000 Seda silmas pidades, see saab olema peaaegu sama asi. 731 00:56:50,000 --> 00:56:57,000 Sa lähed tahan kinnitada, üle seotud nimekirja. 732 00:56:57,000 --> 00:57:02,000 Kui lümfisõlm-Mul pole aimugi, milline väärtus on nn. 733 00:57:02,000 --> 00:57:04,000 Sõlme i. 734 00:57:04,000 --> 00:57:15,000 Kui näit sel sõlm = i tagasi true, ja ongi kõik. 735 00:57:15,000 --> 00:57:18,000 Pange tähele, et ainus viis, kuidas kunagi tagasi false 736 00:57:18,000 --> 00:57:23,000 on see, kui me kinnitada, kogu seotud nimekirja ja kunagi tagasi tõsi, 737 00:57:23,000 --> 00:57:29,000 nii see on, mida see teeb. 738 00:57:29,000 --> 00:57:36,000 Nagu pool tähele-me ilmselt ei jõua lisama või ülaloleva. 739 00:57:36,000 --> 00:57:39,000 >> Quick viimase noodi. 740 00:57:39,000 --> 00:57:52,000 Kui näed staatiline märksõna, nii oletame staatilise int count = 0, 741 00:57:52,000 --> 00:57:56,000 siis me teeme count + +, saab põhimõtteliselt ma arvan et kui globaalne muutuja, 742 00:57:56,000 --> 00:58:00,000 kuigi ma just ütlesin see ei ole, kuidas me kavatseme rakendada pikkus. 743 00:58:00,000 --> 00:58:06,000 Ma teen seda siin, ja siis loota + +. 744 00:58:06,000 --> 00:58:11,000 Kuidagi saame alustada sõlme meie seotud nimekirja me incrementing meie arv. 745 00:58:11,000 --> 00:58:15,000 Punkt on see, mida staatiline märksõna tähendab. 746 00:58:15,000 --> 00:58:20,000 Kui mul oli just int count = 0, mis oleks regulaarne vana globaalne muutuja. 747 00:58:20,000 --> 00:58:25,000 Mida staatiline int count tähendab, et see on globaalne muutuja selle faili. 748 00:58:25,000 --> 00:58:28,000 On võimatu mõne muu faili, 749 00:58:28,000 --> 00:58:34,000 meeldib mõelda pset 5, kui olete alustanud. 750 00:58:34,000 --> 00:58:39,000 Sul on nii speller.c, ja sul on dictionary.c, 751 00:58:39,000 --> 00:58:42,000 ja kui sa just kuulutada asi maailmas, siis midagi speller.c 752 00:58:42,000 --> 00:58:45,000 saab kasutada dictionary.c ja vastupidi. 753 00:58:45,000 --> 00:58:48,000 Globaalsed muutujad on kättesaadav ühelegi. C faili 754 00:58:48,000 --> 00:58:54,000 kuid staatilised muutujad on kättesaadavad üksnes seestpoolt faili ennast, 755 00:58:54,000 --> 00:59:01,000 nii seest õigekirjakontrolli või sees dictionary.c, 756 00:59:01,000 --> 00:59:06,000 see on selline, kuidas ma kuulutada minu muutuja suurust minu massiivi 757 00:59:06,000 --> 00:59:10,000 või suurust minu sõnade arv sõnaraamat. 758 00:59:10,000 --> 00:59:15,000 Kuna ma ei taha kuulutada globaalne muutuja, et kellelgi on juurdepääs, 759 00:59:15,000 --> 00:59:18,000 Ma tõesti ainult hoolid teda enda tarbeks. 760 00:59:18,000 --> 00:59:21,000 >> Hea asi see on ka kogu nimi kokkupõrke värk. 761 00:59:21,000 --> 00:59:27,000 Kui mõne muu faili üritab kasutada globaalse muutuja nimega loota, asjad lähevad väga, väga vale, 762 00:59:27,000 --> 00:59:33,000 nii et see kenasti hoiab asju ohutu, ja ainult saate kasutada seda, 763 00:59:33,000 --> 00:59:38,000 ja keegi teine ​​ei saa, ja kui keegi deklareerib globaalse muutuja nimega loota, 764 00:59:38,000 --> 00:59:43,000 siis see ei häiri oma staatiline muutuja nimega loota. 765 00:59:43,000 --> 00:59:47,000 Seda staatilise on. On faili globaalset muutujat. 766 00:59:47,000 --> 00:59:52,000 >> Küsimused midagi? 767 00:59:52,000 --> 00:59:59,000 Kõik komplekti. Nägemist. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]