1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [Sadaļa 6] [ērtāk] 2 00:00:01,000 --> 00:00:04,000 [Robs Bowden] [Hārvarda] 3 00:00:04,000 --> 00:00:09,000 [Tas ir CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Mēs varam doties uz mūsu sadaļu jautājumiem. 5 00:00:11,000 --> 00:00:17,000 Es nosūtīja URL telpā pirms. 6 00:00:17,000 --> 00:00:22,000 Par sadaļā jautājumu sākums saka- 7 00:00:22,000 --> 00:00:26,000 acīmredzot es neesmu pilnīgi unsick-ir ļoti viegli jautājums 8 00:00:26,000 --> 00:00:28,000 tikai to, ko ir Valgrind? 9 00:00:28,000 --> 00:00:30,000 Kāda Valgrind darīt? 10 00:00:30,000 --> 00:00:34,000 Kāds vēlas pateikt, ko Valgrind dara? 11 00:00:34,000 --> 00:00:36,000 [Studentu] Pārbaudes atmiņas noplūde. 12 00:00:36,000 --> 00:00:41,000 Jā, Valgrind ir vispārējs atmiņas pārbaudītājs. 13 00:00:41,000 --> 00:00:44,000 Tas, galu galā, stāsta jums, ja jums ir kādi atmiņas noplūde, 14 00:00:44,000 --> 00:00:49,000 kas ir galvenokārt, ko mēs, izmantojot to, jo, ja jūs vēlaties, lai 15 00:00:49,000 --> 00:00:54,000 darīt arī problemātisko komplektā vai, ja jūs vēlaties, lai 16 00:00:54,000 --> 00:00:59,000 nokļūt uz lielā kuģa, jums ir nepieciešams, lai nav atmiņas noplūdes nekāda, 17 00:00:59,000 --> 00:01:01,000 un gadījumā, ja jums ir atmiņas noplūde, ka jūs nevarat atrast, 18 00:01:01,000 --> 00:01:04,000 arī paturēt prātā, ka, ja jūs atvērt failu 19 00:01:04,000 --> 00:01:07,000 un, ja jums nav to aizvērtu, ka ir atmiņas noplūde. 20 00:01:07,000 --> 00:01:10,000 >> Daudzi cilvēki meklē kādu mezglu, ka viņi nav atbrīvojot 21 00:01:10,000 --> 00:01:15,000 ja tiešām, viņi ne tuvu vārdnīcu pašā pirmajā solī. 22 00:01:15,000 --> 00:01:19,000 Tā arī stāsta jums, ja jums ir kāds nederīgs lasa vai raksta, 23 00:01:19,000 --> 00:01:22,000 kas nozīmē, ja jūs mēģināt un noteikt vērtību 24 00:01:22,000 --> 00:01:26,000 kas ir ārpus beigām kaudze, un tas nenotiek uz SEG vaina 25 00:01:26,000 --> 00:01:30,000 bet Valgrind nozvejas to, kā jums nav faktiski rakstot tur, 26 00:01:30,000 --> 00:01:33,000 un tāpēc jums noteikti nevajadzētu būt kāds no tiem, vai nu. 27 00:01:33,000 --> 00:01:38,000 Kā jūs izmantojat Valgrind? 28 00:01:38,000 --> 00:01:42,000 Kā jūs izmantojat Valgrind? 29 00:01:42,000 --> 00:01:45,000 >> Tas vispārīgs jautājums 30 00:01:45,000 --> 00:01:49,000 veida palaist to un apskatīt pie izejas. 31 00:01:49,000 --> 00:01:51,000 Produkcija ir milzīgs daudz reižu. 32 00:01:51,000 --> 00:01:54,000 Pastāv arī jautras kļūdas kur, ja Jums ir dažas briesmīgi nepareizi lieta 33 00:01:54,000 --> 00:01:59,000 notiek pa apli, tad tas būs iespējams pateikt, "pārāk daudz kļūdas. 34 00:01:59,000 --> 00:02:03,000 Es esmu gatavojas pārtraukt skaitīšanu tagad. " 35 00:02:03,000 --> 00:02:08,000 Tā būtībā tekstuālā produkcija, kas jums ir, lai parsēt. 36 00:02:08,000 --> 00:02:13,000 Beigu beigās, tas pateiks jums nekādas atmiņas noplūdes, kas jums ir, 37 00:02:13,000 --> 00:02:16,000 cik blokus, kas var būt noderīgi, jo 38 00:02:16,000 --> 00:02:20,000 ja tas ir viens bloks unfreed, tad tas parasti ir vieglāk atrast 39 00:02:20,000 --> 00:02:23,000 kā 1000 bloki unfreed. 40 00:02:23,000 --> 00:02:26,000 1000 bloki unfreed iespējams, nozīmē, jūs ne atbrīvojot 41 00:02:26,000 --> 00:02:30,000 Jūsu saistītas saraksti pareizos vai kaut. 42 00:02:30,000 --> 00:02:32,000 Tas ir Valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Tagad mums ir mūsu sadaļā jautājumiem, 44 00:02:35,000 --> 00:02:38,000 kas jums nav nepieciešams, lai lejupielādētu. 45 00:02:38,000 --> 00:02:41,000 Jūs varat noklikšķināt uz manu vārdu un velciet tos telpā. 46 00:02:41,000 --> 00:02:44,000 Tagad noklikšķiniet uz mani. 47 00:02:44,000 --> 00:02:46,000 Pārskatīšana 1 būs kaudze, ko mēs darām pirmās. 48 00:02:46,000 --> 00:02:55,000 Pārskatīšana 2 būs rinda, un pārskatīšana 3 būs atsevišķi saistīts saraksts. 49 00:02:55,000 --> 00:02:58,000 Sākot off ar mūsu kaudze. 50 00:02:58,000 --> 00:03:02,000 Kā tas saka šeit, kaudze ir viens no visvairāk pamata, 51 00:03:02,000 --> 00:03:07,000 fundamentālas datu struktūras datorzinātnēs. 52 00:03:07,000 --> 00:03:11,000 Ļoti prototipu piemērs ir 53 00:03:11,000 --> 00:03:13,000 kaudzīti paplātes ēdamzālē. 54 00:03:13,000 --> 00:03:16,000 Tā būtībā kad jums tiek iepazīstināti ar steku, 55 00:03:16,000 --> 00:03:20,000 kāds gatavojas teikt: "Ak, kā kaudze paplātes." 56 00:03:20,000 --> 00:03:22,000 Jūs kaudze paplātes augšu. 57 00:03:22,000 --> 00:03:24,000 Tad, kad jūs iet, lai vilktu ar paplāti, 58 00:03:24,000 --> 00:03:31,000 pirmais paplātes, kas ir kļūst velk ir pēdējais, kas tika likts uz skursteņa. 59 00:03:31,000 --> 00:03:34,000 Viņiem arī līdzīgi tas kaudze saka šeit- 60 00:03:34,000 --> 00:03:37,000 mums ir atmiņas segmentu sauc kaudze. 61 00:03:37,000 --> 00:03:40,000 Un kāpēc to sauc par kaudze? 62 00:03:40,000 --> 00:03:42,000 >> Jo, piemēram, kaudze datu struktūra, 63 00:03:42,000 --> 00:03:46,000 tā nospiež un pops kaudze rāmji uz skursteņa, 64 00:03:46,000 --> 00:03:53,000 ja kaudze rāmji ir kā īpaša aicinājuma funkciju. 65 00:03:53,000 --> 00:03:57,000 Un kā kaudze, jums vienmēr ir atgriezties 66 00:03:57,000 --> 00:04:03,000 no funkciju zvanu, pirms jūs varat saņemt uz leju apakšējo kaudze rāmji vēlreiz. 67 00:04:03,000 --> 00:04:08,000 Jūs nevarat būt galvenais zvanu foo zvanu bārs un bārs atgrieztos galvenais tieši. 68 00:04:08,000 --> 00:04:14,000 Tas vienmēr got sekot pareizo kaudze grūšanas un popping. 69 00:04:14,000 --> 00:04:18,000 Abas operācijas, kā jau teicu, ir push un pop. 70 00:04:18,000 --> 00:04:20,000 Tie ir universāli termini. 71 00:04:20,000 --> 00:04:26,000 Jums vajadzētu zināt push un pop ziņā skursteņi vienalga ko. 72 00:04:26,000 --> 00:04:28,000 Redzēsim rindas ir sava veida atšķiras. 73 00:04:28,000 --> 00:04:32,000 Tas nav īsti ir universāls jēdziens, bet push un pop ir universālas par skursteņi. 74 00:04:32,000 --> 00:04:34,000 Push ir tikai likts uz skursteņa. 75 00:04:34,000 --> 00:04:37,000 Pop ir pacelšanās kaudzīti. 76 00:04:37,000 --> 00:04:43,000 Un mēs redzam šeit mums ir mūsu typedef struktūrai steku, 77 00:04:43,000 --> 00:04:46,000 tāpēc mums ir char ** stīgas. 78 00:04:46,000 --> 00:04:51,000 Vai nav bail ar jebkādiem **. 79 00:04:51,000 --> 00:04:54,000 Tas ir gatavojas galu galā ir masīvs stīgas 80 00:04:54,000 --> 00:04:58,000 vai masīvs norādes uz zīmēm, kur 81 00:04:58,000 --> 00:05:00,000 norādes uz zīmēm mēdz būt stīgas. 82 00:05:00,000 --> 00:05:05,000 Tai nav jābūt stīgas, bet šeit, viņi būs stīgas. 83 00:05:05,000 --> 00:05:08,000 >> Mums ir masīva stīgas. 84 00:05:08,000 --> 00:05:14,000 Mums ir lielums, kas parāda, cik daudz elementi pašlaik skursteņa, 85 00:05:14,000 --> 00:05:19,000 un tad mums ir iespējas, kas ir, cik daudz elementi var būt uz skursteņa. 86 00:05:19,000 --> 00:05:22,000 Par jaudu vajadzētu sākt, jo kaut kā lielāka nekā 1, 87 00:05:22,000 --> 00:05:27,000 bet izmērs ir gatavojas sākt kā 0. 88 00:05:27,000 --> 00:05:36,000 Tagad pastāv galvenokārt trīs dažādi veidi, kā jūs varat iedomāties kaudze. 89 00:05:36,000 --> 00:05:39,000 Nu, tur ir iespējams vairāk, bet divi galvenie veidi ir 90 00:05:39,000 --> 00:05:43,000 Jūs varat īstenot, izmantojot masīvu, vai jūs varat īstenot, izmantojot saistīts saraksts. 91 00:05:43,000 --> 00:05:48,000 Saistīti saraksti ir sava veida niecīgs, lai padarītu skursteņi no. 92 00:05:48,000 --> 00:05:51,000 Tas ir ļoti viegli izdarīt kaudze izmantojot saistītos sarakstus, 93 00:05:51,000 --> 00:05:55,000 tāpēc šeit mēs esam gatavojas darīt kaudze izmantojot bloki, 94 00:05:55,000 --> 00:05:59,000 un tad, izmantojot masīvu, tur ir arī divi veidi, jūs varat domāt par to. 95 00:05:59,000 --> 00:06:01,000 Pirms tam, kad es teicu, mums ir spēja kaudze, 96 00:06:01,000 --> 00:06:04,000 lai mēs varētu fit elementu uz skursteņa. 97 00:06:04,000 --> 00:06:09,000 >> Viens veids, kā tas varētu notikt, ir, tiklīdz jūs hit 10 elementi, tad jūs darīts. 98 00:06:09,000 --> 00:06:13,000 Jūs varētu zināt, ka ir augšējā robeža 10 lietas pasaulē 99 00:06:13,000 --> 00:06:16,000 ka jums nekad ir vairāk nekā 10 lietas par savu steku, 100 00:06:16,000 --> 00:06:20,000 un tādā gadījumā jūs varat būt augšējā robeža uz izmēru jūsu kaudze. 101 00:06:20,000 --> 00:06:23,000 Vai jūs varētu būt jūsu kaudze būtu neierobežots, 102 00:06:23,000 --> 00:06:27,000 bet, ja jūs darāt masīvs, tas nozīmē, ka katru reizi, kad jūs hit 10 elementi, 103 00:06:27,000 --> 00:06:29,000 tad jūs nāksies augt līdz 20 elementiem, un, kad jūs hit 20 elementus, 104 00:06:29,000 --> 00:06:33,000 Jums nāksies uzlabot savu masīvs 30 elementiem vai 40 elementiem. 105 00:06:33,000 --> 00:06:37,000 Jūs esat dodas uz nepieciešamību palielināt jaudu, kas ir tas, ko mēs gatavojamies darīt šeit. 106 00:06:37,000 --> 00:06:40,000 Katru reizi, kad mēs sasniegtu maksimālo lielumu mūsu kaudze, 107 00:06:40,000 --> 00:06:46,000 kad mēs push kaut kas cits, mēs spēsim nepieciešams palielināt jaudu. 108 00:06:46,000 --> 00:06:50,000 Lūk, mēs esam push deklarēti kā bool push (char * str). 109 00:06:50,000 --> 00:06:54,000 Char * str ir virkne, kas mums ir stumšanas uz steku, 110 00:06:54,000 --> 00:06:58,000 un bool vienkārši saka, vai mums izdevās vai neizdevās. 111 00:06:58,000 --> 00:07:00,000 >> Kā mēs varam neizdoties? 112 00:07:00,000 --> 00:07:04,000 Kāda ir vienīgais apstāklis, ka jūs varat iedomāties 113 00:07:04,000 --> 00:07:07,000 ja mums būtu nepieciešams atgriezties viltus? 114 00:07:07,000 --> 00:07:09,000 Yeah. 115 00:07:09,000 --> 00:07:12,000 [Studentu] Ja tas ir pilns, un mēs esam izmantojot norobežo īstenošanu. 116 00:07:12,000 --> 00:07:17,000 Jā, tā kā mēs noteikt, viņš atbildēja 117 00:07:17,000 --> 00:07:23,000 ja tas ir pilns, un mēs esam izmantojot norobežo īstenošanu. 118 00:07:23,000 --> 00:07:26,000 Tad mēs noteikti atgriezties viltus. 119 00:07:26,000 --> 00:07:31,000 Tiklīdz mēs hit 10 lietas masīvā, mēs nevaram fit 11, tāpēc mums atgriezties viltus. 120 00:07:31,000 --> 00:07:32,000 Ko darīt, ja tas ir neierobežots? Yeah. 121 00:07:32,000 --> 00:07:38,000 Ja jūs nevarat paplašināt masīvs kāda iemesla dēļ. 122 00:07:38,000 --> 00:07:43,000 Yeah, tāpēc atmiņa ir ierobežots resurss, 123 00:07:43,000 --> 00:07:51,000 un galu galā, ja mēs pastāvīgi stumšanas lietas uz skursteņa atkal un atkal, 124 00:07:51,000 --> 00:07:54,000 mēs esam gatavojas izmēģināt un piešķirt lielāku masīvs, lai ietilptu 125 00:07:54,000 --> 00:07:59,000 lielāks jaudu, un malloc vai kāds mēs esam, izmantojot gatavojas atgriezties viltus. 126 00:07:59,000 --> 00:08:02,000 Nu, malloc atgriezīsies Null. 127 00:08:02,000 --> 00:08:05,000 >> Atcerieties, katru reizi, kad jūs kādreiz zvanīt malloc, jums vajadzētu pārbaudīt, lai redzētu, vai tas 128 00:08:05,000 --> 00:08:12,000 atgriež Null vai kas cits, kas ir pareizība atskaitījumu. 129 00:08:12,000 --> 00:08:17,000 Tā kā mēs vēlamies, lai būtu neaprobežots kaudze, 130 00:08:17,000 --> 00:08:21,000 vienīgais gadījums, mēs ejam, lai būtu atgriešanās nepatiesa ir, ja mēs cenšamies 131 00:08:21,000 --> 00:08:26,000 palielināt jaudu un malloc vai kāds atgriežas nepatiesa. 132 00:08:26,000 --> 00:08:30,000 Tad pop neuzņemas nekādu argumentu, 133 00:08:30,000 --> 00:08:37,000 un tas atgriež virkni, kas ir uz augšu no skursteņa. 134 00:08:37,000 --> 00:08:41,000 Neatkarīgi nesen bija uzstājām uz skursteņa ir tas pop atgriežas, 135 00:08:41,000 --> 00:08:44,000 un tas arī novērš to no skursteņa. 136 00:08:44,000 --> 00:08:50,000 Un paziņo, ka tā atgriež null ja nekas uz skursteņa. 137 00:08:50,000 --> 00:08:53,000 Tas vienmēr ir iespējams, ka kaudze ir tukšs. 138 00:08:53,000 --> 00:08:55,000 Java, ja jūs esat pieraduši, ka, vai citās valodās, 139 00:08:55,000 --> 00:09:01,000 mēģinot pop no tukšas kaudze varētu izraisīt izņēmums vai kaut. 140 00:09:01,000 --> 00:09:09,000 >> Bet C, Null ir veida daudz gadījumu, kā mēs risinām šīs problēmas. 141 00:09:09,000 --> 00:09:13,000 Atgriežoties null, kā mēs spēsim neizsaka ka kaudze bija tukšs. 142 00:09:13,000 --> 00:09:16,000 Mēs esam ja kods, kas būs pārbaudi jūsu kaudze funkcionalitāti, 143 00:09:16,000 --> 00:09:19,000 īstenot push un pop. 144 00:09:19,000 --> 00:09:23,000 Tas nebūs daudz kodu. 145 00:09:23,000 --> 00:09:40,000 Es-tiešām, pirms mēs to darām, mājienu, mājienu- 146 00:09:40,000 --> 00:09:44,000 ja neesat redzējuši, malloc ir ne tikai funkcija 147 00:09:44,000 --> 00:09:47,000 kas sadala atmiņas par kaudzē jums. 148 00:09:47,000 --> 00:09:51,000 Ir par alloc funkciju ģimene. 149 00:09:51,000 --> 00:09:53,000 Pirmais ir malloc, ko jūs esat pieraduši. 150 00:09:53,000 --> 00:09:56,000 Tad tur ir calloc, kas dara to pašu, ko malloc, 151 00:09:56,000 --> 00:09:59,000 bet tas būs nulle viss par Jums. 152 00:09:59,000 --> 00:10:04,000 Ja esat kādreiz vēlējās noteikt viss uz null pēc mallocing kaut 153 00:10:04,000 --> 00:10:06,000 Jums vajadzētu būt tikai izmanto calloc pirmajā vietā, nevis rakstot 154 00:10:06,000 --> 00:10:09,000 lai cilpa, lai nulle visu bloku atmiņas. 155 00:10:09,000 --> 00:10:15,000 >> Realloc ir kā malloc un ir daudz īpašu gadījumu, 156 00:10:15,000 --> 00:10:19,000 bet būtībā kas realloc dara, ir 157 00:10:19,000 --> 00:10:24,000 tas aizņem rādītāju, kas jau bija piešķirti. 158 00:10:24,000 --> 00:10:27,000 Realloc ir funkcija jūs vēlaties būt pievēršot uzmanību šeit. 159 00:10:27,000 --> 00:10:31,000 Tas aizņem rādītāju, kas jau bija atgriezies no malloc. 160 00:10:31,000 --> 00:10:35,000 Pieņemsim, ka jūs lūgt no malloc rādītāju par 10 baitu. 161 00:10:35,000 --> 00:10:38,000 Tad vēlāk tu saproti tu gribēji 20 baiti, 162 00:10:38,000 --> 00:10:42,000 lai jūs aicinu realloc par šo rādītāju ar 20 baiti, 163 00:10:42,000 --> 00:10:47,000 un realloc automātiski kopēt pāri visam jums. 164 00:10:47,000 --> 00:10:51,000 Ja jūs vienkārši sauc malloc atkal, tāpat kā man ir sastāv no 10 baitu. 165 00:10:51,000 --> 00:10:53,000 Tagad man vajag bloku 20 baitu, 166 00:10:53,000 --> 00:10:58,000 tāpēc, ja es malloc 20 baiti, tad man ir manuāli kopēt pa 10 bytes no pirmā lieta 167 00:10:58,000 --> 00:11:01,000 uz otro lieta, un tad bez pirmā lieta. 168 00:11:01,000 --> 00:11:04,000 Realloc tiks galā, ka jums. 169 00:11:04,000 --> 00:11:11,000 >> Pamanīt paraksts būs spēkā neesošu *, 170 00:11:11,000 --> 00:11:15,000 kas ir tikai atgriežas rādītāju uz bloka atmiņu, 171 00:11:15,000 --> 00:11:17,000 tad anulēts * PTR. 172 00:11:17,000 --> 00:11:22,000 Jūs varat domāt par spēkā neesošs * kā vispārējs rādītājs. 173 00:11:22,000 --> 00:11:27,000 Vispār, jūs nekad nodarbojas ar spēkā neesošs *, 174 00:11:27,000 --> 00:11:30,000 bet malloc atgriežas tukšuma izjūta *, un tad tas ir tikai izmanto kā 175 00:11:30,000 --> 00:11:34,000 tas faktiski būs char *. 176 00:11:34,000 --> 00:11:37,000 Iepriekšējā neesošu *, kas tika atgriezta ar malloc 177 00:11:37,000 --> 00:11:41,000 tagad būs nodota realloc, un tad izmēra 178 00:11:41,000 --> 00:11:49,000 ir jauna baitu skaits jūs vēlaties piešķirt, lai jūsu jaunā jauda. 179 00:11:49,000 --> 00:11:57,000 Es jums pāris minūtes, un darīt to mūsu vietā. 180 00:11:57,000 --> 00:12:02,000 Sākt ar 1 Revision. 181 00:12:16,000 --> 00:12:21,000 Es tevi apturēt pēc cerams par pietiekami daudz laika, lai īstenotu push, 182 00:12:21,000 --> 00:12:24,000 un tad es došu jums citu pārtraukuma darīt pop. 183 00:12:24,000 --> 00:12:27,000 Bet tas tiešām nav tik daudz kodu vispār. 184 00:12:27,000 --> 00:12:35,000 Visvairāk kods ir iespējams paplašinās sīkumi, paplašinot jaudu. 185 00:12:35,000 --> 00:12:39,000 Labi, nav spiediena, ir pilnīgi darīts, 186 00:12:39,000 --> 00:12:47,000 bet, kamēr jūs jūtaties kā jūs esat uz pareizā ceļa, tas ir labi. 187 00:12:47,000 --> 00:12:53,000 >> Vai kāds ir kods viņi jūtas komfortabli ar mani velkot? 188 00:12:53,000 --> 00:12:59,000 Jā, es gribu, bet vai kāds ir kādu kodu varu uzvilkt? 189 00:12:59,000 --> 00:13:05,000 Labi, jūs varat sākt, to saglabāt, kāds tas ir? 190 00:13:05,000 --> 00:13:09,000 Es vienmēr aizmirst šo soli. 191 00:13:09,000 --> 00:13:15,000 Labi, meklē push, 192 00:13:15,000 --> 00:13:18,000 Vai jūs vēlaties, lai izskaidrotu savu kodu? 193 00:13:18,000 --> 00:13:24,000 [Studentu] Pirmkārt, es palielināja lielumu. 194 00:13:24,000 --> 00:13:28,000 Es domāju, varbūt man vajadzētu būt, ka, vienalga, es palielināja lielumu, 195 00:13:28,000 --> 00:13:31,000 un es redzēt, ja tas ir mazāk nekā spēju. 196 00:13:31,000 --> 00:13:36,000 Un, ja tas ir mazāk nekā spēju, es pievienot masīva ka mums jau ir. 197 00:13:36,000 --> 00:13:42,000 Un, ja tas nav, es reizināt jaudu ar 2, 198 00:13:42,000 --> 00:13:50,000 un es pārdalīt virknes masīvs uz kaut ar lielāku jaudu izmēra tagad. 199 00:13:50,000 --> 00:13:55,000 Un tad, ja tas neizdodas, es pateikt lietotājam un atgriezties viltus, 200 00:13:55,000 --> 00:14:04,000 un, ja tas ir labi, tad man stīgu jaunajā vietā. 201 00:14:04,000 --> 00:14:07,000 >> [Robs B.] arī to, ka mēs izmantojām jauku Bitu līmeņa operatoru šeit 202 00:14:07,000 --> 00:14:09,000 reizināt ar 2. 203 00:14:09,000 --> 00:14:11,000 Atcerieties, kreisā nobīdes vienmēr būs jāreizina ar 2. 204 00:14:11,000 --> 00:14:15,000 Tiesības maiņa ir dalīts ar 2, kamēr jūs atceraties, ka tas nozīmē, 205 00:14:15,000 --> 00:14:18,000 dalīt pa 2 kā veselums dalīts ar 2. 206 00:14:18,000 --> 00:14:20,000 Tas varētu nogriezt a 1 šeit vai tur. 207 00:14:20,000 --> 00:14:26,000 Bet nobīde pa kreisi 1 vienmēr būs jāreizina ar 2, 208 00:14:26,000 --> 00:14:32,000 ja vien jūs pārplūdes robežas skaitlim, un tad tas nebūs. 209 00:14:32,000 --> 00:14:34,000 Pusē komentārs. 210 00:14:34,000 --> 00:14:39,000 Man patīk darīt, tas nav gatavojas mainīt kodēšanas nekādā veidā, 211 00:14:39,000 --> 00:14:48,000 bet man patīk darīt kaut kas līdzīgs šim. 212 00:14:48,000 --> 00:14:51,000 Tas faktiski ir gatavojas darīt to nedaudz ilgāk. 213 00:15:04,000 --> 00:15:08,000 Varbūt tas nav ideāls gadījums, lai parādītu to, 214 00:15:08,000 --> 00:15:14,000 bet man patīk segmentā to šie bloki 215 00:15:14,000 --> 00:15:17,000 labi, ja šo, ja notiek, tad es esmu gatavojas darīt kaut ko, 216 00:15:17,000 --> 00:15:19,000 un tad funkcija tiek darīts. 217 00:15:19,000 --> 00:15:22,000 Man nav nepieciešams, lai pēc tam ritiniet manas acis galam funkcijas 218 00:15:22,000 --> 00:15:25,000 lai redzētu, kas notiek pēc cits. 219 00:15:25,000 --> 00:15:27,000 Tas ir, ja tas, ja notiek, tad es vienkārši atgriezties. 220 00:15:27,000 --> 00:15:30,000 Tā ir arī jauka papildu labums no visu pēc šīs 221 00:15:30,000 --> 00:15:33,000 Tagad nobīdīts pa kreisi reizi. 222 00:15:33,000 --> 00:15:40,000 Man vairs nav nepieciešams, ja jums kādreiz netālu smieklīgi garas rindas, 223 00:15:40,000 --> 00:15:45,000 tad šie 4 baiti var palīdzēt, un arī vairāk pa kreisi kaut kas ir, 224 00:15:45,000 --> 00:15:48,000 mazāk nomākti tu justos, ja patīk-labi, man ir jāatceras 225 00:15:48,000 --> 00:15:53,000 Es esmu šobrīd, kamēr cilpa iekšā no cita iekšpuses uz cilpas. 226 00:15:53,000 --> 00:15:58,000 Jebkur jūs varat darīt šo peļņu uzreiz, es veida, piemēram. 227 00:15:58,000 --> 00:16:05,000 Tas ir pilnīgi obligāta, un nav paredzams, nekādā veidā. 228 00:16:05,000 --> 00:16:12,000 >> [Studentu] Vai jābūt lielums - no nelabvēlīgā stāvoklī? 229 00:16:12,000 --> 00:16:19,000 Kļūme nosacījums ir mums neizdevās realloc, tā jā. 230 00:16:19,000 --> 00:16:22,000 Ievērojiet, kā ar nelabvēlīgā stāvoklī, iespējams, 231 00:16:22,000 --> 00:16:26,000 ja mēs brīvi stuff vēlāk, mēs vienmēr gatavojas neveiksmei 232 00:16:26,000 --> 00:16:29,000 Nav svarīgi, cik reizes mēs cenšamies virzīt kaut ko. 233 00:16:29,000 --> 00:16:32,000 Ja mēs saglabāt stumšanas, mēs turpinām palielināšanai lielumu, 234 00:16:32,000 --> 00:16:36,000 pat ja mēs ne liekot kaut uz skursteņa. 235 00:16:36,000 --> 00:16:39,000 Parasti mums nav pieauguma lielumu līdz 236 00:16:39,000 --> 00:16:43,000 pēc mēs esam veiksmīgi nodot to uz skursteņa. 237 00:16:43,000 --> 00:16:50,000 Mēs varētu darīt to, teiksim, nu šeit un šeit. 238 00:16:50,000 --> 00:16:56,000 Un tad tā vietā, lai sakot s.size ≤ jaudu, tas ir mazāk, nekā spēju, 239 00:16:56,000 --> 00:17:01,000 tikai tāpēc, ka mēs pārcēlās kur viss bija. 240 00:17:01,000 --> 00:17:07,000 >> Un atceries, ka vienīgā vieta, kur mēs, iespējams, varētu atgriezties viltus 241 00:17:07,000 --> 00:17:14,000 ir šeit, kur realloc atgriezās null, 242 00:17:14,000 --> 00:17:19,000 un, ja jums gadās atcerēties standarta kļūda, 243 00:17:19,000 --> 00:17:22,000 varbūt jūs varētu apsvērt šo gadījumu, kad jūs vēlaties, lai izdrukātu standarta kļūda, 244 00:17:22,000 --> 00:17:26,000 tāpēc fprintf stderr nevis tikai drukājot tieši uz standarta out. 245 00:17:26,000 --> 00:17:31,000 Atkal, tas nav cerības, bet, ja tas ir kļūda, 246 00:17:31,000 --> 00:17:41,000 rakstiet printf, tad jūs varētu vēlēties, lai būtu drukāt uz standarta kļūda, nevis standarta out. 247 00:17:41,000 --> 00:17:44,000 >> Kāds ir kaut kas cits, lai atzīmēt? Jā. 248 00:17:44,000 --> 00:17:47,000 [Studentu] Vai jums iet pa [bijusi dzirdama]? 249 00:17:47,000 --> 00:17:55,000 [Robs B.] Jā, faktisko tā binariness vai tikai kas tas ir? 250 00:17:55,000 --> 00:17:57,000 [Studentu] Tātad jūs reizināt to ar 2? 251 00:17:57,000 --> 00:17:59,000 [Robs B.] Jā, būtībā. 252 00:17:59,000 --> 00:18:11,000 Binārā zemi, mums vienmēr ir mūsu noteikt cipariem. 253 00:18:11,000 --> 00:18:22,000 Apstāšanos kreisi 1 būtībā ievieto to šeit labajā pusē. 254 00:18:22,000 --> 00:18:25,000 Atpakaļ uz šo, tikai atcerēties, ka viss bināro 255 00:18:25,000 --> 00:18:28,000 ir jauda 2, tāpēc tas bija 2 līdz 0, 256 00:18:28,000 --> 00:18:30,000 Tas 2-1 The, šis 2-2 The. 257 00:18:30,000 --> 00:18:33,000 Ievietojot 0 uz labo pusi tagad, mēs vienkārši novirzīt viss vairāk. 258 00:18:33,000 --> 00:18:38,000 Ko izmanto, lai ir 2 līdz 0 ir tagad 2-1 The, ir 2 līdz 2. 259 00:18:38,000 --> 00:18:41,000 Labajā pusē mēs ievietots 260 00:18:41,000 --> 00:18:44,000 neizbēgami būs 0, 261 00:18:44,000 --> 00:18:46,000 kas ir jēga. 262 00:18:46,000 --> 00:18:49,000 Ja jūs kādreiz reizināt numuru ar 2, tas nav gatavojas, lai galu galā dīvaini, 263 00:18:49,000 --> 00:18:54,000 tāpēc 2 no 0 vietā vajadzētu būt 0, 264 00:18:54,000 --> 00:18:59,000 un tas ir tas, ko es pusi brīdināja par pirms ir, ja jūs notikt novirzīt 265 00:18:59,000 --> 00:19:01,000 ārpus bitu skaitu veselam skaitlim, 266 00:19:01,000 --> 00:19:04,000 tad šis 1 gatavojas galu galā iet off. 267 00:19:04,000 --> 00:19:10,000 Tas ir tikai jāuztraucas, ja jums gadās būt darīšana ar patiesi lielu jaudu. 268 00:19:10,000 --> 00:19:15,000 Bet tajā brīdī, tad jums ir darīšana ar masīvu miljardiem lietām, 269 00:19:15,000 --> 00:19:25,000 kas varētu ievietot atmiņā vienalga. 270 00:19:25,000 --> 00:19:31,000 >> Tagad mēs varam nokļūt uz pop, kas ir vēl vieglāk. 271 00:19:31,000 --> 00:19:36,000 Jūs varētu darīt to, piemēram, ja jums gadās pop visu ķekars, 272 00:19:36,000 --> 00:19:38,000 un tagad tu esi pusi jaudas vēlreiz. 273 00:19:38,000 --> 00:19:42,000 Jūs varētu realloc sarukt atmiņas apjomu jums ir, 274 00:19:42,000 --> 00:19:47,000 bet jums nav jāuztraucas par to, lai tikai realloc lieta būs 275 00:19:47,000 --> 00:19:50,000 aug atmiņu, nekad sarūk atmiņu, 276 00:19:50,000 --> 00:19:59,000 kas notiek, lai pop super viegli. 277 00:19:59,000 --> 00:20:02,000 Tagad rindas, kas būs tāpat skursteņi, 278 00:20:02,000 --> 00:20:06,000 bet lai jums veikt lietas ir pretēja. 279 00:20:06,000 --> 00:20:10,000 Prototipu piemērs rindā ir līnija, 280 00:20:10,000 --> 00:20:12,000 tāpēc es domāju, ja tu būtu angļu, es būtu teicis 281 00:20:12,000 --> 00:20:17,000 prototipu piemērs rindā ir rinda. 282 00:20:17,000 --> 00:20:22,000 Tātad, piemēram, līnijas, ja tu esi pirmais cilvēks rindā, 283 00:20:22,000 --> 00:20:24,000 jūs sagaida, lai būtu pirmais cilvēks no līnijas. 284 00:20:24,000 --> 00:20:31,000 Ja jūs esat pēdējais cilvēks rindā, jums būs pēdējais cilvēks apkalpo. 285 00:20:31,000 --> 00:20:35,000 Mēs to saucam par FIFO modelis, bet kaudze bija LIFO modelis. 286 00:20:35,000 --> 00:20:40,000 Šie vārdi ir diezgan universāls. 287 00:20:40,000 --> 00:20:46,000 >> Piemēram skursteņi un atšķirībā masīvos, rindas parasti neļauj piekļūt elementiem vidū. 288 00:20:46,000 --> 00:20:50,000 Lūk, kaudze, mums ir push un pop. 289 00:20:50,000 --> 00:20:54,000 Lūk, mēs gadās aicināja viņus ierindod un dequeue. 290 00:20:54,000 --> 00:20:58,000 Esmu arī dzirdējis viņus sauc pārmaiņas un unshift. 291 00:20:58,000 --> 00:21:02,000 Es esmu dzirdējis cilvēkus sakām push un pop arī uz rindām. 292 00:21:02,000 --> 00:21:05,000 Esmu dzirdējis ievietot, izņemt, 293 00:21:05,000 --> 00:21:11,000 tik push un pop, ja jūs runājat par skursteņi, jūs stumšanas un popping. 294 00:21:11,000 --> 00:21:16,000 Ja jūs runājat par rindām, jūs varētu izvēlēties vārdus, kurus vēlaties izmantot 295 00:21:16,000 --> 00:21:23,000 par ievietošanai un izņemšanai, un nav par to, ko vajadzētu saukt vienprātība. 296 00:21:23,000 --> 00:21:27,000 Bet šeit, mums ir ierindod un dequeue. 297 00:21:27,000 --> 00:21:37,000 Tagad, struktūrai izskatās gandrīz identiski kaudze struct. 298 00:21:37,000 --> 00:21:40,000 Bet mums ir sekot galvas. 299 00:21:40,000 --> 00:21:44,000 Es domāju, tas saka šeit lejā, bet kāpēc mums vajag galvu? 300 00:21:53,000 --> 00:21:57,000 Prototipi ir būtībā identiski push un pop. 301 00:21:57,000 --> 00:21:59,000 Jūs varat domāt par to kā push un popmūzikai. 302 00:21:59,000 --> 00:22:08,000 Vienīgā atšķirība ir pop atgriežas-nevis no pēdējā, tas atgriežas pirmais. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, vai kaut ko. 304 00:22:12,000 --> 00:22:14,000 Un šeit ir sākums. 305 00:22:14,000 --> 00:22:17,000 Mūsu rinda ir pilns, tāpēc tur ir četri elementi tajā. 306 00:22:17,000 --> 00:22:21,000 No mūsu rindas beigas ir pašlaik 2, 307 00:22:21,000 --> 00:22:24,000 un tagad mēs ejam, lai ievietotu kaut ko citu. 308 00:22:24,000 --> 00:22:29,000 >> Ja mēs vēlamies, lai ievietotu, ka kaut kas cits, ko mēs izdarījām kaudze versiju 309 00:22:29,000 --> 00:22:36,000 tiek mēs paplašināt mūsu bloku atmiņas. 310 00:22:36,000 --> 00:22:40,000 Kas ir ar šo problēmu? 311 00:22:40,000 --> 00:22:45,000 [Studentu] Jūs pārvietot 2. 312 00:22:45,000 --> 00:22:51,000 Ko es teicu iepriekš par rindas beigās, 313 00:22:51,000 --> 00:22:57,000 tas nav jēgas, ka mēs sākam pēc 1, 314 00:22:57,000 --> 00:23:01,000 tad mēs vēlamies līdz 1 dequeue, tad dequeue 3, tad dequeue 4, 315 00:23:01,000 --> 00:23:05,000 tad dequeue 2, tad dequeue šo vienu. 316 00:23:05,000 --> 00:23:08,000 Mēs nevaram izmantot realloc tagad, 317 00:23:08,000 --> 00:23:11,000 vai vismaz, jums ir izmantot realloc savādāk. 318 00:23:11,000 --> 00:23:15,000 Bet jūs, iespējams, ne tikai izmantot realloc. 319 00:23:15,000 --> 00:23:18,000 Jums nāksies manuāli kopēt savu atmiņu. 320 00:23:18,000 --> 00:23:21,000 >> Ir divas funkcijas kopēt atmiņu. 321 00:23:21,000 --> 00:23:25,000 Ir memcopy un memmove. 322 00:23:25,000 --> 00:23:29,000 Es esmu šobrīd lasījums cilvēks lapas, lai redzētu, kura jūs gatavojas vēlaties izmantot. 323 00:23:29,000 --> 00:23:35,000 Labi, memcopy, atšķirība ir 324 00:23:35,000 --> 00:23:38,000 ka memcopy un memmove, viens rokturi lietu pareizi 325 00:23:38,000 --> 00:23:41,000 kur jūs kopēšana uz reģionu, kas notiek, lai pārklājas reģionu 326 00:23:41,000 --> 00:23:46,000 jūs kopēšana no. 327 00:23:46,000 --> 00:23:50,000 Memcopy nav to rīkoties. Memmove dara. 328 00:23:50,000 --> 00:23:59,000 Jūs varat domāt par šīs problēmas- 329 00:23:59,000 --> 00:24:09,000 pieņemsim, ka es gribu, lai kopētu šo puisis, 330 00:24:09,000 --> 00:24:13,000 šie četri līdz šim puisi. 331 00:24:13,000 --> 00:24:16,000 Beigās, ko masīva vajadzētu izskatīties 332 00:24:16,000 --> 00:24:26,000 Pēc kopija ir 2, 1, 2, 1, 3, 4, un pēc tam daži sīkumi beigās. 333 00:24:26,000 --> 00:24:29,000 Bet tas ir atkarīgs no pasūtījuma, kurā mēs tiešām kopēt, 334 00:24:29,000 --> 00:24:32,000 jo, ja mēs neuzskatām, ka šis reģions mēs kopēšana uz 335 00:24:32,000 --> 00:24:35,000 pārklājas viens mēs esam kopēšana no, 336 00:24:35,000 --> 00:24:46,000 tad mēs varētu darīt, piemēram, sākuma šeit, kopēt 2 uz vietas mēs gribam iet, 337 00:24:46,000 --> 00:24:52,000 tad pārvietot mūsu norādes uz priekšu. 338 00:24:52,000 --> 00:24:56,000 >> Tagad mēs gribam būt šeit un šeit, un tagad mēs vēlamies, lai kopētu 339 00:24:56,000 --> 00:25:04,000 Tas pār šo puisis puisis un pārvietot mūsu norādes uz priekšu. 340 00:25:04,000 --> 00:25:07,000 Ko mēs esam gatavojas galu galā kļūst ir 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 vietā atbilstošā 2, 1, 2, 1, 3, 4, jo 342 00:25:10,000 --> 00:25:15,000 2, 1 neievērot ierobežojumu dēļ sākotnējo 3, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove rokturi, ka pareizi. 344 00:25:19,000 --> 00:25:23,000 Šajā gadījumā, būtībā tikai vienmēr izmantot memmove 345 00:25:23,000 --> 00:25:26,000 jo tā rīkojas pareizi. 346 00:25:26,000 --> 00:25:29,000 Tā parasti neveic jebkurā sliktāk. 347 00:25:29,000 --> 00:25:32,000 Ideja ir, nevis sākot no sākuma un kopēšanas šādā veidā 348 00:25:32,000 --> 00:25:35,000 kā mēs tikko darīja šeit, tas sākas no beigām un eksemplāros, 349 00:25:35,000 --> 00:25:38,000 un tādā gadījumā, jūs nekad nevar būt problēma. 350 00:25:38,000 --> 00:25:40,000 Nepastāv sniegumu zaudēts. 351 00:25:40,000 --> 00:25:47,000 Vienmēr izmantot memmove. Nekad nav jāuztraucas par memcopy. 352 00:25:47,000 --> 00:25:51,000 Un tur tu esi nāksies atsevišķi memmove 353 00:25:51,000 --> 00:26:01,000 ietin ap porciju savā rindā. 354 00:26:01,000 --> 00:26:04,000 Neraizējieties, ja ne pilnīgi darīts. 355 00:26:04,000 --> 00:26:10,000 Tas ir daudz grūtāk, nekā kaudze, stumtu, un pop. 356 00:26:10,000 --> 00:26:15,000 >> Kāds ir kods, mēs varētu strādāt ar? 357 00:26:15,000 --> 00:26:21,000 Pat ja pilnīgi nepilnīga? 358 00:26:21,000 --> 00:26:23,000 [Studentu] Jā, tas ir pilnīgi nepilnīga, lai gan. 359 00:26:23,000 --> 00:26:27,000 Pilnīgi nepilnīga ir labi, kamēr mēs-jūs varat ietaupīt pārskatīšanu? 360 00:26:27,000 --> 00:26:32,000 Es aizmirst, ka katru reizi. 361 00:26:32,000 --> 00:26:39,000 Labi, ignorējot to, kas notiek, kad mums ir nepieciešams, lai mainītu lietas. 362 00:26:39,000 --> 00:26:42,000 Pilnībā ignorēt resize. 363 00:26:42,000 --> 00:26:49,000 Izskaidrot šo kodu. 364 00:26:49,000 --> 00:26:54,000 Es esmu pārbaudes vispirms, ja izmērs ir mazāks nekā kopiju vispirms 365 00:26:54,000 --> 00:27:01,000 un tad pēc tam, es ievietot-es galvu + izmēru, 366 00:27:01,000 --> 00:27:05,000 un es pārliecinieties, ka tā apņem jaudu masīva, 367 00:27:05,000 --> 00:27:08,000 un es ievietot jaunu stīgu šajā pozīcijā. 368 00:27:08,000 --> 00:27:12,000 Tad es palielinātu un atgriezties taisnība. 369 00:27:12,000 --> 00:27:22,000 >> [Robs B.] Šis noteikti ir viens no tiem gadījumiem, kad jūs gatavojas vēlaties, lai, izmantojot mod. 370 00:27:22,000 --> 00:27:25,000 Jebkāda veida gadījumā, ja jums ir ietīšana apkārt, ja jūs domājat ietīšana ap, 371 00:27:25,000 --> 00:27:29,000 tūlītēja doma būtu mod. 372 00:27:29,000 --> 00:27:36,000 Kā ātri optimizāciju / padarīt savu kodu vienā rindā īsāks, 373 00:27:36,000 --> 00:27:42,000 Jūs ievērosiet, ka līnija tūlīt pēc šo vienu 374 00:27:42,000 --> 00:27:53,000 ir tikai izmērs + +, lai jūs apvienot, ka šajā līnijā, izmērs + +. 375 00:27:53,000 --> 00:27:58,000 Tagad šeit lejā, mums ir lieta 376 00:27:58,000 --> 00:28:01,000 ja mums nav pietiekami daudz atmiņas, 377 00:28:01,000 --> 00:28:05,000 tāpēc mēs palielinām mūsu spējas ar 2. 378 00:28:05,000 --> 00:28:09,000 Es domāju, jūs varētu būt tāda pati problēma šeit, bet mēs varam ignorēt to tagad, 379 00:28:09,000 --> 00:28:13,000 kur, ja jums nav, lai palielinātu savu kapacitāti, 380 00:28:13,000 --> 00:28:18,000 tad jūs gatavojas vēlaties, lai samazinātu savu kapacitāti ar 2 vēlreiz. 381 00:28:18,000 --> 00:28:24,000 Vēl īss piezīme ir tāpat kā jūs varat darīt + =, 382 00:28:24,000 --> 00:28:30,000 Jūs varat arī darīt << =. 383 00:28:30,000 --> 00:28:43,000 Gandrīz jebko var doties pirms vienāds, + =, | =, un =, << =. 384 00:28:43,000 --> 00:28:52,000 Char * jaunais ir mūsu jaunā bloka atmiņu. 385 00:28:52,000 --> 00:28:55,000 Ak, nekā šeit. 386 00:28:55,000 --> 00:29:02,000 >> Ko cilvēki domā par to, kādi mūsu jauno bloka atmiņu? 387 00:29:02,000 --> 00:29:06,000 [Studentu] Tas būtu char **. 388 00:29:06,000 --> 00:29:12,000 Atceroties mūsu struct šeit, 389 00:29:12,000 --> 00:29:14,000 stīgas ir tas, ko mēs pārdalīšanai. 390 00:29:14,000 --> 00:29:21,000 Mēs padarīt visu jauno dinamisku uzglabāšana par šiem rindā elementiem. 391 00:29:21,000 --> 00:29:25,000 Ko mēs gribam būt piešķirot jūsu stīgas ir tas, ko mēs esam mallocing tieši tagad, 392 00:29:25,000 --> 00:29:30,000 un tik jauns būs char **. 393 00:29:30,000 --> 00:29:34,000 Tas būs masīvs stīgas. 394 00:29:34,000 --> 00:29:38,000 Tad kāda ir gadījumā, saskaņā ar kuru mēs ejam, lai atgriezties viltus? 395 00:29:38,000 --> 00:29:41,000 [Studentu] Vai mums darīt char *? 396 00:29:41,000 --> 00:29:44,000 [Robs B.] Jā, labi zvanu. 397 00:29:44,000 --> 00:29:46,000 [Studentu] Kas tas bija? 398 00:29:46,000 --> 00:29:49,000 [Robs B.] Mēs vēlējāmies darīt izmēru char * jo mēs vairs- 399 00:29:49,000 --> 00:29:53,000 tas tiešām būs ļoti liela problēma, jo sizeof (char) būtu 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof char * būs 4, 401 00:29:55,000 --> 00:29:58,000 tāpēc daudz reizes, kad jūs nodarbojas ar Ints, 402 00:29:58,000 --> 00:30:01,000 Jums ir tendence iegūt prom ar to, jo izmēru int un izmēru int * 403 00:30:01,000 --> 00:30:04,000 uz 32-bitu sistēmā būs tas pats. 404 00:30:04,000 --> 00:30:09,000 Bet šeit, sizeof (char) un sizeof (char *) tagad būs tas pats. 405 00:30:09,000 --> 00:30:15,000 >> Kas ir gadījums, kad mēs atgriezties viltus? 406 00:30:15,000 --> 00:30:17,000 [Studentu] Jauns ir nulle. 407 00:30:17,000 --> 00:30:23,000 Jā, ja jaunais ir nulle, mēs atgriezties viltus, 408 00:30:23,000 --> 00:30:34,000 un es esmu gatavojas gāzt šeit- 409 00:30:34,000 --> 00:30:37,000 [Studentu] [dzirdams] 410 00:30:37,000 --> 00:30:39,000 [Robs B.] Jā, tas ir labi. 411 00:30:39,000 --> 00:30:46,000 Jūs varētu vai nu izdarīt 2 reizes jaudu vai jaudas maiņu 1 un tad tikai noteikt to šeit vai neatkarīgi. 412 00:30:46,000 --> 00:30:52,000 Mēs darīsim to, kā mums bija tā. 413 00:30:52,000 --> 00:30:56,000 Jauda >> = 1. 414 00:30:56,000 --> 00:31:08,000 Un jūs nekad nav jāuztraucas par iespēju zaudēt gada 1 vietu 415 00:31:08,000 --> 00:31:12,000 jo jums atstājis nobīdīts 1, tātad 1 vieta ir vienmēr 0, 416 00:31:12,000 --> 00:31:16,000 tik labi novirzot 1, jūs joprojām būs kārtībā. 417 00:31:16,000 --> 00:31:19,000 [Studentu] Vai jums ir nepieciešams to darīt, pirms atgriešanās? 418 00:31:19,000 --> 00:31:29,000 [Robs B.] Jā, tas padara absolūti nekādas jēgas. 419 00:31:29,000 --> 00:31:36,000 >> Tagad pieņemam mēs esam gatavojas galu galā atgriešanās patiess līdz galam. 420 00:31:36,000 --> 00:31:39,000 Veids, kā mēs gatavojamies darīt šos memmoves, 421 00:31:39,000 --> 00:31:45,000 mums jābūt uzmanīgiem ar to, kā mēs viņus. 422 00:31:45,000 --> 00:31:50,000 Vai kāds ir kādi ieteikumi par to, kā mēs viņus? 423 00:32:17,000 --> 00:32:21,000 Lūk, mūsu sākums. 424 00:32:21,000 --> 00:32:28,000 Neizbēgami, mēs vēlamies sākt sākumā atkal 425 00:32:28,000 --> 00:32:35,000 un kopēt lietas no turienes, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Kā jūs to darīt? 427 00:32:41,000 --> 00:32:52,000 Pirmkārt, man ir jāskatās uz cilvēka lapā memmove vēlreiz. 428 00:32:52,000 --> 00:32:57,000 Memmove, lai argumentu vienmēr ir svarīga. 429 00:32:57,000 --> 00:33:01,000 Mēs vēlamies, lai mūsu galamērķi pirmais, avots otrais, izmēru trešais. 430 00:33:01,000 --> 00:33:06,000 Ir funkcijas, kas reversētas avotu un galamērķi daudz. 431 00:33:06,000 --> 00:33:11,000 Galamērķis, avots mēdz būt konsekventi nedaudz. 432 00:33:17,000 --> 00:33:21,000 Gājiens, kas tas ir atgriešanās? 433 00:33:21,000 --> 00:33:27,000 Tā atgriež rādītāju uz galamērķi, lai kāda iemesla dēļ jūs varētu vēlēties, ka. 434 00:33:27,000 --> 00:33:32,000 Es varu attēlu lasīt, bet mēs vēlamies virzīties uz mūsu mērķi. 435 00:33:32,000 --> 00:33:35,000 >> Kas ir mūsu galamērķis būs? 436 00:33:35,000 --> 00:33:37,000 [Studentu] Jauns. 437 00:33:37,000 --> 00:33:39,000 [Robs B.] Jā, un kur mēs kopēšana no? 438 00:33:39,000 --> 00:33:43,000 Pirmā lieta, mums ir kopēšanu tas ir 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Kas ir-tas 1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Kāds ir no 1 šīs adreses? 441 00:33:55,000 --> 00:33:58,000 Kāds ir no 1 šīs adreses? 442 00:33:58,000 --> 00:34:01,000 [Studentu] [dzirdams] 443 00:34:01,000 --> 00:34:03,000 [Robs B.] galva adrese pirmais elements. 444 00:34:03,000 --> 00:34:05,000 Kā mēs varam iegūt pirmo elementu masīvu? 445 00:34:05,000 --> 00:34:10,000 [Studentu] rinda. 446 00:34:10,000 --> 00:34:15,000 [Robs B.] Jā, q.strings. 447 00:34:15,000 --> 00:34:20,000 Atcerieties, šeit, mūsu galvenais ir 1. 448 00:34:20,000 --> 00:34:24,000 Darn to. Es tikai domāju, ka tas ir maģiski- 449 00:34:24,000 --> 00:34:29,000 Lūk, mūsu galvenais ir 1. Es esmu gatavojas mainīt savu krāsu pārāk. 450 00:34:29,000 --> 00:34:36,000 Un šeit ir stīgas. 451 00:34:36,000 --> 00:34:41,000 Tas, mēs varam vai nu rakstīt to kā mēs to darījām nekā šeit 452 00:34:41,000 --> 00:34:43,000 ar galvas + q.strings. 453 00:34:43,000 --> 00:34:51,000 Daudzi cilvēki arī rakstīt IT & q.strings [galvu]. 454 00:34:51,000 --> 00:34:55,000 Tas nav īsti mazāk efektīva. 455 00:34:55,000 --> 00:34:58,000 Jūs varētu domāt par to, kā jūs dereferencing to un pēc tam iegūt adresi, 456 00:34:58,000 --> 00:35:04,000 bet kompilators gatavojas tulkot to, ko mums bija pirms vienalga, q.strings + galva. 457 00:35:04,000 --> 00:35:06,000 Katrā ziņā jūs vēlaties, lai padomātu par to. 458 00:35:06,000 --> 00:35:11,000 >> Un cik daudz baitu mēs vēlamies kopēt? 459 00:35:11,000 --> 00:35:15,000 [Studentu] Ietilpība - galva. 460 00:35:15,000 --> 00:35:18,000 Jauda - galva. 461 00:35:18,000 --> 00:35:21,000 Un tad jūs vienmēr varētu uzrakstīt piemēru 462 00:35:21,000 --> 00:35:23,000 lai noskaidrotu, vai tas ir labi. 463 00:35:23,000 --> 00:35:26,000 [Studentu] Tai ir dalīts ar 2, tad. 464 00:35:26,000 --> 00:35:30,000 Jā, tāpēc es domāju, mēs varētu izmantot lielumu. 465 00:35:30,000 --> 00:35:35,000 Mums joprojām ir izmērs ir- 466 00:35:35,000 --> 00:35:39,000 izmantojot izmēru, mums ir lielums ir vienāds ar 4. 467 00:35:39,000 --> 00:35:42,000 Mūsu izmērs ir 4. Mūsu galvenais ir 1. 468 00:35:42,000 --> 00:35:46,000 Mēs vēlamies, lai kopētu šos 3 elementiem. 469 00:35:46,000 --> 00:35:54,000 Tas ir veselība pārbaudītu, ka izmērs - galva ir pareizi 3. 470 00:35:54,000 --> 00:35:58,000 Un nāk atpakaļ šeit, tāpat kā mēs teicām iepriekš, 471 00:35:58,000 --> 00:36:00,000 ja mēs izmantot jaudas, tad mēs ir dalīt pa 2 472 00:36:00,000 --> 00:36:04,000 jo mēs esam jau pieaudzis mūsu spējas, tāpēc tā vietā, mēs spēsim izmantot izmēru. 473 00:36:11,000 --> 00:36:13,000 Kas kopijas ka porcija. 474 00:36:13,000 --> 00:36:18,000 Tagad, mums ir nepieciešams, lai kopētu citu daļu, daļu, kas ir pa kreisi no sākuma. 475 00:36:18,000 --> 00:36:28,000 >> Tas notiek, lai memmove uz kāda nostāja? 476 00:36:28,000 --> 00:36:32,000 [Studentu] Plus izmērs - galva. 477 00:36:32,000 --> 00:36:38,000 Jā, tāpēc mēs jau esam kopēt izmēros - galvas baiti, 478 00:36:38,000 --> 00:36:43,000 un tāpēc, ja mēs gribam, lai kopētu atlikušos baiti ir jauns 479 00:36:43,000 --> 00:36:48,000 un tad izmēra mīnus-labi, baitu skaits, mēs esam jau kopē iekšā 480 00:36:48,000 --> 00:36:52,000 Un tad, kad mēs kopēšana no? 481 00:36:52,000 --> 00:36:54,000 [Studentu] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Robs B.] Jā, q.strings. 483 00:36:56,000 --> 00:37:02,000 Mēs varētu vai nu darīt & q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 Tas ir ievērojami mazāk izplatīta nekā šis. 485 00:37:05,000 --> 00:37:14,000 Ja tas ir tikai būs 0, tad jūs parasti redzēt q.strings. 486 00:37:14,000 --> 00:37:16,000 Tas ir, ja mēs kopēšana no. 487 00:37:16,000 --> 00:37:18,000 Cik daudz baitu mēs esam atstājuši, lai kopētu? >> [Studentu] 10. 488 00:37:18,000 --> 00:37:20,000 Tiesības. 489 00:37:20,000 --> 00:37:25,000 [Studentu] Vai mums ir vairoties 5-10 reizes lielāka par baitu vai kaut ko? 490 00:37:25,000 --> 00:37:30,000 Jā, tā tas ir, ja, ko tieši mēs kopēšanu? 491 00:37:30,000 --> 00:37:32,000 [Studentu] [dzirdams] 492 00:37:32,000 --> 00:37:34,000 Kāda ir par ko mēs esam kopēšanas veids? 493 00:37:34,000 --> 00:37:36,000 [Studentu] [dzirdams] 494 00:37:36,000 --> 00:37:41,000 Yeah, tāpēc char * s, ka mēs esam kopēšanu, mēs nezinām, kur tie nāk no. 495 00:37:41,000 --> 00:37:47,000 Nu, ja viņi norāda uz, piemēram, stīgas, mēs galu galā spiežot to uz rindā 496 00:37:47,000 --> 00:37:49,000 vai enqueuing uz rindā. 497 00:37:49,000 --> 00:37:51,000 Kur tie nāk no mums nav ne jausmas. 498 00:37:51,000 --> 00:37:56,000 Mums ir nepieciešams, lai sekotu char * s paši. 499 00:37:56,000 --> 00:38:00,000 Mēs nevēlamies, lai kopētu izmērs - galvas baiti. 500 00:38:00,000 --> 00:38:03,000 Mēs vēlamies, lai kopētu izmērs - galva char * s, 501 00:38:03,000 --> 00:38:11,000 tāpēc mēs esam gatavojas reizināt šo ar sizeof (char *). 502 00:38:11,000 --> 00:38:17,000 Pats šeit lejā, galvu * sizeof (char *). 503 00:38:17,000 --> 00:38:24,000 >> [Studentu] Kas par [dzirdams]? 504 00:38:24,000 --> 00:38:26,000 Tas tieši šeit? 505 00:38:26,000 --> 00:38:28,000 [Studentu] Nē, zem, izmērs - galva. 506 00:38:28,000 --> 00:38:30,000 [Robs B.] Tas tieši šeit? 507 00:38:30,000 --> 00:38:32,000 Rādītājs aritmētika. 508 00:38:32,000 --> 00:38:35,000 Kā rādītājs aritmētika iet uz darbu, ir 509 00:38:35,000 --> 00:38:40,000 tas automātiski reizina ar izmēru veidu, ka mums ir darīšana ar. 510 00:38:40,000 --> 00:38:46,000 Tāpat kā nekā šeit, jaunais + (lielums - galva) 511 00:38:46,000 --> 00:38:56,000 ir tieši līdzvērtīgs & jaunā [lielumu - galvas] 512 00:38:56,000 --> 00:39:00,000 kamēr mēs sagaidām, ka strādāt pareizi, 513 00:39:00,000 --> 00:39:04,000 jo, ja mums ir darīšana ar int masīvu, tad mums nav indeksu par int- 514 00:39:04,000 --> 00:39:07,000 vai, ja tas ir par izmēru 5 un jūs vēlaties 4. elementu, tad mēs indekss par 515 00:39:07,000 --> 00:39:10,000 int masīvs [4]. 516 00:39:10,000 --> 00:39:14,000 Jūs Don 't-[4] * lielumu int. 517 00:39:14,000 --> 00:39:21,000 Kas rīkojas ar to automātiski, un šis gadījums 518 00:39:21,000 --> 00:39:29,000 ir burtiski līdzvērtīgs, tāpēc kronšteins sintakse 519 00:39:29,000 --> 00:39:34,000 ir tikai gatavojas pārvērst šo tiklīdz jūs sastādīt. 520 00:39:34,000 --> 00:39:38,000 Tas ir kaut kas jums ir jābūt uzmanīgiem, ka 521 00:39:38,000 --> 00:39:42,000 ja jūs pievienojat izmērs - galva 522 00:39:42,000 --> 00:39:45,000 Jums ir pievienot ne vienu baitu. 523 00:39:45,000 --> 00:39:53,000 Tu esi pievienojot vienu char *, kas var būt viens baiti vai neatkarīgi. 524 00:39:53,000 --> 00:39:56,000 >> Citi jautājumi? 525 00:39:56,000 --> 00:40:04,000 Labi, dequeue būs vieglāk. 526 00:40:04,000 --> 00:40:11,000 Es došu jums minūti, lai īstenotu. 527 00:40:11,000 --> 00:40:18,000 Ak, un es domāju, tas ir tāda pati situācija, kad 528 00:40:18,000 --> 00:40:21,000 ko Enqueue gadījumā, ja mēs esam enqueuing null, 529 00:40:21,000 --> 00:40:24,000 varbūt mēs vēlamies rīkoties tā, varbūt mums nav. 530 00:40:24,000 --> 00:40:27,000 Mēs ne darīt to vēlreiz šeit, bet pats kā mūsu kaudze gadījumā. 531 00:40:27,000 --> 00:40:34,000 Ja mēs ierindod null, mēs varētu vēlēties, lai ignorēt to. 532 00:40:34,000 --> 00:40:40,000 Kāds ir daži kodu es varētu uzvilkt? 533 00:40:40,000 --> 00:40:45,000 [Studentu] Man vienkārši ir dequeue. 534 00:40:45,000 --> 00:40:56,000 Versija 2 ir tas, ka-labi. 535 00:40:56,000 --> 00:40:59,000 Jūs vēlaties, lai izskaidrotu? 536 00:40:59,000 --> 00:41:01,000 [Studentu] Pirmkārt, jums pārliecinieties, ka tur ir kaut kas rindā 537 00:41:01,000 --> 00:41:07,000 un ka izmērs ir iet uz leju līdz 1. 538 00:41:07,000 --> 00:41:11,000 Jums ir nepieciešams to darīt, un tad jums atgriezties galvu 539 00:41:11,000 --> 00:41:13,000 un pēc tam pārvietot galvu uz augšu 1. 540 00:41:13,000 --> 00:41:19,000 Labi, tā ir stūra gadījumā mums ir jāapsver. Yeah. 541 00:41:19,000 --> 00:41:24,000 [Studentu] Ja jūsu galva ir pēdējā elementā, 542 00:41:24,000 --> 00:41:26,000 tad jūs nevēlaties galvu norādīt ārpus masīva. 543 00:41:26,000 --> 00:41:29,000 >> Jā, tā tiklīdz vadītājs hits beigās mūsu masīvs, 544 00:41:29,000 --> 00:41:35,000 kad mēs dequeue, mūsu galvas būtu modded atpakaļ līdz 0. 545 00:41:35,000 --> 00:41:40,000 Diemžēl, mēs nevaram darīt, ka ar vienu soli. 546 00:41:40,000 --> 00:41:44,000 Es domāju, kā es, iespējams noteikt tā 547 00:41:44,000 --> 00:41:52,000 Tas būs char *, ko mēs esam atpakaļ, 548 00:41:52,000 --> 00:41:55,000 neatkarīgi no jūsu mainīgā vārds vēlas būt. 549 00:41:55,000 --> 00:42:02,000 Tad mēs vēlamies mod galvu pēc mūsu spējas 550 00:42:02,000 --> 00:42:10,000 un pēc tam atgriezties pūt. 551 00:42:10,000 --> 00:42:14,000 Daudzi cilvēki šeit viņi varētu darīt, 552 00:42:14,000 --> 00:42:19,000 šis ir gadījums-you'll redzēt cilvēkus darīt, ja galva 553 00:42:19,000 --> 00:42:29,000 ir lielāks nekā jaudas, do galvu - kapacitāti. 554 00:42:29,000 --> 00:42:36,000 Un tas ir tikai darbs ap to mod ir. 555 00:42:36,000 --> 00:42:41,000 Galva MOD = jauda ir daudz tīrāks 556 00:42:41,000 --> 00:42:51,000 no iesaiņojuma ap nekā tad, ja vadītājs ir lielāks nekā jaudas galvu - jaudas. 557 00:42:51,000 --> 00:42:56,000 >> Jautājumi? 558 00:42:56,000 --> 00:43:02,000 Labi, pēdējā lieta, ko mēs esam atstājuši ir mūsu saistīts saraksts. 559 00:43:02,000 --> 00:43:07,000 Jūs varētu izmantot, lai dažas no saistīts saraksts uzvedību, ja jūs 560 00:43:07,000 --> 00:43:11,000 saistīti sarakstus jūsu hash tabulu, ja jūs hash tabulu. 561 00:43:11,000 --> 00:43:15,000 Es stingri ieteiktu darīt hash tabulu. 562 00:43:15,000 --> 00:43:17,000 Jums varētu būt jau veikuši Trie, 563 00:43:17,000 --> 00:43:23,000 bet cenšas ir daudz grūtāk. 564 00:43:23,000 --> 00:43:27,000 Teorētiski viņi asimptotiski labāk. 565 00:43:27,000 --> 00:43:30,000 Bet paskatieties uz lielo kuģa, 566 00:43:30,000 --> 00:43:35,000 un mēģina nekad darīt labāk, un tie aizņem vairāk atmiņas. 567 00:43:35,000 --> 00:43:43,000 Viss par mēģina beidzas ar to sliktāks par vairāk darba. 568 00:43:43,000 --> 00:43:49,000 Tas ir tas, ko David Malan risinājums vienmēr ir 569 00:43:49,000 --> 00:43:56,000 Vai viņš vienmēr raksti viņa Trie risinājums, un redzēsim, kur viņš šobrīd ir. 570 00:43:56,000 --> 00:44:00,000 Ko viņš ar David J? 571 00:44:00,000 --> 00:44:06,000 Viņš ir # 18, tā ka nav briesmīgi slikti, 572 00:44:06,000 --> 00:44:09,000 un tas būs viens no labākajiem mēģina jūs varat iedomāties 573 00:44:09,000 --> 00:44:17,000 vai viens no labākajiem mēģina no Trie. 574 00:44:17,000 --> 00:44:23,000 Vai tas nav pat viņa oriģināls risinājums? 575 00:44:23,000 --> 00:44:29,000 Es jūtu Trie risinājumi mēdz būt vairāk šajā diapazonā RAM izmantošana. 576 00:44:29,000 --> 00:44:33,000 >> Iet uz leju līdz ļoti top, un RAM izmantošana ir vienotā cipariem. 577 00:44:33,000 --> 00:44:36,000 Iet uz leju uz leju, un tad jūs sākat redzēt mēģina 578 00:44:36,000 --> 00:44:41,000 kur jūs saņemsiet absolūti masveida RAM izmantošana, 579 00:44:41,000 --> 00:44:45,000 un cenšas ir grūtāk. 580 00:44:45,000 --> 00:44:53,000 Nav pilnīgi tā vērts, bet par izglītības pieredzi, ja jūs vienu. 581 00:44:53,000 --> 00:44:56,000 Pēdējā lieta ir mūsu saistīts saraksts, 582 00:44:56,000 --> 00:45:04,000 un šīs trīs lietas, skursteņi, rindas, un piesaistītie saraksti, 583 00:45:04,000 --> 00:45:09,000 turpmākais lieta, ko jūs kādreiz darīt datorzinātnēs 584 00:45:09,000 --> 00:45:12,000 pieņemam, ka jūs ir iepazinuši šīm lietām. 585 00:45:12,000 --> 00:45:19,000 Tie ir tikai tik svarīga visam. 586 00:45:19,000 --> 00:45:25,000 >> Saistīts sarakstus, un šeit mēs esam atsevišķi saistīts saraksts būs mūsu īstenošana. 587 00:45:25,000 --> 00:45:34,000 Kāda atsevišķi saistītas nozīmē, salīdzinot ar divkārt saistīts? Jā. 588 00:45:34,000 --> 00:45:37,000 [Studentu] Tas tikai norāda uz nākamo rādītāju nevis uz norādes, 589 00:45:37,000 --> 00:45:39,000 piemēram, viena pirms to un pēc tam vienu. 590 00:45:39,000 --> 00:45:44,000 Yeah, tāpēc attēla formāts, ko es tikko darīt? 591 00:45:44,000 --> 00:45:48,000 Man ir divas lietas. Man ir attēlu un attēlu. 592 00:45:48,000 --> 00:45:51,000 Jo attēla formātā, mūsu atsevišķi saistīti saraksti, 593 00:45:51,000 --> 00:45:57,000 neizbēgami, mums ir sava veida rādītāju uz galvas mūsu sarakstā, 594 00:45:57,000 --> 00:46:02,000 un tad ietvaros mūsu sarakstā, mums vienkārši ir norādes, 595 00:46:02,000 --> 00:46:05,000 un varbūt tas norāda uz null. 596 00:46:05,000 --> 00:46:08,000 Tas būs jūsu tipiskā zīmējums atsevišķi saistīts saraksts. 597 00:46:08,000 --> 00:46:14,000 Divkārt saistīts saraksts, jūs varat doties atpakaļ. 598 00:46:14,000 --> 00:46:19,000 Ja es jums dot nekādu mezglu sarakstā, tad jūs varat noteikti nokļūt 599 00:46:19,000 --> 00:46:23,000 jebkuru citu mezglu saraksta, ja tas ir divkārt saistīts saraksts. 600 00:46:23,000 --> 00:46:27,000 Bet, ja es iegūtu Jums trešo mezglu sarakstā un tas ir atsevišķi saistīts saraksts, 601 00:46:27,000 --> 00:46:30,000 Nav veids, kā jūs kādreiz gatavojas saņemt uz pirmo un otro mezgliem. 602 00:46:30,000 --> 00:46:34,000 Un tur ir priekšrocības un kaitējumus, un viena acīmredzama 603 00:46:34,000 --> 00:46:42,000 ir jums aizņem vairāk izmēra, un jums ir sekot līdzi, kur šīs lietas ir norādot tagad. 604 00:46:42,000 --> 00:46:49,000 Bet mēs tikai rūp atsevišķi saistītas. 605 00:46:49,000 --> 00:46:53,000 >> Dažas lietas mēs esam nāksies īstenot. 606 00:46:53,000 --> 00:47:00,000 Jūsu typedef struktūrai mezglā, int i: struct mezglā * nākamo; mezglā. 607 00:47:00,000 --> 00:47:09,000 Ka typedef būtu sadedzināt savos prātos. 608 00:47:09,000 --> 00:47:14,000 1 viktorīna būtu gribētu sniegt typedef par saistītu saraksta mezglā, 609 00:47:14,000 --> 00:47:18,000 un jums vajadzētu būt iespējai nekavējoties ķeburs ka uz leju 610 00:47:18,000 --> 00:47:22,000 pat domāt par to. 611 00:47:22,000 --> 00:47:27,000 Es domāju, pāris jautājumi, kāpēc mums vajag struct šeit? 612 00:47:27,000 --> 00:47:32,000 Kāpēc mēs nevaram teikt mezglā *? 613 00:47:32,000 --> 00:47:35,000 [Studentu] [dzirdams] 614 00:47:35,000 --> 00:47:38,000 Yeah. 615 00:47:38,000 --> 00:47:44,000 Vienīgais, kas definē mezglā kā lieta 616 00:47:44,000 --> 00:47:47,000 ir typedef pati. 617 00:47:47,000 --> 00:47:55,000 Bet kā šo punktu, kad mēs esam veida parsēšana caur šo struct mezglā definīciju, 618 00:47:55,000 --> 00:48:01,000 mēs neesam pabeiguši mūsu typedef vēl, tāpēc jo typedef nav pabeigts, 619 00:48:01,000 --> 00:48:05,000 mezglu neeksistē. 620 00:48:05,000 --> 00:48:12,000 Bet struktūrai mezglā dara, un tas mezgls šeit, 621 00:48:12,000 --> 00:48:14,000 Tas varētu arī saukt kaut kas cits. 622 00:48:14,000 --> 00:48:16,000 Tas varētu saukt n. 623 00:48:16,000 --> 00:48:19,000 To varētu saukt saistīts saraksts mezglā. 624 00:48:19,000 --> 00:48:21,000 To varētu saukt neko. 625 00:48:21,000 --> 00:48:26,000 Bet tas struktūrai mezglā ir jāizmanto tas pats, kas šajā struct mezglā. 626 00:48:26,000 --> 00:48:29,000 Ko jūs aicinu šo ir arī šeit, 627 00:48:29,000 --> 00:48:32,000 un lai arī atbilde uz otro punktu par jautājuma 628 00:48:32,000 --> 00:48:37,000 tāpēc, daudz reizes, kad jūs redzat structs un typedefs no structs, 629 00:48:37,000 --> 00:48:42,000 jūs redzēsiet anonīmi structs kur jūs vienkārši redzēt typedef struktūrai, 630 00:48:42,000 --> 00:48:47,000 īstenošana struct, vārdnīcas, vai neatkarīgi. 631 00:48:47,000 --> 00:48:51,000 >> Kāpēc šeit mums vajag teikt mezglu? 632 00:48:51,000 --> 00:48:54,000 Kāpēc nevar tā būt anonīms struktūrai? 633 00:48:54,000 --> 00:48:56,000 Tas ir gandrīz tas pats atbildi. 634 00:48:56,000 --> 00:48:58,000 [Studentu] Jūs nepieciešams atsaukties uz to, kā struct. 635 00:48:58,000 --> 00:49:04,000 Jā, saskaņā ar struct, jums ir nepieciešams atsaukties uz struct pati. 636 00:49:04,000 --> 00:49:10,000 Ja tu nedod struct nosaukumu, ja tas ir anonīms struktūrai, jūs nevarat atsaukties uz to. 637 00:49:10,000 --> 00:49:17,000 Un pēdējais, bet ne mazāk tie būtu visi ir nedaudz vienkāršs, 638 00:49:17,000 --> 00:49:20,000 un tie palīdzēs jums saprast, ja jūs esat rakstiski šo leju 639 00:49:20,000 --> 00:49:24,000 ka jūs darāt kaut ko nepareizi, ja šīs lietas veidu, nav jēgas. 640 00:49:24,000 --> 00:49:28,000 Pēdējais, bet ne mazāk svarīgi, kāpēc tas ir jābūt struktūrai mezglu *? 641 00:49:28,000 --> 00:49:34,000 Kāpēc nevar tā vienkārši tikt struct mezglā tālāk? 642 00:49:34,000 --> 00:49:37,000 [Studentu] rādītāju uz nākamo struct. 643 00:49:37,000 --> 00:49:39,000 Tas ir neizbēgami, ko mēs gribam. 644 00:49:39,000 --> 00:49:42,000 Kāpēc tas varētu nekad būt struct mezglā nākamais? 645 00:49:42,000 --> 00:49:50,000 Kāpēc tas ir jābūt struktūrai mezglu * nākamais? Yeah. 646 00:49:50,000 --> 00:49:53,000 [Studentu] Tas ir tāpat bezgalīgu cilpu. 647 00:49:53,000 --> 00:49:55,000 Yeah. 648 00:49:55,000 --> 00:49:57,000 [Studentu] viss būs vienā. 649 00:49:57,000 --> 00:50:02,000 Jā, tikai domā par to, kā mēs varētu darīt izmēru vai kaut. 650 00:50:02,000 --> 00:50:08,000 Lielums struct ir būtībā + vai - daži raksts šeit vai tur. 651 00:50:08,000 --> 00:50:15,000 Tas būtībā būs summa no attiecīgās struct lietām izmēriem. 652 00:50:15,000 --> 00:50:18,000 Šīs tiesības šeit, nemainot neko, lielums būs viegli. 653 00:50:18,000 --> 00:50:24,000 Izmēra struct mezglā būs lielums I + izmēra nākamo. 654 00:50:24,000 --> 00:50:27,000 Izmēra i būs 4. Izmēra next būs 4. 655 00:50:27,000 --> 00:50:30,000 Izmēra struct mezglā būs 8. 656 00:50:30,000 --> 00:50:34,000 Ja mums nav *, domājot par sizeof, 657 00:50:34,000 --> 00:50:37,000 Tad sizeof (i) būs 4. 658 00:50:37,000 --> 00:50:43,000 Izmēra struct mezglā blakus būs lielums I + izmēra struct mezglā Nākamās 659 00:50:43,000 --> 00:50:46,000 + Lielums I + izmēra struct mezglā nākamo. 660 00:50:46,000 --> 00:50:55,000 Tas būtu bezgalīgs rekursija mezglu. 661 00:50:55,000 --> 00:51:00,000 Tas ir iemesls, kāpēc tas ir, kā lietas ir. 662 00:51:00,000 --> 00:51:03,000 >> Atkal, noteikti iegaumēt, ka, 663 00:51:03,000 --> 00:51:06,000 vai vismaz to saprotu pietiekami, ka jūs varat būt iespējai 664 00:51:06,000 --> 00:51:12,000 Iemesls caur to, ko tas izskatās. 665 00:51:12,000 --> 00:51:14,000 Lietām, ko mēs gatavojamies vēlamies īstenot. 666 00:51:14,000 --> 00:51:18,000 Ja garums saraksta- 667 00:51:18,000 --> 00:51:21,000 jūs varētu pievilt un turēt ap 668 00:51:21,000 --> 00:51:24,000 pasaules garums vai kaut ko, bet mēs nebrauksim, lai to izdarītu. 669 00:51:24,000 --> 00:51:28,000 Mēs ejam, lai saskaitītu garumu saraksta. 670 00:51:28,000 --> 00:51:34,000 Mēs esam satur, tā ka būtībā tāpat meklēšanas, 671 00:51:34,000 --> 00:51:41,000 tāpēc mums ir saistīts saraksts integers, lai redzētu, ja tas skaitlis ir saistītajā sarakstā. 672 00:51:41,000 --> 00:51:44,000 Prepend gatavojas ievietot sākumā sarakstā. 673 00:51:44,000 --> 00:51:46,000 Pievienošana gatavojas ievietot beigās. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted gatavojas jāiekopē sakārtotās pozīciju sarakstā. 675 00:51:53,000 --> 00:52:01,000 Insert_sorted veida pieņem, ka jums nekad nav izmantots prepend vai pievienot sliktos veidos. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted ja jūs īstenojot insert_sorted- 677 00:52:09,000 --> 00:52:13,000 pieņemsim, ka mums ir mūsu saistīts saraksts. 678 00:52:13,000 --> 00:52:18,000 Tas ir tas, ko tā šobrīd izskatās, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Es gribu, lai ievietotu 3, tik ilgi, kamēr saraksts pats par sevi ir jau sakārtoti, 680 00:52:24,000 --> 00:52:27,000 tas ir viegli atrast kur 3 pieder. 681 00:52:27,000 --> 00:52:29,000 Es sāktu ar 2. 682 00:52:29,000 --> 00:52:32,000 Labi, 3 ir lielāka par 2, tāpēc es gribu, lai saglabātu turpinās. 683 00:52:32,000 --> 00:52:35,000 Ak, 4 ir pārāk liels, tāpēc es zinu 3 gatavojas iet starp 2 un 4, 684 00:52:35,000 --> 00:52:39,000 un man ir noteikt norādes un visu, kas stuff. 685 00:52:39,000 --> 00:52:43,000 Bet, ja mums nav strikti izmantot insert_sorted, 686 00:52:43,000 --> 00:52:50,000 patīk pieņemsim tikai teikt, es prepend 6, 687 00:52:50,000 --> 00:52:55,000 tad mans saistīts saraksts ir gatavojas kļūt arī. 688 00:52:55,000 --> 00:53:01,000 Tagad tā nav jēgas, tāpēc insert_sorted, jūs varat vienkārši pieņemu 689 00:53:01,000 --> 00:53:04,000 ka saraksts ir sakārtots, lai gan operācijas eksistē 690 00:53:04,000 --> 00:53:09,000 kas var izraisīt to, lai netiek sakārtoti, un tas arī viss. 691 00:53:09,000 --> 00:53:20,000 Atrast noderīgs ievietot tik tie ir galvenās lietas, jums nāksies īstenot. 692 00:53:20,000 --> 00:53:24,000 >> Tagad, ņemt minūti, lai darīt garumu un satur, 693 00:53:24,000 --> 00:53:30,000 un tiem jābūt samērā ātri. 694 00:53:41,000 --> 00:53:48,000 Tuvojas slēgšanas laiku, lai kāds ir kaut ko par garumu vai satur? 695 00:53:48,000 --> 00:53:50,000 Viņi būs gandrīz identisks. 696 00:53:50,000 --> 00:53:57,000 [Studentu] Garums. 697 00:53:57,000 --> 00:54:01,000 Let 's redzēt, pārskatīšanu. 698 00:54:01,000 --> 00:54:04,000 Labi. 699 00:54:12,000 --> 00:54:15,000 Jūs vēlaties, lai izskaidrotu? 700 00:54:15,000 --> 00:54:21,000 [Studentu] Es tikai izveidot rādītāja mezglu un sāktu to, pirmkārt, kas ir mūsu globālo mainīgo, 701 00:54:21,000 --> 00:54:27,000 un tad es varētu pārbaudīt, lai redzētu, vai tas ir Null, lai man nav iegūt seg vaina un atgriezties 0, ja tas gadījums. 702 00:54:27,000 --> 00:54:34,000 Citādi, es cilpa ar, sekot ietvaros skaitlim 703 00:54:34,000 --> 00:54:38,000 cik reizes es esmu piekļuvis nākamo elementu sarakstu 704 00:54:38,000 --> 00:54:43,000 un tajā pašā pieauguma operācijas arī piekļūt, ka faktiskā elementa, 705 00:54:43,000 --> 00:54:47,000 un tad es nepārtraukti veikt pārbaudi, lai redzētu, vai tas ir nulle, 706 00:54:47,000 --> 00:54:56,000 un, ja tas ir nulle, tad tas aborts notiek un tikai atgriež elementu skaitu es esmu piekļūt. 707 00:54:56,000 --> 00:55:01,000 >> [Robs B.] Vai kāds ir kādi komentāri par kaut ko? 708 00:55:01,000 --> 00:55:06,000 Tas izskatās labi pareizību gudrs. 709 00:55:06,000 --> 00:55:10,000 [Studentu] Es nedomāju, ka jums ir nepieciešams mezglā == null. 710 00:55:10,000 --> 00:55:13,000 Jā, tāpēc, ja mezgla == null atpakaļ 0. 711 00:55:13,000 --> 00:55:18,000 Bet, ja mezgla == null tad šī-ak, tur ir pareizības jautājums. 712 00:55:18,000 --> 00:55:23,000 Tas bija tikai jūs atpakaļ es, bet tas nav joma šobrīd. 713 00:55:23,000 --> 00:55:30,000 Jums vienkārši vajag int i, tāpēc es = 0. 714 00:55:30,000 --> 00:55:34,000 Bet, ja mezgls ir nulle, tad es joprojām būs 0, 715 00:55:34,000 --> 00:55:39,000 un mēs esam gatavojas atgriezties 0, tāpēc šī lieta ir identisks. 716 00:55:39,000 --> 00:55:48,000 Vēl viena kopīga lieta ir turēt deklarāciju 717 00:55:48,000 --> 00:55:51,000 mezgla iekšpusē cilpa. 718 00:55:51,000 --> 00:55:54,000 Jūs varētu teikt-ak, nē. 719 00:55:54,000 --> 00:55:56,000 Pieņemsim glabā to kā šis. 720 00:55:56,000 --> 00:55:59,000 Es droši vien likt int i = 0 šeit, 721 00:55:59,000 --> 00:56:05,000 tad mezglu * mezgls = vispirms šeit. 722 00:56:05,000 --> 00:56:11,000 Un tas ir iespējams, kā-atbrīvojoties no šo tagad. 723 00:56:11,000 --> 00:56:14,000 Tas ir iespējams, kā es būtu rakstījis to. 724 00:56:14,000 --> 00:56:21,000 Jūs varētu arī-meklē to, kā šis. 725 00:56:21,000 --> 00:56:25,000 Šis cilpu struktūru tieši šeit 726 00:56:25,000 --> 00:56:30,000 vajadzētu būt gandrīz tikpat dabiski, lai jūs kā int i = 0 727 00:56:30,000 --> 00:56:33,000 Man ir mazāk nekā garums masīva i + +. 728 00:56:33,000 --> 00:56:38,000 Ja tas ir, kā jūs atkārtot pa masīvu, tas ir, kā jūs atkārtot pa saistīts saraksts. 729 00:56:38,000 --> 00:56:45,000 >> Tas būtu otro dabu kādā brīdī. 730 00:56:45,000 --> 00:56:50,000 Paturot to prātā, tas būs gandrīz tas pats. 731 00:56:50,000 --> 00:56:57,000 Jūs gatavojas vēlaties atkārtot vairāk saistītu sarakstu. 732 00:56:57,000 --> 00:57:02,000 Ja mezgla-man nav ne jausmas, ko vērtību sauc. 733 00:57:02,000 --> 00:57:04,000 Mezglā i. 734 00:57:04,000 --> 00:57:15,000 Ja šajā mezglā vērtība = man atgriezties true, un tas arī viss. 735 00:57:15,000 --> 00:57:18,000 Ievērojiet, ka vienīgais veids, kā mēs kādreiz atgriezties viltus 736 00:57:18,000 --> 00:57:23,000 ir, ja mēs pārietu visā saistīts saraksts un nekad atgriezties taisnība, 737 00:57:23,000 --> 00:57:29,000 Tātad tas, ko šis dara. 738 00:57:29,000 --> 00:57:36,000 Kā pusē piezīmi, mēs, iespējams, netiks saņemt pievienot vai prepend. 739 00:57:36,000 --> 00:57:39,000 >> Ātri Pēdējā piezīme. 740 00:57:39,000 --> 00:57:52,000 Ja redzat statisko atslēgvārdu, tāpēc pieņemsim, ka statisko int skaits = 0, 741 00:57:52,000 --> 00:57:56,000 tad mēs skaits + +, jūs varat būtībā domāt par to kā globālā mainīgā, 742 00:57:56,000 --> 00:58:00,000 kaut gan es tikko teicu tas nav kā mēs spēsim īstenot garumu. 743 00:58:00,000 --> 00:58:06,000 Es esmu to izdarīt šeit, un tad skaits + +. 744 00:58:06,000 --> 00:58:11,000 Jebkurš veids, kā mēs varam ieiet mezglu mūsu saistīts saraksts mēs palielināšanai mūsu skaitu. 745 00:58:11,000 --> 00:58:15,000 Šī punkts ir tas, ko statisks atslēgvārds nozīmē. 746 00:58:15,000 --> 00:58:20,000 Ja es tikko bija int skaits = 0, kas būtu regulāru veco globālo mainīgo. 747 00:58:20,000 --> 00:58:25,000 Kas statisko int skaits nozīmē, ka tā ir globāla mainīga par šo failu. 748 00:58:25,000 --> 00:58:28,000 Tas ir neiespējami kādu citu failu, 749 00:58:28,000 --> 00:58:34,000 patīk domāt no 5 PSET, ja jums ir sākusies. 750 00:58:34,000 --> 00:58:39,000 Jums ir gan speller.c, un jums ir dictionary.c, 751 00:58:39,000 --> 00:58:42,000 un, ja jūs vienkārši pasludināt lieta pasaulē, tad neko speller.c 752 00:58:42,000 --> 00:58:45,000 var piekļūt dictionary.c un vice versa. 753 00:58:45,000 --> 00:58:48,000 Global mainīgie ir pieejami ar jebkuru. C failu, 754 00:58:48,000 --> 00:58:54,000 bet statiskās mainīgie ir pieejami tikai no iekšienes failu pati, 755 00:58:54,000 --> 00:59:01,000 tāpēc iekšpusē pareizrakstības pārbaudītāju vai iekšpusē dictionary.c, 756 00:59:01,000 --> 00:59:06,000 Tas ir veids, kā es varētu paziņot savu mainīgo par lielumu mana masīva 757 00:59:06,000 --> 00:59:10,000 vai izmēru mana skaitu vārdus vārdnīcā. 758 00:59:10,000 --> 00:59:15,000 Tā kā es nevēlos atzīt globālu mainīgo ka kāds ir piekļūt, 759 00:59:15,000 --> 00:59:18,000 Es tiešām tikai rūpējas par to, lai saviem mērķiem. 760 00:59:18,000 --> 00:59:21,000 >> Laba lieta par šo ir arī viss vārds sadursme sīkumi. 761 00:59:21,000 --> 00:59:27,000 Ja kādu citu failu mēģina izmantot globālo mainīgo sauc skaits, lietas iet ļoti, ļoti nepareizi, 762 00:59:27,000 --> 00:59:33,000 tāpēc šis labi saglabā lietas droši, un tikai jūs varat piekļūt, 763 00:59:33,000 --> 00:59:38,000 un neviens cits nevar, un, ja kāds cits deklarē globālā mainīgā sauc skaits, 764 00:59:38,000 --> 00:59:43,000 tad tas nav pretrunā ar jūsu statisko mainīgo sauc skaits. 765 00:59:43,000 --> 00:59:47,000 Tas ko statiska ir. Tas ir fails globālo mainīgo. 766 00:59:47,000 --> 00:59:52,000 >> Jautājumi par kaut ko? 767 00:59:52,000 --> 00:59:59,000 Visu komplektu. Bye. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]