1 00:00:00,000 --> 00:00:02,000 [Powered by Google Translate] [Wiki 6] 2 00:00:02,000 --> 00:00:04,000 [David J. Malan] [Chuo Kikuu cha Harvard] 3 00:00:04,000 --> 00:00:08,000 [Hii ni CS50.] [CS50.TV] 4 00:00:08,000 --> 00:00:12,000 >> Hii ni CS50, na hii ni mwanzo wa Wiki 6, 5 00:00:12,000 --> 00:00:16,000 hivyo michache ya zana mpya sasa inapatikana kwa wewe kuchukua faida ya, 6 00:00:16,000 --> 00:00:19,000 kwanza ambayo inaitwa CS50 Sinema. 7 00:00:19,000 --> 00:00:22,000 Tabia mbaya ni kama wewe ni kama mimi au yeyote wa wenzake kufundisha, 8 00:00:22,000 --> 00:00:26,000 ve pengine kuona mpango ambao mtindo inaonekana kitu kidogo kama hii. 9 00:00:26,000 --> 00:00:30,000 Labda ya kuanza kukata pembe baadhi marehemu wakati wa usiku, au utasikia kuhusika na hivyo baadaye, 10 00:00:30,000 --> 00:00:32,000 na kisha TF au CA huja juu ya wakati wa masaa ya ofisi. 11 00:00:32,000 --> 00:00:34,000 Basi ni vigumu kwetu kusoma. 12 00:00:34,000 --> 00:00:38,000 Naam, kanuni hii ni sahihi syntactically, na itakuwa ni kukusanya, na itakuwa kweli kukimbia. 13 00:00:38,000 --> 00:00:40,000 Lakini ni dhahiri si 5 kwa ajili ya mtindo. 14 00:00:40,000 --> 00:00:45,000 >> Lakini sasa, kama sisi kwenda katika saraka hii hapa- 15 00:00:45,000 --> 00:00:48,000 na taarifa kwamba nina-conditions2.c 16 00:00:48,000 --> 00:00:55,000 na mimi kukimbia amri hii mpya, style50, juu ya conditions2.c faili hii, Ingieni, 17 00:00:55,000 --> 00:00:57,000 taarifa kwamba ni taarifa yangu kuwa imekuwa stylized. 18 00:00:57,000 --> 00:01:00,000 Gedit niliona kwamba faili limebadilishwa kwenye disk, 19 00:01:00,000 --> 00:01:08,000 na ikiwa mimi bonyeza Reload, matatizo yako yote sasa automatiska. 20 00:01:08,000 --> 00:01:15,000 [Applause] 21 00:01:15,000 --> 00:01:17,000 Hiyo ni moja ya mambo ya sisi alifanya mwishoni mwa wiki hii. 22 00:01:17,000 --> 00:01:20,000 Kutambua kwamba ni mkamilifu kwa sababu kuna baadhi ya kanuni 23 00:01:20,000 --> 00:01:23,000 kwamba tu hawataweza kwa stylize kikamilifu, 24 00:01:23,000 --> 00:01:26,000 lakini kutambua hili sasa ni chombo unaweza kuchukua faida ya 25 00:01:26,000 --> 00:01:33,000 ikiwa tu tidy baadhi ya braces zaidi errantly kuwekwa curly na kama. 26 00:01:33,000 --> 00:01:36,000 >> Lakini zaidi ya kulazimisha sasa ni CS50 Check. 27 00:01:36,000 --> 00:01:39,000 Kwa Check CS50, unaweza kweli kufanya vipimo usahihi sawa 28 00:01:39,000 --> 00:01:42,000 juu ya code yako mwenyewe kwamba wenzake mafundisho ni uwezo. 29 00:01:42,000 --> 00:01:44,000 Hii ni mstari amri shirika kwamba anakuja sasa katika appliance 30 00:01:44,000 --> 00:01:46,000 haraka kama wewe kufanya update50 kama kwa 31 00:01:46,000 --> 00:01:49,000 pset 4 specifikationer, na matumizi yake kimsingi kama hii. 32 00:01:49,000 --> 00:01:51,000 Wewe kukimbia check50 amri. 33 00:01:51,000 --> 00:01:56,000 Kisha wewe kupita katika hoja mstari amri, au zaidi kwa ujumla inayojulikana kama kubadili au bendera. 34 00:01:56,000 --> 00:01:58,000 Kwa ujumla, mambo ambayo hyphens wanaitwa kubadili 35 00:01:58,000 --> 00:02:02,000 kwa mpango wa mstari amri, hivyo-c bayana 36 00:02:02,000 --> 00:02:04,000 hundi kwamba unataka kukimbia. 37 00:02:04,000 --> 00:02:07,000 >> vipimo kwamba unataka kukimbia ni kutambuliwa kwa kamba ya kipekee hii, 38 00:02:07,000 --> 00:02:10,000 2012/pset4/resize. 39 00:02:10,000 --> 00:02:13,000 Kwa maneno mengine, hiyo ni kamba tu holela lakini kipekee 40 00:02:13,000 --> 00:02:18,000 kwamba sisi kutumia kipekee kutambua usahihi vipimo pset 4 ya. 41 00:02:18,000 --> 00:02:21,000 Na kisha kueleza bayana nafasi kutengwa orodha ya faili kwamba unataka upload 42 00:02:21,000 --> 00:02:24,000 kwa CS50 Check kwa uchambuzi. 43 00:02:24,000 --> 00:02:29,000 Kwa mfano, kama mimi kwenda katika ufumbuzi yangu hapa kwa resize.c- 44 00:02:29,000 --> 00:02:31,000 napenda kufungua terminal kubwa dirisha- 45 00:02:31,000 --> 00:02:42,000 na mimi kwenda mbele na kukimbia hebu sema check50-c 2012/pset4/resize, 46 00:02:42,000 --> 00:02:46,000 na kisha mimi kwenda mbele na kutaja majina ya files, 47 00:02:46,000 --> 00:02:49,000 resize.c, na kisha hit Enter, ni compresses, 48 00:02:49,000 --> 00:02:53,000 ni uploads, ni hundi, na mimi tu alishindwa rundo zima ya vipimo. 49 00:02:53,000 --> 00:02:59,000 moja katika nyekundu juu kushoto anasema kwamba resize.c na bmp zipo. 50 00:02:59,000 --> 00:03:01,000 Hiyo ilikuwa mtihani. Hiyo ilikuwa swali sisi aliuliza. 51 00:03:01,000 --> 00:03:04,000 Na ni furaha kwa sababu jibu alikuwa uongo. 52 00:03:04,000 --> 00:03:08,000 Nakala nyeupe chini inasema inatarajiwa bmp.h kuwepo, na kwamba tu ya kosa langu. 53 00:03:08,000 --> 00:03:11,000 I forgot upload, hivyo nahitaji upload files wote, 54 00:03:11,000 --> 00:03:14,000 resize.c na bmp.h. 55 00:03:14,000 --> 00:03:17,000 Lakini sasa taarifa yote ya vipimo vingine ni katika njano kwa sababu wao si kukimbia, 56 00:03:17,000 --> 00:03:21,000 na hivyo uso smiley ni wima kwa sababu yeye ni wala furaha wala huzuni, 57 00:03:21,000 --> 00:03:25,000 lakini tuna kurekebisha kwamba suala katika nyekundu kabla wale hundi nyingine kukimbia. 58 00:03:25,000 --> 00:03:27,000 >> Hebu kurekebisha hii. 59 00:03:27,000 --> 00:03:30,000 Hebu zoom nje na rerun hii, wakati huu na pia bmp.h 60 00:03:30,000 --> 00:03:34,000 juu ya mstari amri, Ingieni, na sasa kama kila kitu kitakwenda vizuri, 61 00:03:34,000 --> 00:03:38,000 itakavyo kuangalia na kisha kurudi matokeo ya-kushikilia yako pumzi- 62 00:03:38,000 --> 00:03:42,000 yote ya kijani, ambayo ina maana mimi nina kufanya vizuri kwenye pset 4 hadi sasa. 63 00:03:42,000 --> 00:03:44,000 Unaweza kuona na infer kutoka Nakala maelezo hapa 64 00:03:44,000 --> 00:03:47,000 hasa nini ni sisi kupima. 65 00:03:47,000 --> 00:03:49,000 Sisi majaribio kwanza kufanya files zipo? 66 00:03:49,000 --> 00:03:51,000 Sisi basi kipimo gani kukusanya resize.c? 67 00:03:51,000 --> 00:03:58,000 Kisha sisi majaribio gani si resize BMP 1x1-pixel wakati n, sababu resize, ni 1. 68 00:03:58,000 --> 00:04:01,000 Sasa, kama hawana wazo nini ni n, utakuwa mara moja wewe kupiga mbizi katika pset 4, 69 00:04:01,000 --> 00:04:04,000 lakini kwamba tu ni sanity kuangalia kuhakikisha kwamba wewe si resizing 70 00:04:04,000 --> 00:04:08,000 picha wakati wote kama kigezo resize ni 1. 71 00:04:08,000 --> 00:04:14,000 Kama, kwa kulinganisha, ni resizes pixel 1x1 kwa 1x1 pixel BMP kwa 2x2 usahihi 72 00:04:14,000 --> 00:04:19,000 wakati n ni 2, basi vile vile, mgodi hutengeneza ipasavyo. 73 00:04:19,000 --> 00:04:22,000 >> Kwa kifupi, hii ni maana, moja, kuchukua kuvuka vidole 74 00:04:22,000 --> 00:04:25,000 nje ya equation haki kabla ya kuwasilisha pset yako. 75 00:04:25,000 --> 00:04:28,000 Wewe kujua nini hasa TF yako ya hivi karibuni kujua 76 00:04:28,000 --> 00:04:30,000 wakati wewe kwenda juu ya kuwasilisha baadhi ya seti hizi tatizo, 77 00:04:30,000 --> 00:04:34,000 na pia motisha ya ufundishaji ni kweli kwa kuweka 78 00:04:34,000 --> 00:04:37,000 nafasi mbele yenu ili wakati unajua priori 79 00:04:37,000 --> 00:04:39,000 kwamba kuna mende katika code yako na vipimo ambavyo si kuwa alipita, 80 00:04:39,000 --> 00:04:43,000 unaweza kuweka katika wakati na ufanisi zaidi mbele ili kutatua matatizo hayo 81 00:04:43,000 --> 00:04:45,000 badala ya kupoteza pointi, kupata maoni kutoka TF yako, 82 00:04:45,000 --> 00:04:48,000 na kisha kwenda, "Ahh," kama mimi wanapaswa figured kwamba nje. 83 00:04:48,000 --> 00:04:50,000 Sasa angalau kuna chombo kukusaidia kupata hiyo. 84 00:04:50,000 --> 00:04:52,000 Si kwenda kwa kumweka nje ambapo mdudu ni, lakini itakuambia 85 00:04:52,000 --> 00:04:54,000 nini ni dalili ya hiyo. 86 00:04:54,000 --> 00:04:57,000 >> Sasa kutambua vipimo si lazima kamilifu. 87 00:04:57,000 --> 00:04:59,000 Sababu tu ya kupata full screen ya kijani smiley nyuso 88 00:04:59,000 --> 00:05:02,000 haimaanishi code yako ni kamilifu, lakini haina maana 89 00:05:02,000 --> 00:05:06,000 kwamba ina kupita vipimo fulani eda na spec. 90 00:05:06,000 --> 00:05:08,000 Wakati mwingine sisi si kutolewa hundi. 91 00:05:08,000 --> 00:05:10,000 Kwa mfano, whodunit, moja ya mambo ya pset 4, 92 00:05:10,000 --> 00:05:15,000 ni aina ya kuwakatisha tamaa kama sisi kukupa 93 00:05:15,000 --> 00:05:18,000 jibu kama ni nini, na kuna idadi ya njia kufunua 94 00:05:18,000 --> 00:05:21,000 ambao mtu ni katika kelele kwamba nyekundu. 95 00:05:21,000 --> 00:05:24,000 spec daima bayana katika siku zijazo kwa pset kuendelea 5 96 00:05:24,000 --> 00:05:26,000 nini hundi zipo kwa ajili yenu. 97 00:05:26,000 --> 00:05:28,000 Utagundua kuna hii URL nyeupe chini. 98 00:05:28,000 --> 00:05:30,000 Kwa sasa, hii ni uchunguzi pato. 99 00:05:30,000 --> 00:05:33,000 Kama wewe kutembelea URL kwamba, utapata rundo zima la mambo ujumbe, cryptic 100 00:05:33,000 --> 00:05:36,000 kwamba wewe ni kuwakaribisha kwa kuangalia njia, lakini ni zaidi kwa ajili ya wafanyakazi 101 00:05:36,000 --> 00:05:41,000 ili tuweze kutambua na Debug mende katika check50 yenyewe. 102 00:05:41,000 --> 00:05:46,000 >> Bila wasiwasi, hebu kuendelea na ambapo sisi kushoto mbali. 103 00:05:46,000 --> 00:05:48,000 CS50 maktaba sisi alichukua kwa nafasi kwa muda wa wiki kadhaa, 104 00:05:48,000 --> 00:05:52,000 lakini kisha wiki iliyopita, tulianza peeling nyuma mmoja wa tabaka hilo. 105 00:05:52,000 --> 00:05:55,000 Sisi kuanza kuweka kando string katika neema ya nini badala yake? 106 00:05:55,000 --> 00:05:57,000 [Wanafunzi] Char. 107 00:05:57,000 --> 00:05:59,000 Char *, ambayo imekuwa * Char muda wote huu, 108 00:05:59,000 --> 00:06:03,000 lakini sasa hatuna kujifanya kuwa ni aina data halisi kamba. 109 00:06:03,000 --> 00:06:06,000 Badala yake, ni kuwa kisawe ya aina kwa ajili ya * Char, 110 00:06:06,000 --> 00:06:09,000 na kamba ni mlolongo wa wahusika, 111 00:06:09,000 --> 00:06:14,000 hivyo kwa nini mantiki kuwakilisha masharti kama Char * s? 112 00:06:14,000 --> 00:06:20,000 Nini * Char kuwakilisha katika muktadha wa hii dhana ya kamba? 113 00:06:20,000 --> 00:06:23,000 Yeah >> [Mwanafunzi]. Tabia ya kwanza. 114 00:06:23,000 --> 00:06:25,000 Nzuri, tabia ya kwanza, lakini kabisa tabia ya kwanza. 115 00:06:25,000 --> 00:06:27,000 Ni-[Wanafunzi] mitaani. 116 00:06:27,000 --> 00:06:29,000 Good, anuani ya tabia ya kwanza. 117 00:06:29,000 --> 00:06:33,000 Yote muhimu kuwakilisha string katika kumbukumbu ya kompyuta 118 00:06:33,000 --> 00:06:36,000 ni tu anuani ya kipekee ya Byte wake wa kwanza kabisa. 119 00:06:36,000 --> 00:06:38,000 Huna hata kujua ni muda gani 120 00:06:38,000 --> 00:06:42,000 kwa sababu jinsi gani unaweza kufikiri kuwa nje dynamically? 121 00:06:42,000 --> 00:06:44,000 [Mwanafunzi] Kamba urefu. 122 00:06:44,000 --> 00:06:48,000 Unaweza kuita string urefu, bora, lakini jinsi gani string urefu kazi? 123 00:06:48,000 --> 00:06:50,000 Ni nini nini? Yeah. 124 00:06:50,000 --> 00:06:52,000 [Mwanafunzi] Kuendelea mpaka kupata tabia null. 125 00:06:52,000 --> 00:06:54,000 Yeah, hasa, ni tu iterates na kwa kitanzi, wakati kitanzi, 126 00:06:54,000 --> 00:06:57,000 chochote kutoka * hadi mwisho, na mwisho ni kuwakilishwa 127 00:06:57,000 --> 00:07:01,000 kwa \ 0, kinachojulikana nul tabia, nul, 128 00:07:01,000 --> 00:07:05,000 si kwa kuchanganyikiwa na null, ambayo ni pointer, 129 00:07:05,000 --> 00:07:07,000 ambayo itakuwa katika mazungumzo tena leo. 130 00:07:07,000 --> 00:07:11,000 >> Sisi peeled nyuma ya safu ya GetInt, na kisha sisi alichukua kuangalia GetString, 131 00:07:11,000 --> 00:07:14,000 na kukumbuka kwamba wote wa kazi hizo, au kweli, 132 00:07:14,000 --> 00:07:18,000 GetString, ilikuwa kutumia kazi fulani 133 00:07:18,000 --> 00:07:21,000 kwa kweli kuchanganua, kwamba ni, kusoma au kuchambua, pembejeo mtumiaji. 134 00:07:21,000 --> 00:07:25,000 Na nini ilikuwa kwamba kazi mpya? 135 00:07:25,000 --> 00:07:27,000 Scanf au sscanf. Ni kweli inakuja katika flavors wachache tofauti. 136 00:07:27,000 --> 00:07:31,000 Kuna scanf, kuna sscanf, kuna fscanf. 137 00:07:31,000 --> 00:07:35,000 Kwa sasa, ingawa, hebu kuzingatia moja kwa urahisi zaidi mfano, 138 00:07:35,000 --> 00:07:38,000 na napenda kwenda mbele na kufungua katika appliance 139 00:07:38,000 --> 00:07:41,000 file kama hii, scanf1.c. 140 00:07:41,000 --> 00:07:43,000 Hii ni super rahisi mpango, 141 00:07:43,000 --> 00:07:46,000 lakini kwamba hana kitu ambacho tumekuwa kamwe kufanyika 142 00:07:46,000 --> 00:07:48,000 bila ya msaada wa maktaba CS50. 143 00:07:48,000 --> 00:07:51,000 Hii anapata int kutoka kwa mtumiaji. Jinsi gani kazi? 144 00:07:51,000 --> 00:07:53,000 Naam, katika mstari 16 huko, 145 00:07:53,000 --> 00:07:56,000 taarifa kwamba sisi kutangaza int kuitwa x, na katika hatua hii kwa hadithi, 146 00:07:56,000 --> 00:07:58,000 nini ni thamani ya x? 147 00:07:58,000 --> 00:08:00,000 [Inaudible mwanafunzi majibu] 148 00:08:00,000 --> 00:08:02,000 [David M.] Haki, ambaye anajua, baadhi thamani takataka uwezekano, hivyo katika 17, sisi tu kuwaambia mtumiaji 149 00:08:02,000 --> 00:08:06,000 nipe namba, tafadhali, na hatua 18 ni ambapo anapata kuvutia. 150 00:08:06,000 --> 00:08:11,000 Scanf inaonekana kukopa kutoka wazo printf katika kwamba anatumia kanuni hizi format katika quotes. 151 00:08:11,000 --> 00:08:13,000 % D ni mwendo wa idadi decimal. 152 00:08:13,000 --> 00:08:21,000 Lakini kwa nini mimi kupita katika & x badala ya x tu? 153 00:08:21,000 --> 00:08:24,000 zamani ni sahihi. Yeah. 154 00:08:24,000 --> 00:08:26,000 [Inaudible mwanafunzi majibu] 155 00:08:26,000 --> 00:08:31,000 Hasa, kama lengo la mpango huu, kama GetInt kazi yenyewe, 156 00:08:31,000 --> 00:08:34,000 ni kupata int kutoka kwa mtumiaji siwezi kupita kazi 157 00:08:34,000 --> 00:08:38,000 vigezo vyote nataka, lakini kama si kupita yao kwa kumbukumbu 158 00:08:38,000 --> 00:08:41,000 au kwa anuani au kwa pointer, wote sawa kwa madhumuni ya leo, 159 00:08:41,000 --> 00:08:46,000 basi kazi hiyo haina uwezo wa kubadilisha yaliyomo ya variable kwamba. 160 00:08:46,000 --> 00:08:49,000 Hii itakuwa kupita katika nakala tu kama toleo Buggy ya kubadilishana 161 00:08:49,000 --> 00:08:51,000 kwamba tumekuwa kuongelea mara chache sasa. 162 00:08:51,000 --> 00:08:54,000 >> Lakini badala yake, kwa kufanya & x, mimi nina literally kupita katika nini? 163 00:08:54,000 --> 00:08:57,000 [Mwanafunzi] anuani. >> Anuani ya x. 164 00:08:57,000 --> 00:09:01,000 Ni kama kuchora ramani kwa ajili ya kazi kuitwa scanf na kusema hapa, 165 00:09:01,000 --> 00:09:04,000 hizi ni kwa chunk ya kumbukumbu maelekezo katika kompyuta 166 00:09:04,000 --> 00:09:07,000 kuwa unaweza kwenda kuhifadhi baadhi integer in 167 00:09:07,000 --> 00:09:10,000 Ili sscanf kwa sasa kufanya hivyo 168 00:09:10,000 --> 00:09:13,000 nini operator, kile kipande cha syntax ni kwenda kuwa na kutumia 169 00:09:13,000 --> 00:09:19,000 hata ingawa hatuwezi kuona, kwa sababu mtu mwingine aliandika hii kazi? 170 00:09:19,000 --> 00:09:21,000 Kwa maneno mengine - nini hiyo? 171 00:09:21,000 --> 00:09:23,000 [Mwanafunzi] X kusoma. 172 00:09:23,000 --> 00:09:27,000 Itakuja kuwa baadhi ya kusoma, lakini tu kwa kuzingatia x hapa. 173 00:09:27,000 --> 00:09:30,000 Kama scanf ni kuwa alipita anuani ya x, 174 00:09:30,000 --> 00:09:35,000 syntactically, nini operator ni amefungwa kuwepo mahali fulani 175 00:09:35,000 --> 00:09:38,000 ndani ya utekelezaji wa scanf ili scanf 176 00:09:38,000 --> 00:09:42,000 unaweza kweli kuandika namba 2 kwa anwani hiyo? 177 00:09:42,000 --> 00:09:44,000 Yeah, hivyo *. 178 00:09:44,000 --> 00:09:47,000 Kumbuka kwamba * ni dereference wetu operator, ambayo kimsingi ina maana kwenda huko. 179 00:09:47,000 --> 00:09:50,000 >> Mara tumekuwa mitupu anuani, kama ni kesi hapa, 180 00:09:50,000 --> 00:09:53,000 scanf pengine ni-kama sisi kweli wakatazama chanzo chake code- 181 00:09:53,000 --> 00:09:59,000 ni kufanya * x au sawa na kweli kwenda kwa anwani hiyo na kuweka baadhi ya thamani pale. 182 00:09:59,000 --> 00:10:02,000 Sasa, kama kwa jinsi scanf anapata pembejeo kutoka keyboard, 183 00:10:02,000 --> 00:10:04,000 tutaweza kukitikisa mikono yetu nje kwa leo. 184 00:10:04,000 --> 00:10:07,000 Kudhani tu kwamba mfumo wa uendeshaji inaruhusu sscanf kuzungumza 185 00:10:07,000 --> 00:10:11,000 kwa keyboard mtumiaji, lakini katika hatua hii sasa katika mstari 19, 186 00:10:11,000 --> 00:10:14,000 wakati sisi tu magazeti nje x, inaonekana kuwa kesi 187 00:10:14,000 --> 00:10:17,000 kwamba scanf ameweka int katika x. 188 00:10:17,000 --> 00:10:19,000 Hiyo hasa jinsi scanf kazi, na kukumbuka wiki iliyopita 189 00:10:19,000 --> 00:10:25,000 hiyo hasa jinsi GetString na GetInt na familia yake mengine ya kazi 190 00:10:25,000 --> 00:10:28,000 hatimaye kazi, angalau kwa ugomvi kidogo kama sscanf, 191 00:10:28,000 --> 00:10:31,000 ambayo ina maana Scan string badala ya keyboard. 192 00:10:31,000 --> 00:10:33,000 Lakini hebu tuangalie ugomvi kidogo wa hii. 193 00:10:33,000 --> 00:10:37,000 Katika scanf2, mimi kwa kweli Star up. 194 00:10:37,000 --> 00:10:42,000 Je, ni makosa-na mimi itabidi kuficha maoni ambayo anaelezea kama kiasi- 195 00:10:42,000 --> 00:10:47,000 nini ni vibaya kwa mpango huu, toleo la 2? 196 00:10:47,000 --> 00:10:55,000 Kuwa kama kiufundi kama inawezekana wakati huu. 197 00:10:55,000 --> 00:10:57,000 Inaonekana nzuri sana. 198 00:10:57,000 --> 00:11:03,000 Ni nicely indented, lakini- 199 00:11:03,000 --> 00:11:07,000 sawa, vipi kuhusu hebu kukatia ni chini ya maswali mfupi? 200 00:11:07,000 --> 00:11:17,000 Line 16. Nini mstari 16 katika kufanya Kiingereza sahihi lakini kiufundi? 201 00:11:17,000 --> 00:11:20,000 Kupata kidogo Awkward. Ndiyo, Michael. 202 00:11:20,000 --> 00:11:25,000 [Mwanafunzi] Ni akizungumzia barua ya kwanza ya kamba. 203 00:11:25,000 --> 00:11:27,000 >> Okay, karibu. Hebu tweak kwamba kidogo. 204 00:11:27,000 --> 00:11:33,000 Akizungumzia barua ya kwanza ya kamba, wewe ni kutangaza variable kuitwa buffer 205 00:11:33,000 --> 00:11:36,000 ambayo uhakika na anuani ya kwanza ya kamba, 206 00:11:36,000 --> 00:11:39,000 au tuseme, ambayo uhakika zaidi hasa kwa Char. 207 00:11:39,000 --> 00:11:42,000 Taarifa hiyo si kweli akizungumzia popote kwa sababu hakuna operator zoezi. 208 00:11:42,000 --> 00:11:46,000 Hakuna ishara sawa, hivyo wote sisi ni kufanya ni kugawa variable inayoitwa buffer. 209 00:11:46,000 --> 00:11:49,000 Hutokea kwa kuwa 32 bits sababu ni pointer, 210 00:11:49,000 --> 00:11:52,000 na yaliyomo ya buffer ikatengeneza hatimaye 211 00:11:52,000 --> 00:11:57,000 yana anwani ya Char, lakini kwa sasa, nini buffer yana? 212 00:11:57,000 --> 00:11:59,000 Baadhi tu bogus, ambaye anajua, baadhi ya thamani ya takataka, 213 00:11:59,000 --> 00:12:03,000 kwa sababu sisi si wazi initialized hivyo, hivyo hatupaswi kudhani chochote. 214 00:12:03,000 --> 00:12:06,000 Sawa, hivyo sasa mstari 17 ni-nini mstari 17 nini? 215 00:12:06,000 --> 00:12:08,000 Labda hiyo itakuwa joto hii up. 216 00:12:08,000 --> 00:12:10,000 Ni Prints kamba, sawa? 217 00:12:10,000 --> 00:12:12,000 Ni Prints Kamba tafadhali. 218 00:12:12,000 --> 00:12:15,000 >> Line 18 ni aina ya familiar sasa kwa kuwa sisi tu kuona ugomvi huu 219 00:12:15,000 --> 00:12:18,000 lakini kwa kificho tofauti format, hivyo katika mstari 18, 220 00:12:18,000 --> 00:12:23,000 sisi ni kuwaambia scanf hapa ni anwani ya chunk ya kumbukumbu. 221 00:12:23,000 --> 00:12:27,000 Mimi nataka wewe pete katika kamba, kama alisema kwa% s, 222 00:12:27,000 --> 00:12:32,000 lakini tatizo ni kwamba hatujafanya michache ya mambo hapa. 223 00:12:32,000 --> 00:12:35,000 Nini moja ya matatizo? 224 00:12:35,000 --> 00:12:38,000 [Mwanafunzi] Ni kujaribu dereference pointer null. 225 00:12:38,000 --> 00:12:41,000 Good, null au tu vinginevyo haijulikani kuyatumia. 226 00:12:41,000 --> 00:12:45,000 Wewe ni handing scanf anuani, lakini wewe tu alisema wakati uliopita 227 00:12:45,000 --> 00:12:49,000 kwamba anuani kwamba ni baadhi ya thamani ya takataka kwa sababu hatukuwa kweli hawawajui kwa kitu chochote, 228 00:12:49,000 --> 00:12:53,000 na hivyo wewe ni kuwaambia scanf ufanisi kwenda kuweka kamba hapa, 229 00:12:53,000 --> 00:12:56,000 lakini hatujui ambapo hapa bado ni, 230 00:12:56,000 --> 00:12:59,000 hivyo sisi si kweli zilizotengwa kwa ajili ya kumbukumbu buffer. 231 00:12:59,000 --> 00:13:03,000 Aidha, ni wewe pia hata kuwaambia scanf? 232 00:13:03,000 --> 00:13:06,000 Tuseme hii ilikuwa chunk ya kumbukumbu, na haikuwa thamani ya takataka, 233 00:13:06,000 --> 00:13:09,000 lakini bado uko siyo kuwaambia scanf kitu muhimu. 234 00:13:09,000 --> 00:13:12,000 [Mwanafunzi] wapi ni kweli ni, ampersand. 235 00:13:12,000 --> 00:13:15,000 Ampersand, hivyo katika kesi hii, ni sawa. 236 00:13:15,000 --> 00:13:18,000 Kwa sababu buffer tayari alitangaza kama pointer 237 00:13:18,000 --> 00:13:22,000 na kipande * ya syntax, hatuna haja ya kutumia ampersand 238 00:13:22,000 --> 00:13:25,000 sababu ni tayari anuani, lakini nadhani habari hiyo hapa. 239 00:13:25,000 --> 00:13:27,000 [Mwanafunzi] Jinsi kubwa ni nini? 240 00:13:27,000 --> 00:13:29,000 Nzuri, sisi siyo kuwaambia scanf jinsi kubwa buffer hii ni, 241 00:13:29,000 --> 00:13:32,000 ambayo ina maana hata kama buffer walikuwa pointer, 242 00:13:32,000 --> 00:13:35,000 sisi ni kusema scanf, kuweka kamba hapa, 243 00:13:35,000 --> 00:13:38,000 lakini hapa inaweza kuwa 2 ka, inaweza kuwa 10 bytes, inaweza kuwa megabyte. 244 00:13:38,000 --> 00:13:41,000 Scanf hana wazo, na kwa sababu hii ni chunk ya kumbukumbu 245 00:13:41,000 --> 00:13:43,000 labda, siyo kamba bado. 246 00:13:43,000 --> 00:13:48,000 Ni tu kamba mara moja kuandika herufi na 0 \ kwa kuwa chunk ya kumbukumbu. 247 00:13:48,000 --> 00:13:51,000 Sasa ni baadhi tu chunk ya kumbukumbu. 248 00:13:51,000 --> 00:13:55,000 Scanf si kujua wakati wa kuacha kuandika kwa anwani hiyo. 249 00:13:55,000 --> 00:13:59,000 >> Kama unakumbuka baadhi ya mifano katika siku za nyuma ambapo mimi nasibu typed kwenye keyboard 250 00:13:59,000 --> 00:14:03,000 kujaribu kufurika buffer, na sisi aliyesema juu ya Ijumaa kuhusu hasa ile. 251 00:14:03,000 --> 00:14:07,000 Kama adui fulani injects katika mpango wako neno kubwa sana 252 00:14:07,000 --> 00:14:10,000 au sentensi au maneno basi walikuwa wanatarajia unaweza overrun 253 00:14:10,000 --> 00:14:13,000 chunk ya kumbukumbu, ambayo yanaweza kuwa na matokeo mabaya, 254 00:14:13,000 --> 00:14:15,000 kama kuchukua juu ya mpango mzima yenyewe. 255 00:14:15,000 --> 00:14:17,000 Tunahitaji kurekebisha hii kwa namna fulani. 256 00:14:17,000 --> 00:14:20,000 Hebu zoom nje na kwenda katika toleo 3 ya mpango huu. 257 00:14:20,000 --> 00:14:22,000 Hiyo ni kidogo bora. 258 00:14:22,000 --> 00:14:24,000 Katika toleo hili, taarifa tofauti. 259 00:14:24,000 --> 00:14:27,000 Katika mstari 16, mimi nina tena kutangaza variable kuitwa buffer, 260 00:14:27,000 --> 00:14:29,000 lakini ni nini sasa? 261 00:14:29,000 --> 00:14:33,000 Ni safu ya chars 16. 262 00:14:33,000 --> 00:14:36,000 Hii ni nzuri kwa sababu hii ina maana naweza sasa kuwaambia scanf 263 00:14:36,000 --> 00:14:39,000 hapa ni chunk halisi ya kumbukumbu. 264 00:14:39,000 --> 00:14:42,000 Unaweza karibu kufikiri ya arrays kama kuwa kuyatumia sasa, 265 00:14:42,000 --> 00:14:44,000 hata kama wao siyo kweli sawa. 266 00:14:44,000 --> 00:14:47,000 Wao utakuwa tabia tofauti katika mazingira tofauti. 267 00:14:47,000 --> 00:14:50,000 Lakini ni hakika kwamba kesi buffer inasimamia 268 00:14:50,000 --> 00:14:53,000 16 contiguous chars sababu kwamba ni nini safu ni 269 00:14:53,000 --> 00:14:55,000 na imekuwa kwa muda wa wiki kadhaa sasa. 270 00:14:55,000 --> 00:14:59,000 >> Hapa, Mimi ninakuambia scanf hapa chunk ya kumbukumbu. 271 00:14:59,000 --> 00:15:01,000 Wakati huu, ni kweli chunk ya kumbukumbu, 272 00:15:01,000 --> 00:15:07,000 lakini kwa nini ni mpango huu bado exploitable? 273 00:15:07,000 --> 00:15:11,000 Nini mbaya bado? 274 00:15:11,000 --> 00:15:14,000 Nilivyosema nipe ka 16 lakini- 275 00:15:14,000 --> 00:15:16,000 [Mwanafunzi] Nini kama aina katika zaidi ya 16? 276 00:15:16,000 --> 00:15:20,000 Hasa, nini kama mtumiaji aina katika herufi 17 au wahusika 1700? 277 00:15:20,000 --> 00:15:23,000 Kwa kweli, hebu angalia kama hatuwezi safari juu kosa hili sasa. 278 00:15:23,000 --> 00:15:25,000 Ni bora lakini si kamili. 279 00:15:25,000 --> 00:15:28,000 Hebu kwenda mbele na kukimbia kufanya scanf3 kukusanya mpango huu. 280 00:15:28,000 --> 00:15:34,000 Hebu kukimbia scanf3, Kamba tafadhali: hello, na sisi kuonekana kuwa sawa. 281 00:15:34,000 --> 00:15:37,000 Hebu jaribu moja tena kidogo, hujambo huko. 282 00:15:37,000 --> 00:15:42,000 Okay, wacha kufanya hujambo huko gani leo, Ingiza. 283 00:15:42,000 --> 00:15:54,000 Kupata aina ya bahati hapa, hebu kusema hello kuna jinsi wewe. 284 00:15:54,000 --> 00:15:56,000 Damn yake. 285 00:15:56,000 --> 00:16:03,000 Sawa, hivyo tulipata bahati. Hebu angalia kama hatuwezi kurekebisha hii. 286 00:16:03,000 --> 00:16:06,000 Hapana, si kwenda basi mimi nakala. 287 00:16:06,000 --> 00:16:09,000 Hebu jaribu hii tena. 288 00:16:09,000 --> 00:16:12,000 Haki zote, na kusimama. 289 00:16:12,000 --> 00:16:20,000 Tutaweza kuona jinsi ya muda mrefu mimi unaweza kujifanya kuzingatia wakati bado kufanya hivyo. 290 00:16:20,000 --> 00:16:23,000 Damn yake. Hiyo badala inafaa, kwa kweli. 291 00:16:23,000 --> 00:16:26,000 Kuna sisi kwenda. 292 00:16:26,000 --> 00:16:30,000 Point alifanya. 293 00:16:30,000 --> 00:16:34,000 >> Hii, aibu ingawa pia ni, pia ni moja ya vyanzo ya machafuko makubwa 294 00:16:34,000 --> 00:16:38,000 wakati wa kuandika mipango na mende kwa sababu wao wenyewe yatangaza 295 00:16:38,000 --> 00:16:40,000 tu mara moja kwa wakati mwingine. 296 00:16:40,000 --> 00:16:43,000 Ukweli ni kwamba hata kama code yako ni kabisa kuvunjwa, 297 00:16:43,000 --> 00:16:46,000 inaweza tu kuwa kabisa kuvunjwa mara moja kwa wakati 298 00:16:46,000 --> 00:16:49,000 kwa sababu wakati mwingine, kimsingi ni nini kinachotokea ni mfumo wa uendeshaji kutenga 299 00:16:49,000 --> 00:16:52,000 kidogo zaidi kuliko kumbukumbu haja kweli kwa sababu yoyote, 300 00:16:52,000 --> 00:16:57,000 na hivyo hakuna mtu mwingine ni kutumia kumbukumbu sahihi baada ya chunk yako ya wahusika wa 16, 301 00:16:57,000 --> 00:17:01,000 hivyo kama kwenda kwa 17, 18, 19, na kwa chochote, sio vile mpango kubwa. 302 00:17:01,000 --> 00:17:04,000 Sasa, kompyuta, hata kama haina ajali katika hatua hiyo, 303 00:17:04,000 --> 00:17:09,000 ili hatimaye kutumia idadi Byte 17 au 18 au 19 kwa kitu kingine, 304 00:17:09,000 --> 00:17:14,000 saa ambayo kumweka data yako kwamba kuweka huko, angalau kupita kiasi kwa muda mrefu, 305 00:17:14,000 --> 00:17:18,000 ni kwenda kupata overwritten uwezekano kwa kazi nyingine. 306 00:17:18,000 --> 00:17:21,000 Ni lazima si watabaki intact, 307 00:17:21,000 --> 00:17:23,000 lakini si lazima kusababisha kosa seg. 308 00:17:23,000 --> 00:17:26,000 Lakini katika kesi hii, mimi hatimaye zinazotolewa wahusika kutosha 309 00:17:26,000 --> 00:17:29,000 kwamba mimi kimsingi ilizidi sehemu yangu ya kumbukumbu, na bam, 310 00:17:29,000 --> 00:17:33,000 mfumo wa uendeshaji akasema, "Samahani, hiyo si nzuri, segmentation kosa." 311 00:17:33,000 --> 00:17:38,000 >> Na hebu angalia sasa ikiwa kile bado hapa katika saraka yangu- 312 00:17:38,000 --> 00:17:40,000 taarifa kwamba nina faili hii hapa, msingi. 313 00:17:40,000 --> 00:17:42,000 Ona kwamba hii ni mara ya pili wakamwita dampo msingi. 314 00:17:42,000 --> 00:17:46,000 Ni kimsingi faili kwamba ina maudhui ya kumbukumbu ya mpango wako 315 00:17:46,000 --> 00:17:48,000 katika hatua ambayo ni kugonga, 316 00:17:48,000 --> 00:17:51,000 na tu kujaribu mfano kidogo hapa niende katika hapa 317 00:17:51,000 --> 00:17:57,000 na kukimbia gdb juu ya scanf3 na kisha kubainisha hoja ya tatu iitwayo msingi, 318 00:17:57,000 --> 00:18:01,000 na taarifa hapa kwamba kama mimi kuorodhesha kanuni, 319 00:18:01,000 --> 00:18:06,000 tutaweza kuwa na uwezo kama kawaida na gdb kwa kuanza kutembea kupitia mpango huu, 320 00:18:06,000 --> 00:18:10,000 na siwezi kukimbia na haraka kama mimi hit-kama na amri hatua katika gdb- 321 00:18:10,000 --> 00:18:13,000 haraka kama mimi hit line uwezekano Buggy baada ya kuandika katika kamba kubwa, 322 00:18:13,000 --> 00:18:16,000 Mimi utakuwa na uwezo wa kweli kutambua hapa. 323 00:18:16,000 --> 00:18:19,000 Zaidi juu ya hili, ingawa, katika sehemu katika suala la msingi dumps 324 00:18:19,000 --> 00:18:22,000 na kama hivyo kuwa unaweza kweli poke kuzunguka ndani ya dampo msingi 325 00:18:22,000 --> 00:18:27,000 na kuona kwenye kile line mpango alishindwa wewe. 326 00:18:27,000 --> 00:18:32,000 Maswali yoyote juu ya kisha kuyatumia na juu ya anwani? 327 00:18:32,000 --> 00:18:36,000 Kwa sababu leo, sisi ni kwenda kuanza kuchukua nafasi ya kwamba mambo haya zipo 328 00:18:36,000 --> 00:18:40,000 na sisi kujua hasa nini hao. 329 00:18:40,000 --> 00:18:42,000 Ndiyo. 330 00:18:42,000 --> 00:18:46,000 >> [Mwanafunzi] Jinsi kuja hawakuwa na kuweka ampersand karibu na sehemu- 331 00:18:46,000 --> 00:18:48,000 Nzuri swali. 332 00:18:48,000 --> 00:18:51,000 Jinsi ya kuja sikuwa na kuweka ampersand karibu na safu tabia kama nilivyofanya awali 333 00:18:51,000 --> 00:18:53,000 na zaidi ya mifano yetu? 334 00:18:53,000 --> 00:18:55,000 jibu fupi ni arrays ni kidogo maalum. 335 00:18:55,000 --> 00:18:59,000 Unaweza kufikiri karibu buffer kama kweli kuwa anwani, 336 00:18:59,000 --> 00:19:03,000 na hivyo hivyo tu hutokea kwa kuwa kesi hiyo mraba bracket nukuu 337 00:19:03,000 --> 00:19:06,000 ni urahisi ili tuweze kwenda katika mabano 0, bracket 1, 338 00:19:06,000 --> 00:19:10,000 bracket 2, bila kuwa na matumizi ya nukuu *. 339 00:19:10,000 --> 00:19:13,000 Hiyo ni kidogo ya uongo kwa sababu nyeupe arrays na kuyatumia 340 00:19:13,000 --> 00:19:17,000 ni, kwa kweli, tofauti kidogo, lakini mara nyingi wanaweza lakini si daima kutumika kwa kubadilishana. 341 00:19:17,000 --> 00:19:21,000 Kwa kifupi, wakati kazi ni kutarajia pointer chunk ya kumbukumbu, 342 00:19:21,000 --> 00:19:24,000 unaweza ama kupita anwani zile zilizorudishwa na malloc, 343 00:19:24,000 --> 00:19:29,000 na tutaweza kuona tena malloc kabla ya muda mrefu, au unaweza kupita jina la safu. 344 00:19:29,000 --> 00:19:32,000 Huna kufanya ampersand na arrays kwa sababu wao ni tayari 345 00:19:32,000 --> 00:19:34,000 kimsingi kama anwani. 346 00:19:34,000 --> 00:19:36,000 Hiyo ni ubaguzi moja. 347 00:19:36,000 --> 00:19:39,000 mabano mraba kuwafanya maalum. 348 00:19:39,000 --> 00:19:41,000 >> Unaweza kuweka ampersand karibu na buffer? 349 00:19:41,000 --> 00:19:43,000 Si katika kesi hii. 350 00:19:43,000 --> 00:19:46,000 Hiyo si kazi kwa sababu, tena, wa kesi hii kona 351 00:19:46,000 --> 00:19:49,000 ambapo arrays si kweli kabisa anwani. 352 00:19:49,000 --> 00:19:54,000 Lakini tutaweza labda kuja nyuma na kwamba kabla ya muda mrefu na mifano mingine. 353 00:19:54,000 --> 00:19:56,000 Hebu jaribu kutatua tatizo hapa. 354 00:19:56,000 --> 00:20:00,000 Tuna muundo data kwamba sisi tumekuwa kutumia kwa muda inayojulikana kama safu. 355 00:20:00,000 --> 00:20:02,000 Uchunguzi katika kumweka, kwamba ni nini sisi tu alikuwa. 356 00:20:02,000 --> 00:20:04,000 Lakini arrays kuwa baadhi upsides na downsides. 357 00:20:04,000 --> 00:20:06,000 Arrays ni nzuri kwa nini? 358 00:20:06,000 --> 00:20:11,000 Nini jambo moja kwamba wewe kama-kwa kiasi wewe kama arrays-kuhusu arrays? 359 00:20:11,000 --> 00:20:13,000 Nini nafasi ya juu yao? Nini kulazimisha? 360 00:20:13,000 --> 00:20:18,000 Kwa nini sisi kuanzisha yao katika nafasi ya kwanza? 361 00:20:18,000 --> 00:20:20,000 Yeah. 362 00:20:20,000 --> 00:20:27,000 [Mwanafunzi] Wao wanaweza kuhifadhi data nyingi, na huna kutumia kitu nzima. 363 00:20:27,000 --> 00:20:29,000 Unaweza kutumia sehemu. 364 00:20:29,000 --> 00:20:32,000 Nzuri, pamoja na safu unaweza kuhifadhi data nyingi, 365 00:20:32,000 --> 00:20:35,000 na wewe si lazima kuwa na matumizi yake yote, hivyo unaweza overallocate, 366 00:20:35,000 --> 00:20:39,000 ambayo inaweza kuwa rahisi kama huna kujua mapema jinsi wengi wa kitu kutarajia. 367 00:20:39,000 --> 00:20:41,000 >> GetString ni mfano kamili. 368 00:20:41,000 --> 00:20:44,000 GetString, iliyoandikwa na sisi, hana wazo jinsi wengi chars kutarajia, 369 00:20:44,000 --> 00:20:48,000 hivyo ukweli kwamba tunaweza kutenga chunks ya kumbukumbu contiguous ni nzuri. 370 00:20:48,000 --> 00:20:51,000 Arrays pia kutatua tatizo tuliona wiki kadhaa iliyopita sasa 371 00:20:51,000 --> 00:20:54,000 ambapo code yako kuanza kukabidhi katika kitu hafifu iliyoundwa sana. 372 00:20:54,000 --> 00:20:57,000 Kumbuka kwamba mimi umba muundo mwanafunzi akamwita Daudi, 373 00:20:57,000 --> 00:21:00,000 na kisha kuwa ilikuwa kwa kweli ni mbadala, ingawa, 374 00:21:00,000 --> 00:21:04,000 kwa kuwa kutofautiana kuitwa jina na kuitwa mwingine kutofautiana, nadhani, nyumba, 375 00:21:04,000 --> 00:21:08,000 na mwingine kutofautiana kuitwa ID kwa sababu katika hadithi kwamba mimi basi alitaka kuanzisha kitu kingine 376 00:21:08,000 --> 00:21:11,000 kama Rob katika mpango, hivyo basi niliamua kusubiri dakika, 377 00:21:11,000 --> 00:21:13,000 Nahitaji rename vigezo hivi. 378 00:21:13,000 --> 00:21:16,000 Hebu piga mgodi NAME1 ID1, house1. 379 00:21:16,000 --> 00:21:20,000 Hebu piga Rob wa NAME2, house2, ID2. 380 00:21:20,000 --> 00:21:22,000 Lakini kisha kusubiri dakika, nini kuhusu Tommy? 381 00:21:22,000 --> 00:21:24,000 Kisha sisi alikuwa tatu vigezo zaidi. 382 00:21:24,000 --> 00:21:27,000 Sisi ilianzisha mtu mwingine, nne seti ya variables. 383 00:21:27,000 --> 00:21:30,000 dunia kuanza kupata messy haraka sana, 384 00:21:30,000 --> 00:21:33,000 hivyo sisi ilianzisha structs, na nini kulazimisha kuhusu struct? 385 00:21:33,000 --> 00:21:39,000 Je struct C basi wewe kufanya? 386 00:21:39,000 --> 00:21:42,000 Ni kweli Awkward leo. 387 00:21:42,000 --> 00:21:44,000 Nini? >> [Inaudible mwanafunzi majibu] 388 00:21:44,000 --> 00:21:47,000 Yeah, hasa, typedef inaruhusu kujenga mpya data aina, 389 00:21:47,000 --> 00:21:51,000 na struct, Keyword struct, utapata kurejelea 390 00:21:51,000 --> 00:21:54,000 conceptually kuhusiana vipande vya data pamoja 391 00:21:54,000 --> 00:21:56,000 na baada ya hapo kuwaita kitu kama mwanafunzi. 392 00:21:56,000 --> 00:21:58,000 >> Hiyo ilikuwa nzuri kwa sababu sasa tunaweza mfano 393 00:21:58,000 --> 00:22:03,000 zaidi ya aina ya conceptually thabiti dhana ya mwanafunzi katika variable 394 00:22:03,000 --> 00:22:07,000 badala ya kiholela kuwa moja kwa kamba, moja kwa ID, na kadhalika. 395 00:22:07,000 --> 00:22:10,000 Arrays ni nzuri kwa sababu wao kuruhusu sisi kuanza kusafisha code yetu. 396 00:22:10,000 --> 00:22:13,000 Lakini ni nini negativa sasa wa safu? 397 00:22:13,000 --> 00:22:15,000 Nini unaweza kufanya? Yeah. 398 00:22:15,000 --> 00:22:17,000 [Mwanafunzi] Una kujua jinsi kubwa ni. 399 00:22:17,000 --> 00:22:19,000 Una kujua jinsi kubwa ni, hivyo ni aina ya maumivu. 400 00:22:19,000 --> 00:22:21,000 Wale wa wewe na uzoefu kabla ya programu kujua kwamba katika mengi ya lugha, 401 00:22:21,000 --> 00:22:24,000 kama Java, unaweza kuuliza chunk ya kumbukumbu, hasa safu, 402 00:22:24,000 --> 00:22:28,000 jinsi kubwa ni wewe, na urefu, mali, ili kuzungumza, na kwamba ni kweli urahisi. 403 00:22:28,000 --> 00:22:32,000 Katika C, unaweza hata kuwaita strlen kwenye safu generic 404 00:22:32,000 --> 00:22:35,000 kwa sababu strlen, kama neno ina maana, ni tu kwa masharti, 405 00:22:35,000 --> 00:22:39,000 na wewe wanaweza kufikiri urefu wa kamba kwa sababu ya mkataba huu wa binadamu 406 00:22:39,000 --> 00:22:43,000 ya kuwa na 0 \, lakini safu, zaidi generically, ni tu chunk ya kumbukumbu. 407 00:22:43,000 --> 00:22:46,000 Kama ni safu ya ints, kuna si kwenda kuwa baadhi ya tabia maalum 408 00:22:46,000 --> 00:22:48,000 mwishoni kusubiri kwa ajili yenu. 409 00:22:48,000 --> 00:22:50,000 Una kukumbuka urefu wa safu. 410 00:22:50,000 --> 00:22:54,000 Mwingine upande wa chini ya safu reared kichwa yake katika GetString yenyewe. 411 00:22:54,000 --> 00:22:59,000 Nini mwingine upande wa chini ya safu? 412 00:22:59,000 --> 00:23:01,000 Mheshimiwa, wewe tu na mimi leo. 413 00:23:01,000 --> 00:23:04,000 [Inaudible mwanafunzi majibu] >> Ni nini? 414 00:23:04,000 --> 00:23:06,000 Ni alitangaza juu ya stack. 415 00:23:06,000 --> 00:23:09,000 Okay, alitangaza juu ya stack. Mbona wewe kama hayo? 416 00:23:09,000 --> 00:23:13,000 [Mwanafunzi] Kwa sababu anapata kutumika tena. 417 00:23:13,000 --> 00:23:15,000 Ni anapata kutumika tena. 418 00:23:15,000 --> 00:23:18,000 Sawa, kama kutumia safu kutenga kumbukumbu, 419 00:23:18,000 --> 00:23:21,000 huwezi, kwa mfano, kurudi kwa sababu ni juu ya stack. 420 00:23:21,000 --> 00:23:23,000 Okay, hiyo ni hasara. 421 00:23:23,000 --> 00:23:25,000 Na vipi kuhusu mtu mwingine na safu? 422 00:23:25,000 --> 00:23:28,000 Mara baada ya kuipa, wewe ni aina ya Star kama unahitaji nafasi zaidi 423 00:23:28,000 --> 00:23:30,000 kuliko safu ambayo ina. 424 00:23:30,000 --> 00:23:34,000 >> Kisha sisi kuletwa, wanakumbuka, malloc, aliyetupa uwezo wa dynamically kutenga kumbukumbu. 425 00:23:34,000 --> 00:23:37,000 Lakini nini kama sisi walijaribu dunia tofauti kabisa? 426 00:23:37,000 --> 00:23:40,000 Nini kama sisi alitaka kutatua matatizo ya wanandoa wa wale 427 00:23:40,000 --> 00:23:45,000 hivyo sisi badala-wangu kalamu amelala hapa- 428 00:23:45,000 --> 00:23:51,000 nini kama sisi badala alitaka kimsingi kujenga dunia kwamba hakuna tena kama hii? 429 00:23:51,000 --> 00:23:56,000 Hii ni safu, na, bila shaka, aina hii ya kuzorota kwa mara sisi hit mwisho wa safu, 430 00:23:56,000 --> 00:24:00,000 na mimi sasa hakuna tena nafasi kwa ajili ya mwingine integer au nyingine tabia. 431 00:24:00,000 --> 00:24:03,000 Nini kama sisi aina ya preemptively kusema vizuri, kwa nini sio sisi kupumzika 432 00:24:03,000 --> 00:24:07,000 mahitaji haya kwamba chunks haya yote ya kumbukumbu kuwa contiguous nyuma kwa nyuma, 433 00:24:07,000 --> 00:24:10,000 na kwa nini siyo, wakati mimi haja int au Char, 434 00:24:10,000 --> 00:24:12,000 tu nipe nafasi kwa mmoja wao? 435 00:24:12,000 --> 00:24:14,000 Na wakati mimi haja mwingine, nipe nafasi nyingine, 436 00:24:14,000 --> 00:24:16,000 na wakati mimi haja mwingine, nipe nafasi nyingine. 437 00:24:16,000 --> 00:24:19,000 faida ambayo kwa sasa ni kwamba kama mtu mwingine 438 00:24:19,000 --> 00:24:21,000 inachukua kumbukumbu zaidi ya hapa, hakuna mpango mkubwa. 439 00:24:21,000 --> 00:24:25,000 Nitachukua hii chunk ya ziada ya kumbukumbu hapa na kisha hii moja. 440 00:24:25,000 --> 00:24:28,000 >> Sasa, kupata tu hapa ni kwamba hii karibu anahisi kama mimi na 441 00:24:28,000 --> 00:24:30,000 rundo zima la vigezo tofauti. 442 00:24:30,000 --> 00:24:33,000 Hii anahisi kama vigezo tano tofauti uwezekano. 443 00:24:33,000 --> 00:24:36,000 Lakini nini kama sisi kuiba wazo kutoka masharti 444 00:24:36,000 --> 00:24:41,000 ambapo sisi kwa namna fulani kuhusisha mambo haya pamoja conceptually, na nini kama mimi alifanya hivyo? 445 00:24:41,000 --> 00:24:44,000 Hii ni mshale wangu sana hafifu inayotolewa. 446 00:24:44,000 --> 00:24:46,000 Lakini chukulia kwamba kila moja ya haya chunks ya kumbukumbu 447 00:24:46,000 --> 00:24:52,000 alisema kwa wengine, na hii guy, ambaye hana ndugu kwa haki yake, 448 00:24:52,000 --> 00:24:54,000 hana arrow vile. 449 00:24:54,000 --> 00:24:56,000 Huu kwa kweli ni nini wito orodha zilizounganishwa. 450 00:24:56,000 --> 00:25:00,000 Hii ni mpya data muundo kwamba inaruhusu yetu kutenga chunk ya kumbukumbu, 451 00:25:00,000 --> 00:25:03,000 kisha mwingine, kisha mwingine, kisha mwingine, wakati wowote tunataka 452 00:25:03,000 --> 00:25:07,000 wakati wa mpango, na sisi kumbuka kwamba wao ni wote kwa namna fulani kuhusiana 453 00:25:07,000 --> 00:25:11,000 na chaining literally wote pamoja, na sisi gani kwamba pictorially hapa kwa mshale. 454 00:25:11,000 --> 00:25:15,000 Lakini katika kanuni, nini itakuwa utaratibu kupitia ambayo unaweza namna fulani kuungana, 455 00:25:15,000 --> 00:25:20,000 karibu kama Scratch, mmoja chunk kwa chunk mwingine? 456 00:25:20,000 --> 00:25:22,000 Tunaweza kutumia pointer, haki? 457 00:25:22,000 --> 00:25:25,000 Kwa sababu kwa kweli arrow ambayo inaenda kutoka mraba juu kushoto, 458 00:25:25,000 --> 00:25:31,000 this guy hapa kwa moja hii, inaweza vyenye ndani ya mraba huu 459 00:25:31,000 --> 00:25:34,000 si tu baadhi ints, si tu baadhi Char, lakini kile kama mimi kweli zilizotengwa 460 00:25:34,000 --> 00:25:37,000 kidogo ya ziada nafasi ili kwamba sasa, 461 00:25:37,000 --> 00:25:41,000 kila moja ya chunks yangu ya kumbukumbu, hata ingawa hii ni kwenda gharama yangu, 462 00:25:41,000 --> 00:25:45,000 sasa inaonekana kidogo zaidi mstatili ambapo moja ya chunks ya kumbukumbu 463 00:25:45,000 --> 00:25:47,000 ni kutumika kwa idadi, kama idadi 1, 464 00:25:47,000 --> 00:25:50,000 na kisha kama guy hii inahifadhi idadi 2, 465 00:25:50,000 --> 00:25:52,000 chunk hii nyingine ya kumbukumbu hutumika kwa mshale, 466 00:25:52,000 --> 00:25:54,000 au zaidi concretely, pointer. 467 00:25:54,000 --> 00:25:59,000 Na nadhani kuhifadhi namba 3 ya juu hapa wakati mimi kutumia hii kwa uhakika katika guy kwamba, 468 00:25:59,000 --> 00:26:02,000 na sasa guy hii, hebu tuseme mimi tu wanataka tatu vile chunks ya kumbukumbu. 469 00:26:02,000 --> 00:26:05,000 Mimi itabidi kuchora mstari kupitia njia hiyo, kuonyesha null. 470 00:26:05,000 --> 00:26:07,000 Hakuna tabia ya ziada. 471 00:26:07,000 --> 00:26:10,000 >> Hakika, huu ni jinsi gani tunaweza kwenda kuhusu utekelezaji 472 00:26:10,000 --> 00:26:12,000 kitu ambacho ni wito orodha zilizounganishwa. 473 00:26:12,000 --> 00:26:18,000 orodha wanaohusishwa ni mpya data muundo, na ni jiwe wanazidi kuelekea 474 00:26:18,000 --> 00:26:21,000 kiasi fancier data miundo kwamba kutatua matatizo 475 00:26:21,000 --> 00:26:23,000 pamoja na mistari ya matatizo Facebook-aina na matatizo ya Google-aina 476 00:26:23,000 --> 00:26:26,000 ambapo una data kubwa seti, na tena ni kupunguzwa 477 00:26:26,000 --> 00:26:29,000 kuhifadhi kila kitu contiguously na kutumia kitu kama tafuta linear 478 00:26:29,000 --> 00:26:31,000 au hata kitu kama tafuta binary. 479 00:26:31,000 --> 00:26:33,000 Unataka bora hata mara mbio. 480 00:26:33,000 --> 00:26:37,000 Kwa kweli, mmoja wa Grails Mtakatifu tutaweza kuzungumzia baadaye wiki hii au ijayo 481 00:26:37,000 --> 00:26:41,000 ni algorithm ambaye mbio wakati ni mara kwa mara. 482 00:26:41,000 --> 00:26:44,000 Kwa maneno mengine, ni daima inachukua kiasi hicho bila kujali 483 00:26:44,000 --> 00:26:47,000 jinsi kubwa ya pembejeo ni, na kwamba bila ya shaka kuwa kulazimisha, 484 00:26:47,000 --> 00:26:49,000 hata hivyo zaidi kuliko kitu logarithmic. 485 00:26:49,000 --> 00:26:51,000 Nini hili juu ya screen hapa? 486 00:26:51,000 --> 00:26:55,000 Kila moja ya mistatiri ni nini hasa mimi tu akauchomoa kwa mkono. 487 00:26:55,000 --> 00:26:59,000 Lakini jambo njia yote upande wa kushoto ni variable maalum. 488 00:26:59,000 --> 00:27:02,000 Ni kwenda kuwa pointer moja kwa sababu gotcha moja 489 00:27:02,000 --> 00:27:04,000 na orodha wanaohusishwa, kama mambo haya ni kuitwa, 490 00:27:04,000 --> 00:27:09,000 ni kwamba una hutegemea kwenye mwisho mmoja wa orodha zinazoungwa. 491 00:27:09,000 --> 00:27:13,000 >> Tu kama na kamba, una kujua anuani ya Char kwanza. 492 00:27:13,000 --> 00:27:15,000 Same mpango kwa orodha zilizounganishwa. 493 00:27:15,000 --> 00:27:19,000 Una kujua anuani ya chunk ya kwanza ya kumbukumbu 494 00:27:19,000 --> 00:27:25,000 kwa sababu kutoka huko, unaweza kufikia kila moja nyingine. 495 00:27:25,000 --> 00:27:27,000 Upande wa chini. 496 00:27:27,000 --> 00:27:30,000 Nini bei ni sisi kulipa kwa ajili ya hii versatility ya kuwa dynamically 497 00:27:30,000 --> 00:27:34,000 sizable data muundo kwamba kama sisi milele haja zaidi ya kumbukumbu, faini, 498 00:27:34,000 --> 00:27:37,000 tu kutenga moja zaidi chunk na kuteka pointer kutoka 499 00:27:37,000 --> 00:27:39,000 zamani kwa mkia mpya ya orodha? 500 00:27:39,000 --> 00:27:41,000 Yeah. 501 00:27:41,000 --> 00:27:43,000 [Mwanafunzi] Inachukua kuhusu mara mbili kama vile nafasi. 502 00:27:43,000 --> 00:27:45,000 Inachukua mara mbili kama vile nafasi, ili dhahiri negativa, na tumeona hii 503 00:27:45,000 --> 00:27:48,000 tradeoff kabla kati ya muda na nafasi na kubadilika 504 00:27:48,000 --> 00:27:51,000 ambapo kwa sasa, hatuhitaji 32 bits kwa kila moja ya namba hizi. 505 00:27:51,000 --> 00:27:57,000 Sisi kwa kweli wanahitaji 64, 32 kwa idadi na 32 kwa pointer. 506 00:27:57,000 --> 00:27:59,000 Lakini hey, nina 2 gigabytes ya RAM. 507 00:27:59,000 --> 00:28:02,000 Kuongeza bits nyingine 32 hapa na hapa haionekani kuwa kubwa ya mpango huo. 508 00:28:02,000 --> 00:28:05,000 Lakini kwa seti kubwa data, ni dhahiri zinafikia literally mara mbili zaidi. 509 00:28:05,000 --> 00:28:09,000 Nini mwingine upande wa chini sasa, au kile kipengele gani sisi kutoa up, 510 00:28:09,000 --> 00:28:12,000 kama sisi kuwakilisha orodha ya mambo na orodha wanaohusishwa na si safu? 511 00:28:12,000 --> 00:28:14,000 [Mwanafunzi] Huwezi traverse ni nyuma. 512 00:28:14,000 --> 00:28:16,000 Huwezi traverse ni nyuma, hivyo wewe ni aina ya Star ikiwa wewe unatembea 513 00:28:16,000 --> 00:28:19,000 kutoka kushoto kwenda kulia kwa kutumia kwa kitanzi au kitanzi wakati 514 00:28:19,000 --> 00:28:21,000 na kisha wewe kutambua, "Oh, mimi nataka kwenda nyuma mwanzo wa orodha." 515 00:28:21,000 --> 00:28:26,000 Huwezi kwa sababu hizi kuyatumia kwenda tu kutoka kushoto kwenda kulia kama mishale zinaonyesha. 516 00:28:26,000 --> 00:28:29,000 >> Sasa, unaweza kukumbuka mwanzo wa orodha na kutofautiana nyingine, 517 00:28:29,000 --> 00:28:31,000 lakini hiyo ni utata kukumbuka. 518 00:28:31,000 --> 00:28:35,000 safu, bila kujali jinsi mbali ya kwenda, unaweza daima kufanya bala, bala, bala, minus 519 00:28:35,000 --> 00:28:37,000 na kurudi nyuma kutoka wapi wewe akaja. 520 00:28:37,000 --> 00:28:40,000 Nini Negativa mwingine hapa? Yeah. 521 00:28:40,000 --> 00:28:43,000 [Inaudible mwanafunzi swali] 522 00:28:43,000 --> 00:28:47,000 Unaweza, hivyo ve kweli tu mapendekezo muundo data kuitwa orodha doubly wanaohusishwa, 523 00:28:47,000 --> 00:28:50,000 na kwa kweli, ungependa kuongeza mwingine pointer kwa kila moja ya haya mistatili 524 00:28:50,000 --> 00:28:53,000 kwamba huenda upande mwingine, suala la mafanikio ya ambayo 525 00:28:53,000 --> 00:28:55,000 ni sasa unaweza tembeeni na kurudi, 526 00:28:55,000 --> 00:28:59,000 Kwa upande wa chini ambayo sasa unatumia mara tatu kama kumbukumbu nyingi kama sisi kutumika kwa 527 00:28:59,000 --> 00:29:04,000 na pia kuongeza utata katika suala la code una kuandika kupata haki. 528 00:29:04,000 --> 00:29:08,000 Lakini haya yote ni labda busara sana tradeoffs, kama reversal ni muhimu zaidi. 529 00:29:08,000 --> 00:29:10,000 Yeah. 530 00:29:10,000 --> 00:29:12,000 [Mwanafunzi] Unaweza pia kuwa na 2D zilizounganishwa orodha. 531 00:29:12,000 --> 00:29:16,000 Nzuri, unaweza si kweli kuwa 2D wanaohusishwa orodha. 532 00:29:16,000 --> 00:29:18,000 Ungeweza. Ni si karibu kama rahisi kama safu. 533 00:29:18,000 --> 00:29:21,000 Kama safu, unaweza kufanya bracket wazi, bracket funge, bracket wazi, C. bracket, 534 00:29:21,000 --> 00:29:23,000 na kupata baadhi muundo 2-dimensional. 535 00:29:23,000 --> 00:29:26,000 Unaweza kutekeleza 2-dimensional wanaohusishwa orodha 536 00:29:26,000 --> 00:29:29,000 kama wewe kufanya add-kama wewe mapendekezo-pointer tatu kwa kila moja ya mambo haya, 537 00:29:29,000 --> 00:29:34,000 na kama unadhani kuhusu orodha nyingine kuja saa wewe style 3D 538 00:29:34,000 --> 00:29:40,000 kutoka screen kwetu sote, ambayo ni nyingine tu mlolongo wa aina fulani. 539 00:29:40,000 --> 00:29:45,000 Tunaweza kufanya hivyo, lakini si rahisi kama kuandika bracket wazi, Mabano ya mraba. Yeah. 540 00:29:45,000 --> 00:29:48,000 [Inaudible mwanafunzi swali] 541 00:29:48,000 --> 00:29:50,000 Nzuri, hivyo hii ni kicker halisi. 542 00:29:50,000 --> 00:29:54,000 >> Hizi algorithms kwamba tumekuwa pined juu, kama oh, tafuta binary, 543 00:29:54,000 --> 00:29:57,000 unaweza kutafuta safu ya idadi juu ya bodi ya 544 00:29:57,000 --> 00:30:01,000 au kitabu ya simu ili haraka zaidi kama wewe kutumia kugawanya na kushinda 545 00:30:01,000 --> 00:30:05,000 na kisha tafuta algorithm, lakini tafuta binary required mawazo mawili. 546 00:30:05,000 --> 00:30:09,000 Mmoja, kwamba data alikuwa Iliyopangwa. 547 00:30:09,000 --> 00:30:11,000 Sasa, tunaweza labda kuweka hii Iliyopangwa, 548 00:30:11,000 --> 00:30:14,000 hivyo labda si kwamba wasiwasi, lakini binary tafuta pia alishika 549 00:30:14,000 --> 00:30:18,000 kwamba alikuwa na upatikanaji random kwa orodha ya idadi, 550 00:30:18,000 --> 00:30:21,000 na safu inaruhusu kuwa na upatikanaji random, na kwa upatikanaji random, 551 00:30:21,000 --> 00:30:24,000 I mean kama wewe ni kupewa safu, ni kiasi gani wakati gani kuchukua wewe 552 00:30:24,000 --> 00:30:26,000 kupata bracket 0? 553 00:30:26,000 --> 00:30:29,000 Moja ya kazi, wewe tu kutumia [0] na uko pale pale. 554 00:30:29,000 --> 00:30:33,000 Wangapi hatua gani kuchukua kupata mahali 10? 555 00:30:33,000 --> 00:30:36,000 Hatua moja, wewe tu kwenda kwenye [10] na wewe uko hapo. 556 00:30:36,000 --> 00:30:40,000 Kwa kulinganisha, ni jinsi gani unaweza kupata integer 10 katika orodha wanaohusishwa? 557 00:30:40,000 --> 00:30:42,000 Una kuanza mwanzoni kwa sababu wewe ni tu kukumbuka 558 00:30:42,000 --> 00:30:45,000 mwanzo wa orodha wanaohusishwa, kama kamba ni kuwa ikumbukwe 559 00:30:45,000 --> 00:30:48,000 na anuani ya Char yake ya kwanza, na kwa kujua kwamba int 10 560 00:30:48,000 --> 00:30:53,000 au kwamba tabia 10 katika kamba, una kutafuta nzima damn kitu. 561 00:30:53,000 --> 00:30:55,000 >> Tena, sisi siyo kutatua matatizo yote ya yetu. 562 00:30:55,000 --> 00:31:00,000 Sisi ni kuanzisha ndio mpya, lakini ni kweli unategemea nini wewe ni kujaribu kubuni kwa. 563 00:31:00,000 --> 00:31:04,000 Katika suala la utekelezaji wa hii, tunaweza kukopa kutoka wazo muundo kwamba mwanafunzi. 564 00:31:04,000 --> 00:31:07,000 syntax ni sawa sana, ila sasa, wazo ni kidogo zaidi abstract 565 00:31:07,000 --> 00:31:09,000 kuliko nyumba na jina na kitambulisho. 566 00:31:09,000 --> 00:31:13,000 Lakini napendekeza kwamba tunaweza kuwa na muundo data katika C 567 00:31:13,000 --> 00:31:17,000 kiitwacho nodi, kama neno la mwisho kwenye slide unaonyesha, 568 00:31:17,000 --> 00:31:21,000 ndani ya nodi, na node ni chombo tu generic katika sayansi ya kompyuta. 569 00:31:21,000 --> 00:31:25,000 Ni kawaida inayotolewa kama mduara au mraba au mstatili kama tumekuwa kufanyika. 570 00:31:25,000 --> 00:31:27,000 Na katika muundo huu data, tuna int, n, 571 00:31:27,000 --> 00:31:29,000 hivyo kwamba ni idadi mimi unataka kuhifadhi. 572 00:31:29,000 --> 00:31:36,000 Lakini ni nini hii mstari wa pili, struct nodi * ijayo? 573 00:31:36,000 --> 00:31:40,000 Kwa nini hii ni sahihi, au kile jukumu gani hii kucheza kitu, 574 00:31:40,000 --> 00:31:42,000 hata kama ni kidogo cryptic katika mtazamo wa kwanza? 575 00:31:42,000 --> 00:31:44,000 Yeah. 576 00:31:44,000 --> 00:31:46,000 [Inaudible mwanafunzi majibu] 577 00:31:46,000 --> 00:31:50,000 Hasa, hivyo aina ya nyara * kwamba ni pointer ya aina fulani. 578 00:31:50,000 --> 00:31:53,000 jina la pointer hii ni kiholela ijayo, 579 00:31:53,000 --> 00:32:00,000 lakini tungeweza kuitwa ni kitu chochote tunataka, lakini nini hatua hii pointer? 580 00:32:00,000 --> 00:32:03,000 [Mwanafunzi] nodi Mwingine >> Hasa., Inaelekeza nodi vile mwingine. 581 00:32:03,000 --> 00:32:05,000 >> Sasa, hii ni aina ya udadisi wa C. 582 00:32:05,000 --> 00:32:09,000 Kumbuka kuwa C ni kusoma na juu compiler hadi chini, kushoto na kulia, 583 00:32:09,000 --> 00:32:13,000 ambayo ina maana kama-hii ni tofauti kidogo kutoka na kile sisi alivyofanya kwa mwanafunzi. 584 00:32:13,000 --> 00:32:16,000 Wakati sisi defined mwanafunzi, sisi kweli hawakuwa kuweka neno huko. 585 00:32:16,000 --> 00:32:18,000 Ni tu alisema typedef. 586 00:32:18,000 --> 00:32:20,000 Kisha sisi alikuwa int id, kamba jina, kamba nyumba, 587 00:32:20,000 --> 00:32:23,000 na kisha mwanafunzi chini ya struct. 588 00:32:23,000 --> 00:32:26,000 Tangazo hilo ni tofauti kidogo kwa sababu, 589 00:32:26,000 --> 00:32:28,000 tena, compiler C ni kidogo bubu. 590 00:32:28,000 --> 00:32:30,000 Ni tu kwenda kusoma juu hadi chini, 591 00:32:30,000 --> 00:32:33,000 hivyo kama unafikia line 2 hapa 592 00:32:33,000 --> 00:32:37,000 ambapo ijayo ni alitangaza na anaona, oh, hapa variable iitwayo ijayo. 593 00:32:37,000 --> 00:32:39,000 Ni pointer nodi struct. 594 00:32:39,000 --> 00:32:42,000 compiler ni kwenda kutambua nini ni nodi struct? 595 00:32:42,000 --> 00:32:44,000 Sijawahi kusikia jambo hili mbele, 596 00:32:44,000 --> 00:32:47,000 kwa sababu neno nodi ili si vinginevyo itaonekana 597 00:32:47,000 --> 00:32:49,000 mpaka chini, hivyo kuna hii redundancy. 598 00:32:49,000 --> 00:32:53,000 Una kusema struct nodi hapa, ambayo unaweza kisha kufupisha baadaye 599 00:32:53,000 --> 00:32:56,000 shukrani kwa typedef chini hapa, lakini hii ni kwa sababu 600 00:32:56,000 --> 00:33:02,000 sisi ni referencing muundo yenyewe ndani ya muundo. 601 00:33:02,000 --> 00:33:05,000 Hiyo gotcha moja huko. 602 00:33:05,000 --> 00:33:07,000 >> Baadhi ya matatizo ya kuvutia ni kwenda kutokea. 603 00:33:07,000 --> 00:33:09,000 Sisi tumepewa orodha ya namba. Jinsi gani sisi Insert ndani yake? 604 00:33:09,000 --> 00:33:11,000 Jinsi gani sisi tafuta yake? Jinsi gani sisi kufuta kutoka humo? 605 00:33:11,000 --> 00:33:13,000 Hasa sasa kwamba tuna kusimamia yote ya kuyatumia haya. 606 00:33:13,000 --> 00:33:15,000 You walidhani kuyatumia walikuwa aina ya akili-bending 607 00:33:15,000 --> 00:33:17,000 wakati alikuwa mmoja wao tu kujaribu kusoma int yake. 608 00:33:17,000 --> 00:33:20,000 Sasa tuna kuendesha thamani orodha nzima. 609 00:33:20,000 --> 00:33:22,000 Mbona sisi kuchukua wetu 5-dakika kuvunja hapa, na kisha tutaweza kuleta 610 00:33:22,000 --> 00:33:34,000 baadhi folks juu ya hatua ya kufanya hasa ile. 611 00:33:34,000 --> 00:33:36,000 >> C ni zaidi fun wakati ni alitenda nje. 612 00:33:36,000 --> 00:33:39,000 Ambao wangeweza literally kama kuwa ya kwanza? 613 00:33:39,000 --> 00:33:41,000 Okay, kuja juu juu. Wewe ni wa kwanza. 614 00:33:41,000 --> 00:33:44,000 Ambao wangependa kuwa 9? Okay, 9. 615 00:33:44,000 --> 00:33:46,000 Vipi kuhusu 9? 17? 616 00:33:46,000 --> 00:33:51,000 Bofya hapa kidogo. 22 na 26 katika mstari wa mbele kwamba. 617 00:33:51,000 --> 00:33:53,000 Na kisha vipi kuhusu mtu zaidi ya hapo kuwa alisema saa. 618 00:33:53,000 --> 00:33:57,000 Wewe ni 34. Okay, 34, kuja juu juu. 619 00:33:57,000 --> 00:33:59,000 Kwanza ni zaidi ya hapo. Okay, zote nne za guys wewe. 620 00:33:59,000 --> 00:34:01,000 Na ambao hawakuwa tunasema kwa 9? 621 00:34:01,000 --> 00:34:04,000 Nani ni 9 zetu? 622 00:34:04,000 --> 00:34:07,000 Nani kweli anataka kuwa 9? Haki zote, kuja juu, kuwa 9. 623 00:34:07,000 --> 00:34:10,000 Hapa sisi kwenda. 624 00:34:10,000 --> 00:34:13,000 34, tutaweza kukutana na wewe pale. 625 00:34:13,000 --> 00:34:17,000 Sehemu ya kwanza ni kufanya wenyewe kuangalia kama hiyo. 626 00:34:17,000 --> 00:34:21,000 26, 22, 17, nzuri. 627 00:34:21,000 --> 00:34:25,000 Kama unaweza kusimama mbali na upande, kwa sababu sisi ni kwenda malloc wewe katika wakati huu. 628 00:34:25,000 --> 00:34:29,000 >> Nzuri, nzuri. 629 00:34:29,000 --> 00:34:32,000 Okay, bora, hivyo hebu kuuliza maswali kadhaa hapa. 630 00:34:32,000 --> 00:34:34,000 Na kweli, nini jina yako >> Anita?. 631 00:34:34,000 --> 00:34:37,000 Anita, sawa, kuja juu zaidi ya hapa. 632 00:34:37,000 --> 00:34:41,000 Anita ni kwenda kutusaidia aina ya kutatua moja haki rahisi swali katika kwanza, 633 00:34:41,000 --> 00:34:44,000 ambayo ni jinsi gani unaweza kupata kama au thamani ni katika orodha? 634 00:34:44,000 --> 00:34:48,000 Sasa, taarifa kwamba kwanza, kuwakilishwa hapa na Lucas, 635 00:34:48,000 --> 00:34:52,000 ni kidogo tofauti, na hivyo kipande chake cha karatasi ni makusudi sideways 636 00:34:52,000 --> 00:34:55,000 sababu si kabisa kama mrefu na haina kuchukua kama bits wengi, 637 00:34:55,000 --> 00:34:58,000 ingawa kitaalam ana ukubwa sawa ya karatasi tu kuzungushwa. 638 00:34:58,000 --> 00:35:01,000 Lakini ni tofauti kidogo katika kwamba yeye tu 32 bits kwa pointer, 639 00:35:01,000 --> 00:35:05,000 na wote wa guys hawa ni 64 bits, nusu ya ambayo ni idadi, nusu ya ambayo ni pointer. 640 00:35:05,000 --> 00:35:08,000 Lakini pointer si taswira, hivyo kama wewe guys inaweza fulani awkwardly 641 00:35:08,000 --> 00:35:12,000 kutumia mkono wako wa kushoto na kumweka katika mtu karibu na wewe. 642 00:35:12,000 --> 00:35:14,000 Na wewe ni namba 34. Nini jina lako? 643 00:35:14,000 --> 00:35:16,000 Ari. 644 00:35:16,000 --> 00:35:19,000 Ari, hivyo kweli, kushikilia karatasi katika mkono wako wa kulia na mkono wa kushoto inakwenda moja kwa moja chini. 645 00:35:19,000 --> 00:35:21,000 Wewe kuwakilisha null upande wa kushoto. 646 00:35:21,000 --> 00:35:24,000 >> Sasa picha yetu ya kibinadamu ni sana thabiti. 647 00:35:24,000 --> 00:35:26,000 Hii ni kweli jinsi ya kuyatumia kazi. 648 00:35:26,000 --> 00:35:29,000 Na kama unaweza scrunch kidogo njia hii hivyo mimi nina katika njia yako. 649 00:35:29,000 --> 00:35:34,000 Anita hapa, kupata mimi namba 22, 650 00:35:34,000 --> 00:35:40,000 lakini kudhani kikwazo cha si binadamu wakimshikilia vipande vya karatasi, 651 00:35:40,000 --> 00:35:43,000 lakini hii ni orodha, na wewe tu Lucas kuanza na 652 00:35:43,000 --> 00:35:46,000 kwa sababu yeye ni halisi pointer kwanza. 653 00:35:46,000 --> 00:35:51,000 Tuseme wewe mwenyewe ni pointer, na hivyo wewe pia kuwa na uwezo wa kumweka katika kitu fulani. 654 00:35:51,000 --> 00:35:56,000 Mbona wewe kuanza kwa akionyesha nini hasa ni Lucas akionyesha? 655 00:35:56,000 --> 00:35:58,000 Nzuri, na napenda kutunga hii nje zaidi ya hapa. 656 00:35:58,000 --> 00:36:04,000 Tu kwa ajili ya majadiliano, ngoja nikuondoe up ukurasa tupu hapa. 657 00:36:04,000 --> 00:36:06,000 Jinsi gani unaweza Spell jina yako >> Anita?. 658 00:36:06,000 --> 00:36:08,000 Okay, Anita. 659 00:36:08,000 --> 00:36:18,000 Hebu sema nodi * anita = lucas. 660 00:36:18,000 --> 00:36:22,000 Naam, sisi nisimfikirie wewe lucas. Sisi lazima wito wewe kwanza. 661 00:36:22,000 --> 00:36:25,000 Kwa nini hii ni katika ukweli thabiti na ukweli hapa? 662 00:36:25,000 --> 00:36:27,000 Moja, kwanza tayari ipo. 663 00:36:27,000 --> 00:36:30,000 Kwanza imetengewa ikatengeneza mahali fulani hapa. 664 00:36:30,000 --> 00:36:35,000 Node * kwanza, na ni zimetengwa orodha namna fulani. 665 00:36:35,000 --> 00:36:37,000 Sijui jinsi ya kuwa kilichotokea. Hayo yalitokea kabla ya darasa kuanza. 666 00:36:37,000 --> 00:36:40,000 Hii orodha ya binadamu wanaohusishwa imeanzishwa. 667 00:36:40,000 --> 00:36:44,000 Na sasa katika hatua hii kwa hadithi-hii yote ni kwenda kwenye Facebook inaonekana baadaye- 668 00:36:44,000 --> 00:36:49,000 katika hatua hii ya hadithi, Anita imekuwa initialized kuwa sawa na ya kwanza, 669 00:36:49,000 --> 00:36:51,000 ambayo haina maana kwamba Anita pointi saa Lucas. 670 00:36:51,000 --> 00:36:53,000 Badala yake, anaonyesha kwa nini anasema katika 671 00:36:53,000 --> 00:36:57,000 kwa sababu anuani hiyo hiyo ndani ya bits Lucas ya 32-1, 2, 3 - 672 00:36:57,000 --> 00:37:01,000 sasa ni pia ndani ya bits Anita wa 32-1, 2, 3. 673 00:37:01,000 --> 00:37:05,000 >> Sasa kupata 22. Jinsi gani unaweza kwenda juu ya kufanya hii? 674 00:37:05,000 --> 00:37:07,000 Nini kwamba Point? >> Kwa chochote. 675 00:37:07,000 --> 00:37:11,000 Onesha chochote, hivyo kwenda mbele na kutenda ni nje kama bora unaweza hapa. 676 00:37:11,000 --> 00:37:15,000 Nzuri, nzuri, na sasa wewe ni akionyesha-nini jina lako na 22? 677 00:37:15,000 --> 00:37:18,000 Ramon. >> Ramon, hivyo Ramon klarar 22. 678 00:37:18,000 --> 00:37:20,000 Wewe sasa kufanyika hundi. 679 00:37:20,000 --> 00:37:24,000 Je, Ramon == 22, na kama ni hivyo, kwa mfano, tunaweza kurudi kweli. 680 00:37:24,000 --> 00:37:26,000 Hebu-wakati haya guys kusimama hapa kiasi fulani awkwardly- 681 00:37:26,000 --> 00:37:32,000 basi mimi kufanya kitu kwa haraka kama bool kupata. 682 00:37:32,000 --> 00:37:37,000 Mimi nina kwenda mbele na kusema (node ​​* orodha, int n). 683 00:37:37,000 --> 00:37:39,000 Nitakuwa haki ya nyuma na nyie. Mimi tu kuandika baadhi code. 684 00:37:39,000 --> 00:37:45,000 Na sasa mimi nina kwenda mbele na kufanya hili, nodi * anita = orodha. 685 00:37:45,000 --> 00:37:51,000 Na mimi nina kwenda mbele na kusema wakati (anita = null!). 686 00:37:51,000 --> 00:37:57,000 >> Fumbo hapa ni kupata kidogo aliweka, lakini wakati (anita = null!), je, nataka kufanya? 687 00:37:57,000 --> 00:38:03,000 Mimi haja ya baadhi ya njia ya referencing 688 00:38:03,000 --> 00:38:05,000 integer kwamba Anita ananyoosha saa. 689 00:38:05,000 --> 00:38:08,000 Katika siku za nyuma, wakati tulikuwa miundo, ambayo ni nodi, 690 00:38:08,000 --> 00:38:11,000 sisi kutumika nukuu dot, na sisi bila kusema kitu kama 691 00:38:11,000 --> 00:38:15,000 anita.n, lakini tatizo hapa ni kwamba Anita si struct per se. 692 00:38:15,000 --> 00:38:17,000 Je, ni yeye? 693 00:38:17,000 --> 00:38:21,000 Yeye ni pointer, hivyo kweli, kama tunataka kutumia hii dot nukuu- 694 00:38:21,000 --> 00:38:23,000 na hii ni kwenda kuangalia kwa makusudi kidogo cryptic- 695 00:38:23,000 --> 00:38:28,000 sisi kufanya kitu kama kwenda mkono wa kushoto wa chochote Anita ni akionyesha 696 00:38:28,000 --> 00:38:31,000 na kisha kupata shamba iitwayo n. 697 00:38:31,000 --> 00:38:35,000 Anita ni pointer, lakini nini ni * anita? 698 00:38:35,000 --> 00:38:38,000 Nini kupata wakati kwenda nini Anita ananyoosha saa? 699 00:38:38,000 --> 00:38:42,000 struct, nodi, na node, wanakumbuka, ana shamba iitwayo n 700 00:38:42,000 --> 00:38:47,000 kwa sababu ina, wanakumbuka, haya mashamba 2, karibu na n, 701 00:38:47,000 --> 00:38:50,000 kuwa tuliona wakati ago haki hapa. 702 00:38:50,000 --> 00:38:53,000 >> Kwa kweli kuiga hii katika kanuni, 703 00:38:53,000 --> 00:39:02,000 tunaweza kufanya hii na kusema kama ((* anita). n == n), n kwamba mimi nina kuangalia kwa. 704 00:39:02,000 --> 00:39:04,000 Ona kwamba kazi ilikuwa kupita katika idadi najali. 705 00:39:04,000 --> 00:39:10,000 Kisha mimi unaweza kwenda mbele na kufanya kitu kama kurudi kweli. 706 00:39:10,000 --> 00:39:12,000 Mwingine, kama si kwamba kesi, nini nataka kufanya? 707 00:39:12,000 --> 00:39:19,000 Je, mimi kutafsiri kwa kificho nini Anita akafanya hivyo intuitively kutembea kupitia orodha? 708 00:39:19,000 --> 00:39:26,000 Nifanye nini hapa kuiga Anita kuchukua hatua kwa upande wa kushoto, kuwa hatua kwa upande wa kushoto? 709 00:39:26,000 --> 00:39:28,000 [Inaudible mwanafunzi majibu] >> gani hiyo? 710 00:39:28,000 --> 00:39:30,000 [Inaudible mwanafunzi majibu] 711 00:39:30,000 --> 00:39:34,000 Nzuri, si wazo mbaya, lakini katika siku za nyuma, wakati tumekuwa kufanyika hili, tumefanya anita + + 712 00:39:34,000 --> 00:39:37,000 kwa sababu kwamba ingekuwa kuongeza idadi 1 kwa Anita, 713 00:39:37,000 --> 00:39:40,000 ambayo ingekuwa kawaida kumweka katika mtu mwingine, kama Ramon, 714 00:39:40,000 --> 00:39:44,000 au mtu wa pili wake, au karibu naye mtu chini ya mstari. 715 00:39:44,000 --> 00:39:49,000 Lakini si kwamba nzuri kabisa hapa kwa sababu gani jambo hili kuangalia kama katika kumbukumbu? 716 00:39:49,000 --> 00:39:54,000 Si kwamba. Tuna Disable kwamba. 717 00:39:54,000 --> 00:40:00,000 Inaonekana kama hii katika kumbukumbu, na hata ingawa nimekuwa inayotolewa 1 na 2 na 3 karibu na mtu mwingine, 718 00:40:00,000 --> 00:40:03,000 kama kweli sisi simulate hii-unaweza guys, wakati bado akionyesha watu sawa, 719 00:40:03,000 --> 00:40:07,000 Unaweza baadhi ya wewe kuchukua random hatua nyuma, baadhi yenu hatua random mbele? 720 00:40:07,000 --> 00:40:10,000 >> Fujo Hii bado ni orodha zilizounganishwa, 721 00:40:10,000 --> 00:40:13,000 lakini haya guys inaweza kuwa mahali popote katika kumbukumbu, 722 00:40:13,000 --> 00:40:15,000 hivyo anita + + si kwenda kufanya kazi kwa nini? 723 00:40:15,000 --> 00:40:19,000 Nini katika eneo anita + +? 724 00:40:19,000 --> 00:40:21,000 Nani anajua. 725 00:40:21,000 --> 00:40:24,000 Ni baadhi ya thamani mengine kwamba tu hivyo hutokea kuwa alitia 726 00:40:24,000 --> 00:40:28,000 kati ya wote wa nodi hiyo kwa bahati kwa sababu sisi siyo kutumia safu. 727 00:40:28,000 --> 00:40:30,000 Sisi zilizotengwa kila nodi hiyo mmoja mmoja. 728 00:40:30,000 --> 00:40:32,000 Sawa, kama guys unaweza safi wenyewe nyuma juu. 729 00:40:32,000 --> 00:40:37,000 Hebu kupendekeza kwamba badala ya anita + +, sisi badala kufanya anita anapata- 730 00:40:37,000 --> 00:40:42,000 vizuri, kwa nini sio sisi kwenda chochote Anita ananyoosha saa na kisha kufanya ijayo.? 731 00:40:42,000 --> 00:40:45,000 Kwa maneno mengine, sisi kwenda Ramon, ambaye ameshika namba 22, 732 00:40:45,000 --> 00:40:51,000 na kisha ya pili. ni kama ingawa Anita itakuwa kuiga mkono wake wa kushoto pointer. 733 00:40:51,000 --> 00:40:54,000 Lakini yeye hakutaka kwenda mbali zaidi kuliko Ramon kwa sababu sisi kupatikana 22. 734 00:40:54,000 --> 00:40:56,000 Lakini kwamba itakuwa ni wazo. Sasa, hii ni fujo mungu-kubwa. 735 00:40:56,000 --> 00:40:59,000 Kusema kweli, hakuna mtu milele kumbuka hii syntax, na hivyo nashiriki, 736 00:40:59,000 --> 00:41:04,000 ni kweli kidogo makusudi-oh, wewe hawakuwa kweli kuona kile aliandika. 737 00:41:04,000 --> 00:41:08,000 Hii itakuwa zaidi ya kulazimisha kama naweza. Voilà! 738 00:41:08,000 --> 00:41:10,000 >> Nyuma ya pazia, nilikuwa kutatua tatizo kwa njia hii. 739 00:41:10,000 --> 00:41:14,000 Anita, kuchukua hatua kwa upande wa kushoto, 740 00:41:14,000 --> 00:41:18,000 kwanza, hatuwezi kwenda anuani kwamba Anita ni akionyesha 741 00:41:18,000 --> 00:41:23,000 na ambapo yeye utapata si tu n, ambayo sisi tu checked kwa ajili ya kulinganisha, 742 00:41:23,000 --> 00:41:25,000 lakini pia kupata ijayo - katika kesi hii, 743 00:41:25,000 --> 00:41:28,000 Ramon wa mkono wa kushoto akizungumzia nodi ijayo katika orodha. 744 00:41:28,000 --> 00:41:32,000 Lakini hii ni fujo mungu-kubwa ambayo mimi inajulikana mapema, 745 00:41:32,000 --> 00:41:34,000 lakini zinageuka C unatuwezesha kurahisisha hii. 746 00:41:34,000 --> 00:41:40,000 Badala ya kuandika (* anita), tunaweza badala kuandika tu anita-> n, 747 00:41:40,000 --> 00:41:45,000 na ni exact kitu functionally, lakini ni mengi zaidi Intuitive, 748 00:41:45,000 --> 00:41:48,000 na ni mengi zaidi sambamba na picha kwamba sisi tumekuwa kuchora 749 00:41:48,000 --> 00:41:50,000 muda wote huu kwa kutumia mishale. 750 00:41:50,000 --> 00:41:57,000 >> Mwisho, nini tunahitaji kufanya mwisho wa mpango huu? 751 00:41:57,000 --> 00:42:00,000 Kuna moja mstari wa kanuni iliyobaki. 752 00:42:00,000 --> 00:42:02,000 Kurudi nini? 753 00:42:02,000 --> 00:42:05,000 Uongo, kwa sababu kama sisi kupata njia nzima wakati kitanzi 754 00:42:05,000 --> 00:42:10,000 na Anita ni, kwa kweli, null, kwamba maana akaenda njia yote hadi mwisho wa orodha 755 00:42:10,000 --> 00:42:12,000 ambako alikuwa akionyesha-nini jina yako tena? 756 00:42:12,000 --> 00:42:15,000 Ari. >> Ari wa mkono wa kushoto, ambayo ni null. 757 00:42:15,000 --> 00:42:18,000 Anita ni sasa null, na mimi kutambua wewe ni wamesimama tu hapa awkwardly katika utata 758 00:42:18,000 --> 00:42:21,000 kwa sababu mimi naenda mbali juu monologue hapa, 759 00:42:21,000 --> 00:42:23,000 lakini tutaweza kuhusisha wewe tena katika muda tu. 760 00:42:23,000 --> 00:42:27,000 Anita ni null katika hatua katika hadithi, hivyo kitanzi wakati vipoe, 761 00:42:27,000 --> 00:42:30,000 na tuna kurudi uongo kwa sababu kama yeye got njia yote ya pointer Ari wa null 762 00:42:30,000 --> 00:42:34,000 basi kulikuwa hakuna idadi ya kwamba yeye kutafutwa katika orodha. 763 00:42:34,000 --> 00:42:39,000 Tunaweza safi hii juu pia, lakini hii ni utekelezaji pretty nzuri basi 764 00:42:39,000 --> 00:42:43,000 ya kazi traversal, kupata kazi kwa orodha zinazoungwa. 765 00:42:43,000 --> 00:42:48,000 Ni bado linear tafuta, lakini si rahisi kama + + pointer 766 00:42:48,000 --> 00:42:52,000 au + + variable i kwa sababu sasa hatuwezi nadhani 767 00:42:52,000 --> 00:42:54,000 ambapo kila mmoja wa nodi hiyo ni katika kumbukumbu. 768 00:42:54,000 --> 00:42:57,000 Tuna kwa literally kufuata ya uchaguzi wa breadcrumbs au, hasa zaidi, 769 00:42:57,000 --> 00:43:00,000 kuyatumia, kupata kutoka nodi mmoja hadi mwingine. 770 00:43:00,000 --> 00:43:02,000 >> Sasa hebu jaribu mwingine mmoja. Anita, unataka kurudi hapa? 771 00:43:02,000 --> 00:43:06,000 Mbona sisi kwenda mbele na kutenga mtu mwingine kutoka watazamaji? 772 00:43:06,000 --> 00:43:08,000 Malloc-nini jina yako >> Rebecca?. 773 00:43:08,000 --> 00:43:10,000 Rebecca. Rebecca imekuwa malloced kutoka kwa watazamaji, 774 00:43:10,000 --> 00:43:13,000 na yeye sasa ni hifadhi ya idadi 55. 775 00:43:13,000 --> 00:43:17,000 Na lengo katika mkono sasa ni kwa Anita Insert 776 00:43:17,000 --> 00:43:22,000 Rebecca katika orodha wanaohusishwa hapa katika nafasi yake sahihi. 777 00:43:22,000 --> 00:43:24,000 Njoo hapa juu kwa muda. 778 00:43:24,000 --> 00:43:28,000 Nimefanya kitu kama hiki. 779 00:43:28,000 --> 00:43:32,000 Nimefanya * nodi. Na nini jina yako tena? 780 00:43:32,000 --> 00:43:34,000 Rebecca. >> Rebecca, okay. 781 00:43:34,000 --> 00:43:41,000 Rebecca anapata malloc (sizeof (node)). 782 00:43:41,000 --> 00:43:44,000 Tu kama tumetenga mambo kama wanafunzi na whatnot katika siku za nyuma, 783 00:43:44,000 --> 00:43:46,000 tunahitaji ukubwa wa nodi, hivyo sasa Rebecca 784 00:43:46,000 --> 00:43:49,000 ananyoosha katika nini? 785 00:43:49,000 --> 00:43:52,000 Rebecca ana mashamba mawili ndani yake, moja ambayo ni ya 55. 786 00:43:52,000 --> 00:43:55,000 Hebu kufanya nini, rebecca-> = 55. 787 00:43:55,000 --> 00:44:00,000 Lakini basi rebecca-> ijayo lazima-kama hivi sasa, mkono wake ni aina ya nani anajua? 788 00:44:00,000 --> 00:44:03,000 Ni akionyesha thamani baadhi ya takataka, hivyo kwa nini si kwa hatua nzuri 789 00:44:03,000 --> 00:44:07,000 sisi angalau kufanya hili ili mkono wa kushoto ni sasa katika upande wake. 790 00:44:07,000 --> 00:44:09,000 Sasa Anita, kuchukua ni kutoka hapa. 791 00:44:09,000 --> 00:44:11,000 Una Rebecca baada zimetengwa. 792 00:44:11,000 --> 00:44:20,000 Kwenda mbele na kupata ambapo sisi inapaswa kuweka Rebecca. 793 00:44:20,000 --> 00:44:25,000 Nzuri, nzuri sana. 794 00:44:25,000 --> 00:44:28,000 Okay, nzuri, na sasa tunahitaji wewe kutoa kidogo ya mwelekeo, 795 00:44:28,000 --> 00:44:30,000 hivyo umefikia Ari. 796 00:44:30,000 --> 00:44:33,000 Mkono wake wa kushoto ni null, lakini Rebecca wazi ni mali ya haki, 797 00:44:33,000 --> 00:44:36,000 hivyo ni jinsi gani tunaweza kubadilisha orodha hii wanaohusishwa 798 00:44:36,000 --> 00:44:38,000 ili Insert Rebecca katika mahali sahihi? 799 00:44:38,000 --> 00:44:42,000 Kama unaweza literally hoja ya watu mikono kushoto kuzunguka kama inahitajika, 800 00:44:42,000 --> 00:44:48,000 tutaweza kurekebisha tatizo kwa njia hiyo. 801 00:44:48,000 --> 00:44:52,000 Okay, nzuri, na wakati huo huo, Rebecca wa mkono wa kushoto ni sasa kwa upande wake. 802 00:44:52,000 --> 00:44:54,000 >> Hiyo ilikuwa rahisi mno. 803 00:44:54,000 --> 00:44:57,000 Hebu jaribu kutenga-we're karibu kufanyika, 20. 804 00:44:57,000 --> 00:44:59,000 Okay, kuja juu juu. 805 00:44:59,000 --> 00:45:04,000 20 zimetengwa, hivyo basi mimi kwenda mbele na kusema tena hapa 806 00:45:04,000 --> 00:45:07,000 tumekuwa tu kufanyika nodi * saad. 807 00:45:07,000 --> 00:45:11,000 Tuna malloc (sizeof (node)). 808 00:45:11,000 --> 00:45:16,000 Sisi basi kufanya hivyo halisi syntax kama sisi alifanya mbele kwa 20, 809 00:45:16,000 --> 00:45:20,000 na mimi itabidi kufanya ijayo = null, na sasa ni juu Anita 810 00:45:20,000 --> 00:45:23,000 kuingiza wewe katika orodha wanaohusishwa, kama unaweza kucheza kwamba exact jukumu. 811 00:45:23,000 --> 00:45:30,000 Nitafanya. 812 00:45:30,000 --> 00:45:32,000 Okay, nzuri. 813 00:45:32,000 --> 00:45:38,000 Sasa fikiria kwa makini kabla ya kuanza kusonga mikono kushoto kote. 814 00:45:38,000 --> 00:45:46,000 Wewe kwa mbali got jukumu zaidi Awkward leo. 815 00:45:46,000 --> 00:45:59,000 Ambaye mkononi lisongehswe kwanza? 816 00:45:59,000 --> 00:46:02,000 Okay, kusubiri, mimi nina kusikia baadhi ya hapana. 817 00:46:02,000 --> 00:46:07,000 Kama baadhi folks ingekuwa politely kama msaada kutatua hali ya Awkward hapa. 818 00:46:07,000 --> 00:46:11,000 Ambaye mkono wa kushoto lazima updated kwanza labda? Yeah. 819 00:46:11,000 --> 00:46:13,000 [Mwanafunzi] Saad ya. 820 00:46:13,000 --> 00:46:15,000 Okay, Saad, kwa nini, ingawa? 821 00:46:15,000 --> 00:46:17,000 [Inaudible mwanafunzi majibu] 822 00:46:17,000 --> 00:46:19,000 Nzuri, kwa sababu kama sisi hoja-nini jina yako >> Marshall?. 823 00:46:19,000 --> 00:46:22,000 Marshall, kama sisi hoja mkono wake wa kwanza chini ya null, 824 00:46:22,000 --> 00:46:25,000 sasa tuna literally yatima watu wanne katika orodha hii 825 00:46:25,000 --> 00:46:29,000 kwa sababu alikuwa kitu pekee akionyesha Ramon na kila mtu wa kushoto, 826 00:46:29,000 --> 00:46:31,000 hivyo uppdatering kwamba pointer kwanza ilikuwa mbaya. 827 00:46:31,000 --> 00:46:33,000 Hebu tengua kwamba. 828 00:46:33,000 --> 00:46:37,000 Nzuri, na sasa kwenda mbele na hoja sahihi kushoto akionyesha Ramon. 829 00:46:37,000 --> 00:46:39,000 Hii anahisi redundant kidogo. 830 00:46:39,000 --> 00:46:41,000 Sasa kuna watu wawili akionyesha Ramon, lakini hiyo ni faini 831 00:46:41,000 --> 00:46:43,000 kwa sababu sasa jinsi mwingine kufanya sisi update orodha? 832 00:46:43,000 --> 00:46:48,000 Gani nyingine mkono ana hoja? 833 00:46:48,000 --> 00:46:53,000 Bora, sasa sisi waliopotea yoyote kumbukumbu? 834 00:46:53,000 --> 00:46:57,000 Hapana, hivyo nzuri, hebu angalia kama hatuwezi kuvunja hii mara moja zaidi. 835 00:46:57,000 --> 00:47:00,000 >> Mallocing mara moja ya mwisho, namba 5. 836 00:47:00,000 --> 00:47:04,000 Njia yote ya nyuma, kuja juu chini. 837 00:47:04,000 --> 00:47:08,000 Ni ya kusisimua sana. 838 00:47:08,000 --> 00:47:15,000 [Applause] 839 00:47:15,000 --> 00:47:17,000 Nini jina yako >> Ron?. 840 00:47:17,000 --> 00:47:19,000 Ron, sawa, wewe ni malloced kama namba 5. 841 00:47:19,000 --> 00:47:23,000 Tumekuwa tu ifanyike kificho kwamba ni karibu sawa na hizi 842 00:47:23,000 --> 00:47:26,000 pamoja na haki ya jina tofauti. 843 00:47:26,000 --> 00:47:28,000 Bora. 844 00:47:28,000 --> 00:47:38,000 Sasa, Anita, bahati nzuri kuingiza namba 5 katika orodha sasa. 845 00:47:38,000 --> 00:47:43,000 Nzuri, na? 846 00:47:43,000 --> 00:47:47,000 Bora, hivyo hii ni kweli ya tatu ya kesi tatu jumla. 847 00:47:47,000 --> 00:47:49,000 Sisi kwanza alikuwa mtu mwishoni, Rebecca. 848 00:47:49,000 --> 00:47:51,000 Sisi basi alikuwa mtu katikati. 849 00:47:51,000 --> 00:47:53,000 Sasa tuna mtu tangu mwanzo, na katika mfano huu, 850 00:47:53,000 --> 00:47:56,000 sisi sasa alikuwa kwa update Lucas kwa mara ya kwanza 851 00:47:56,000 --> 00:48:00,000 kwa sababu ya kipengele kwanza katika orodha ya sasa ina uhakika kwenye nodi mpya, 852 00:48:00,000 --> 00:48:03,000 ambao, kwa upande mwingine, ni akionyesha idadi nodi 9. 853 00:48:03,000 --> 00:48:06,000 >> Hii ilikuwa maandamano hugely Awkward, mimi nina uhakika, 854 00:48:06,000 --> 00:48:08,000 hivyo duru kubwa ya applause kwa guys haya ikiwa naweza. 855 00:48:08,000 --> 00:48:11,000 Nicely kufanyika. 856 00:48:11,000 --> 00:48:17,000 Hayo ni yote. Unaweza kuweka vipande yako ya karatasi kama kumbukumbu kidogo. 857 00:48:17,000 --> 00:48:22,000 Ni zinageuka kuwa kufanya hivyo katika kanuni 858 00:48:22,000 --> 00:48:26,000 si kabisa rahisi kama tu kusonga mikono kuzunguka 859 00:48:26,000 --> 00:48:28,000 na akizungumzia kuyatumia katika mambo mbalimbali. 860 00:48:28,000 --> 00:48:31,000 Lakini kutambua kwamba linapokuja wakati wa kutekeleza kitu kama 861 00:48:31,000 --> 00:48:34,000 orodha wanaohusishwa au lahaja yake kama wewe kuzingatia kweli 862 00:48:34,000 --> 00:48:38,000 haya misingi ya msingi, matatizo bite-size mimi kuwa na takwimu nje, 863 00:48:38,000 --> 00:48:43,000 ni hii hii au mkono mkono, kutambua kwamba ni nini vinginevyo mpango uungwana tata 864 00:48:43,000 --> 00:48:47,000 inaweza, kwa kweli, kuwa kupunguzwa kwa vitalu haki rahisi jengo kama hii. 865 00:48:47,000 --> 00:48:51,000 >> Hebu kuchukua mambo katika mwelekeo kisasa zaidi bado. 866 00:48:51,000 --> 00:48:53,000 Sisi sasa kuwa na wazo la orodha zinazoungwa. 867 00:48:53,000 --> 00:48:57,000 Sisi pia kuwa-shukrani kwa maoni nyuma kuna-orodha doubly wanaohusishwa, 868 00:48:57,000 --> 00:49:01,000 ambayo inaonekana karibu sawa, lakini sasa tuna kuyatumia mbili ndani ya struct 869 00:49:01,000 --> 00:49:05,000 badala ya mmoja, na sisi inaweza pengine kuwaita wale kuyatumia uliopita na ujao 870 00:49:05,000 --> 00:49:08,000 au kushoto au kulia, lakini sisi, kwa kweli, haja ya watu hao wawili. 871 00:49:08,000 --> 00:49:10,000 code itakuwa zaidi kidogo wanaohusika. 872 00:49:10,000 --> 00:49:12,000 Anita wangalipata kufanya kazi zaidi hapa jukwaani. 873 00:49:12,000 --> 00:49:15,000 Lakini tungeweza shaka kutekeleza kwamba aina ya muundo. 874 00:49:15,000 --> 00:49:19,000 Katika suala la mbio wakati, ingawa, nini itakuwa wakati mbio 875 00:49:19,000 --> 00:49:24,000 kwa Anita wa kutafuta n idadi katika orodha wanaohusishwa sasa? 876 00:49:24,000 --> 00:49:27,000 Bado kubwa O ya n, hivyo ni hakuna bora kuliko tafuta linear. 877 00:49:27,000 --> 00:49:29,000 Hatuwezi kufanya search binary, ingawa, tena. 878 00:49:29,000 --> 00:49:34,000 Kwa nini ilikuwa ni kwamba kesi? Huwezi kuruka karibu. 879 00:49:34,000 --> 00:49:36,000 Hata ingawa sisi ni wazi kuona binadamu wote juu ya hatua, 880 00:49:36,000 --> 00:49:39,000 na Anita wangeweza eyeballed na kusema, "Hapa ni katikati ya orodha," 881 00:49:39,000 --> 00:49:42,000 yeye bila kujua kwamba kama yeye walikuwa programu ya kompyuta 882 00:49:42,000 --> 00:49:47,000 kwa sababu neno tu yeye alikuwa na latch juu kwa wakati wa mwanzo wa mazingira 883 00:49:47,000 --> 00:49:50,000 ilikuwa Lucas, ambaye alikuwa pointer kwanza. 884 00:49:50,000 --> 00:49:53,000 Angeweza lazima kuwa na kufuata viungo hizo, 885 00:49:53,000 --> 00:49:56,000 kuhesabu njia yake mpaka yeye kupatikana takribani katikati, 886 00:49:56,000 --> 00:49:58,000 na hata basi, yeye si kwenda kujua wakati yeye kufikiwa katikati 887 00:49:58,000 --> 00:50:01,000 isipokuwa yeye anakwenda njia yote ya mwisho kwa kufikiri jinsi wengi kuna, 888 00:50:01,000 --> 00:50:05,000 kisha backtracks, na kwamba pia itakuwa ngumu kama huna 889 00:50:05,000 --> 00:50:07,000 orodha doubly wanaohusishwa wa aina fulani. 890 00:50:07,000 --> 00:50:10,000 >> Kutatua matatizo ya baadhi ya leo, lakini kuanzisha wengine. 891 00:50:10,000 --> 00:50:12,000 Je kuhusu muundo tofauti kabisa data? 892 00:50:12,000 --> 00:50:15,000 Hii ni picha ya trays katika Mather House, 893 00:50:15,000 --> 00:50:19,000 na katika kesi hii, tuna muundo data tumekuwa pia aina ya tayari kuzungumza juu. 894 00:50:19,000 --> 00:50:22,000 Kuongelea stack katika muktadha wa kumbukumbu, 895 00:50:22,000 --> 00:50:26,000 na kwamba aina ya makusudi jina lake kwa sababu stack katika suala la kumbukumbu 896 00:50:26,000 --> 00:50:31,000 ni ufanisi muundo data ambayo ina zaidi na zaidi stuff layered juu yake. 897 00:50:31,000 --> 00:50:35,000 Lakini jambo kuvutia kuhusu stack, kama ilivyo katika hali halisi, 898 00:50:35,000 --> 00:50:38,000 ni kwamba ni aina maalum ya muundo data. 899 00:50:38,000 --> 00:50:42,000 Ni muundo data ambapo kipengele kwanza katika 900 00:50:42,000 --> 00:50:46,000 ni kipengele mwisho nje. 901 00:50:46,000 --> 00:50:50,000 Kama wewe ni tray kwanza kuwekwa kwenye stack, 902 00:50:50,000 --> 00:50:53,000 wewe ni kwenda kuwa kwa bahati mbaya tray mwisho kuchukuliwa mbali stack, 903 00:50:53,000 --> 00:50:55,000 na kwamba si lazima jambo jema. 904 00:50:55,000 --> 00:50:58,000 Kinyume, unaweza kufikiri juu yake kwa njia nyingine kote, 905 00:50:58,000 --> 00:51:02,000 mwisho katika ni nje ya kwanza. 906 00:51:02,000 --> 00:51:05,000 >> Sasa, je yoyote matukio kuja akili ambapo baada ya stack 907 00:51:05,000 --> 00:51:08,000 data muundo ambapo una kwamba mali 908 00:51:08,000 --> 00:51:13,000 ya mwisho katika, nje ya kwanza, ni kweli kulazimisha? 909 00:51:13,000 --> 00:51:16,000 Ni kwamba jambo zuri? Ni kwamba jambo baya? 910 00:51:16,000 --> 00:51:19,000 Ni dhahiri kitu mbaya kama trays walikuwa si wote kufanana 911 00:51:19,000 --> 00:51:21,000 na wote walikuwa maalum rangi tofauti au whatnot, 912 00:51:21,000 --> 00:51:24,000 na rangi unataka ni njia yote chini. 913 00:51:24,000 --> 00:51:26,000 Bila shaka, huwezi kupata kwamba bila juhudi kubwa. 914 00:51:26,000 --> 00:51:28,000 Una kuanza kutoka juu na kufanya kazi kwa njia yako chini. 915 00:51:28,000 --> 00:51:31,000 Vile vile, nini kama ungekuwa mmoja wa wavulana hawa mashabiki 916 00:51:31,000 --> 00:51:34,000 angojaye hadi usiku wote kujaribu kupata iPhone mistari na hadi 917 00:51:34,000 --> 00:51:36,000 katika mahali kama hii? 918 00:51:36,000 --> 00:51:40,000 Je, si ni kuwa nzuri kama Apple kuhifadhi 919 00:51:40,000 --> 00:51:42,000 walikuwa data stack muundo? 920 00:51:42,000 --> 00:51:44,000 Yay? Bali? 921 00:51:44,000 --> 00:51:47,000 Ni nzuri tu kwa watu ambao show up katika dakika ya mwisho iwezekanavyo 922 00:51:47,000 --> 00:51:50,000 na kisha kupata amelitunda foleni. 923 00:51:50,000 --> 00:51:52,000 Na kwa kweli, ukweli kwamba nilikuwa hivyo kutega kusema foleni 924 00:51:52,000 --> 00:51:56,000 ni kweli sambamba na nini tunataka kuwaita aina hii ya muundo data, 925 00:51:56,000 --> 00:51:59,000 moja katika ukweli ambapo utaratibu gani jambo, 926 00:51:59,000 --> 00:52:02,000 na unataka moja ya kwanza katika kuwa moja ya kwanza nje 927 00:52:02,000 --> 00:52:04,000 kama tu kwa ajili ya haki za binadamu. 928 00:52:04,000 --> 00:52:07,000 Tutaweza ujumla wito kwamba data foleni muundo. 929 00:52:07,000 --> 00:52:11,000 >> Ni zinageuka badala orodha wanaohusishwa, tunaweza kuanza kutumia hizi sawa mawazo ya msingi 930 00:52:11,000 --> 00:52:15,000 na kuanza kujenga aina mpya na tofauti ya ufumbuzi wa matatizo. 931 00:52:15,000 --> 00:52:19,000 Kwa mfano, katika kesi ya stack, tunaweza kuwakilisha stack 932 00:52:19,000 --> 00:52:22,000 kutumia muundo data kama hii, napenda kupendekeza. 933 00:52:22,000 --> 00:52:26,000 Katika kesi hiyo, nimekuwa alitangaza struct, na nimekuwa alisema ndani ya muundo huu 934 00:52:26,000 --> 00:52:30,000 ni safu ya idadi na kisha kuitwa variable kawaida, 935 00:52:30,000 --> 00:52:33,000 na mimi naenda kuwaita jambo hili stack. 936 00:52:33,000 --> 00:52:35,000 Sasa, kwa nini hii kweli kazi? 937 00:52:35,000 --> 00:52:43,000 Katika kesi ya stack, mimi naweza kuchora hili kwa ufanisi kwenye screen kama safu. 938 00:52:43,000 --> 00:52:47,000 Hapa ni stack yangu. Wale ni namba yangu. 939 00:52:47,000 --> 00:52:50,000 Na tutaweza kuteka yao kama hii, hii, hii, hii, hii. 940 00:52:50,000 --> 00:52:53,000 Na kisha mimi na baadhi nyingine data mwanachama hapa, 941 00:52:53,000 --> 00:52:58,000 iitwayo kawaida, hivyo hii ni kawaida, na hii ni idadi, 942 00:52:58,000 --> 00:53:02,000 na kwa pamoja, iPad zima hapa inawakilisha moja stack muundo. 943 00:53:02,000 --> 00:53:07,000 Sasa, kwa default, ukubwa ina ikatengeneza got kuwa initialized 0, 944 00:53:07,000 --> 00:53:11,000 na nini ndani ya safu ya idadi ya awali 945 00:53:11,000 --> 00:53:14,000 wakati mimi kwanza kutenga safu? 946 00:53:14,000 --> 00:53:16,000 Takataka. Nani anajua? Na si kweli jambo. 947 00:53:16,000 --> 00:53:20,000 Haijalishi kama hii ni 1, 2, 3, 4, 5, kabisa nasibu 948 00:53:20,000 --> 00:53:25,000 kwa bahati mbaya kuhifadhiwa katika muundo wangu kwa sababu ya muda mrefu kama mimi kujua kwamba ukubwa wa stack 949 00:53:25,000 --> 00:53:29,000 ni 0, basi mimi kujua programmatically, si kuangalia yoyote ya vipengele katika safu. 950 00:53:29,000 --> 00:53:31,000 Haijalishi nini huko. 951 00:53:31,000 --> 00:53:34,000 Je, si kuangalia yao, kama itakuwa na maana ya kawaida ya 0. 952 00:53:34,000 --> 00:53:38,000 >> Lakini tuseme sasa mimi kwenda mbele na kuingiza kitu kwenye mkusanyiko. 953 00:53:38,000 --> 00:53:42,000 Mimi nataka kuingiza namba 5, hivyo mimi kuweka namba 5 hapa, 954 00:53:42,000 --> 00:53:45,000 na kisha nini mimi kuweka chini hapa? 955 00:53:45,000 --> 00:53:48,000 Sasa mimi ingekuwa kweli kuweka chini 1 kwa ukubwa, 956 00:53:48,000 --> 00:53:50,000 na sasa stack ni ya kawaida ya 1. 957 00:53:50,000 --> 00:53:53,000 Nini kama mimi kwenda mbele na kuingiza namba, hebu sema, 7 ijayo? 958 00:53:53,000 --> 00:53:57,000 Hii basi anapata updated 2, na kisha tutaweza kufanya 9, 959 00:53:57,000 --> 00:54:02,000 na kisha hii anapata updated 3. 960 00:54:02,000 --> 00:54:05,000 Lakini jambo la kuvutia sasa ya stack hii ni kwamba 961 00:54:05,000 --> 00:54:09,000 Natakiwa kuondoa kipengele ambayo kama nataka pop 962 00:54:09,000 --> 00:54:12,000 kitu mbali ya stack, hivyo kusema? 963 00:54:12,000 --> 00:54:14,000 9 itakuwa jambo la kwanza kwenda. 964 00:54:14,000 --> 00:54:18,000 Jinsi lazima picha kubadilika kama nataka pop kipengele mbali stack, 965 00:54:18,000 --> 00:54:20,000 kiasi kama tray katika Mather? 966 00:54:20,000 --> 00:54:22,000 Yeah >> [Mwanafunzi] Set ukubwa wa 2.. 967 00:54:22,000 --> 00:54:27,000 Hasa, wote mimi kufanya ni kuweka ukubwa wa 2, na nini mimi na safu? 968 00:54:27,000 --> 00:54:29,000 Sina kufanya kitu chochote. 969 00:54:29,000 --> 00:54:32,000 Mimi naweza, tu kuwa anal, kuweka 0 huko au -1 au kitu kwa ishara ya 970 00:54:32,000 --> 00:54:34,000 kuwa hii si thamani legit, lakini haijalishi kwa sababu 971 00:54:34,000 --> 00:54:37,000 Naweza kurekodi nje ya safu yenyewe ni muda gani 972 00:54:37,000 --> 00:54:41,000 hivyo kwamba mimi kujua tu kuangalia mambo mawili ya kwanza katika safu hii. 973 00:54:41,000 --> 00:54:47,000 Sasa, kama mimi kwenda na kuongeza idadi ya 8 na safu hii, jinsi gani picha kubadili ijayo? 974 00:54:47,000 --> 00:54:50,000 Hii inakuwa 8, na hii inakuwa 3. 975 00:54:50,000 --> 00:54:52,000 Mimi kukata pembe chache hapa. 976 00:54:52,000 --> 00:54:56,000 Sasa tuna 5, 7, 8, na tuko nyuma na ukubwa wa 3. 977 00:54:56,000 --> 00:54:58,000 Hii ni pretty rahisi kutekeleza, 978 00:54:58,000 --> 00:55:06,000 lakini wakati ni sisi kwenda kwa majuto uamuzi huu design? 979 00:55:06,000 --> 00:55:09,000 Wakati kufanya mambo kuanza kwenda sana, vibaya sana? Yeah. 980 00:55:09,000 --> 00:55:11,000 [Inaudible mwanafunzi majibu] 981 00:55:11,000 --> 00:55:13,000 Wakati unataka kwenda nyuma na kupata kipengele kwanza kuweka in 982 00:55:13,000 --> 00:55:18,000 >> Ni zinageuka hapa hata ingawa stack ni safu chini ya Hood, 983 00:55:18,000 --> 00:55:21,000 miundo haya data tumekuwa kuanza kuzungumza kuhusu pia ujumla inayojulikana kama 984 00:55:21,000 --> 00:55:25,000 abstract data miundo ambapo jinsi re kutekelezwa 985 00:55:25,000 --> 00:55:27,000 ni kabisa badala ya uhakika. 986 00:55:27,000 --> 00:55:31,000 muundo data kama stack zinatakiwa kuongeza msaada 987 00:55:31,000 --> 00:55:35,000 shughuli kama vile kushinikiza, ambayo inasukuma kwenye tray stack, 988 00:55:35,000 --> 00:55:39,000 na pop, ambayo kuondosha kipengele kutoka stack, na hiyo ni yake. 989 00:55:39,000 --> 00:55:43,000 Kama ungekuwa na download code za mtu mwingine ambaye tayari kutekelezwa 990 00:55:43,000 --> 00:55:46,000 jambo hili aitwaye stack, mtu kwamba ingekuwa imeandikwa 991 00:55:46,000 --> 00:55:49,000 mbili tu kazi kwa ajili yenu, kushinikiza na pop, ambao lengo pekee katika maisha 992 00:55:49,000 --> 00:55:51,000 itakuwa kwa kufanya hasa kwamba. 993 00:55:51,000 --> 00:55:54,000 Wewe au kwake ambaye kutekelezwa kwamba mpango 994 00:55:54,000 --> 00:55:58,000 ingekuwa kabisa moja ya kuamua jinsi ya kutekeleza 995 00:55:58,000 --> 00:56:00,000 semantiki ya kusukuma na popping chini ya Hood 996 00:56:00,000 --> 00:56:03,000 au utendaji wa kusukuma na popping. 997 00:56:03,000 --> 00:56:07,000 Na mimi kuwa alifanya uamuzi fulani shortsighted hapa 998 00:56:07,000 --> 00:56:10,000 kwa kutekeleza stack yangu na muundo huu rahisi data kwa nini? 999 00:56:10,000 --> 00:56:12,000 Wakati gani data hii kuvunja muundo? 1000 00:56:12,000 --> 00:56:18,000 Katika hatua gani unataka Mimi kurudi kosa wakati mtumiaji wito kushinikiza, kwa mfano? 1001 00:56:18,000 --> 00:56:20,000 [Mwanafunzi] Kama hakuna nafasi zaidi. 1002 00:56:20,000 --> 00:56:23,000 Hasa, ikiwa hakuna nafasi zaidi, ikiwa nimepata ulizidi uwezo, 1003 00:56:23,000 --> 00:56:27,000 ambayo ni wote kofia kwa sababu inaashiria kwamba ni baadhi ya aina ya mara kwa mara kimataifa. 1004 00:56:27,000 --> 00:56:30,000 Vizuri, basi Mimi tu kwenda na kusema, "Samahani, siwezi kushinikiza thamani nyingine 1005 00:56:30,000 --> 00:56:32,000 kwenye stack, "kiasi kama katika Mather. 1006 00:56:32,000 --> 00:56:36,000 >> Katika hatua nyingine, wao wanaenda kupiga sehemu ya juu ya baraza la mawaziri kuwa kidogo. 1007 00:56:36,000 --> 00:56:39,000 Hakuna nafasi zaidi au uwezo katika stack, ambapo kiwango kuna baadhi ya aina ya makosa. 1008 00:56:39,000 --> 00:56:42,000 Wanapaswa kuweka kipengele mahali pengine, tray mahali pengine, 1009 00:56:42,000 --> 00:56:44,000 au mahali pa wakati wote. 1010 00:56:44,000 --> 00:56:47,000 Sasa, pamoja na foleni, tunaweza kutekeleza tofauti kidogo. 1011 00:56:47,000 --> 00:56:50,000 foleni ni tofauti kidogo katika kuwa chini ya Hood, inaweza kutekelezwa 1012 00:56:50,000 --> 00:56:54,000 kama safu, lakini kwa nini, katika kesi hii, mimi kupendekeza 1013 00:56:54,000 --> 00:56:59,000 na pia kuwa na kipengele kichwa kichwa anayewakilisha ya orodha, 1014 00:56:59,000 --> 00:57:06,000 mbele ya orodha, mtu wa kwanza katika mstari katika kuhifadhi Apple, kwa kuongeza ukubwa? 1015 00:57:06,000 --> 00:57:14,000 Kwa nini nahitaji kipande ziada ya data hapa? 1016 00:57:14,000 --> 00:57:16,000 Fikiria nyuma kwa nini idadi ni 1017 00:57:16,000 --> 00:57:18,000 ikiwa nimepata inayotolewa ni kama ifuatavyo. 1018 00:57:18,000 --> 00:57:21,000 Tuseme hii ni sasa foleni badala ya stack, 1019 00:57:21,000 --> 00:57:24,000 tofauti kuwa-tu kama foleni kuhifadhi-Apple ni haki. 1020 00:57:24,000 --> 00:57:27,000 mtu wa kwanza katika mstari katika mwanzo wa orodha, idadi 5 katika kesi hii, 1021 00:57:27,000 --> 00:57:30,000 yeye au yeye ni kwenda basi katika kuhifadhi kwanza. 1022 00:57:30,000 --> 00:57:32,000 Hebu kufanya hivyo. 1023 00:57:32,000 --> 00:57:35,000 Tuseme kwamba hii ni hali ya foleni yangu katika wakati huu katika muda, na sasa kuhifadhi Apple 1024 00:57:35,000 --> 00:57:39,000 kuufungua na mtu wa kwanza, namba 5, ni kuongozwa katika kuhifadhi. 1025 00:57:39,000 --> 00:57:43,000 Ninawezaje kubadilisha picha sasa kwamba mimi de-queued mtu wa kwanza 1026 00:57:43,000 --> 00:57:47,000 mbele ya mstari? 1027 00:57:47,000 --> 00:57:50,000 Nini kwamba? >> [Mwanafunzi] Mabadiliko ya foleni. 1028 00:57:50,000 --> 00:57:52,000 Mabadiliko ya kichwa, hivyo 5 kutoweka. 1029 00:57:52,000 --> 00:57:56,000 Katika hali halisi, ni kama ingawa-jinsi bora ya kufanya hivyo? 1030 00:57:56,000 --> 00:58:00,000 Katika hali halisi, ni kana kwamba hii guy kutoweka. 1031 00:58:00,000 --> 00:58:03,000 Nini idadi 7 kufanya katika duka halisi? 1032 00:58:03,000 --> 00:58:05,000 Wangeweza kuchukua hatua kubwa mbele. 1033 00:58:05,000 --> 00:58:08,000 >> Lakini nini sisi kuja kufahamu linapokuja arrays 1034 00:58:08,000 --> 00:58:10,000 na kusonga mambo kote? 1035 00:58:10,000 --> 00:58:12,000 Hiyo ni aina ya kupoteza muda wako, sawa? 1036 00:58:12,000 --> 00:58:16,000 Kwa nini wewe kuwa hivyo anal kama kuwa na mtu wa kwanza 1037 00:58:16,000 --> 00:58:21,000 katika mwanzo wa mstari katika mwanzo wa kimwili chunk ya kumbukumbu? 1038 00:58:21,000 --> 00:58:23,000 Hiyo kabisa lazima. Kwa nini? 1039 00:58:23,000 --> 00:58:26,000 Je, inaweza mimi kumbuka tu badala? >> [Inaudible mwanafunzi majibu] 1040 00:58:26,000 --> 00:58:30,000 Hasa, mimi naweza kumbuka tu na hii kichwa data mwanachama ziada 1041 00:58:30,000 --> 00:58:34,000 kwamba sasa ni mkuu wa orodha ni tena 0, ambayo ilikuwa ni wakati iliyopita. 1042 00:58:34,000 --> 00:58:39,000 Sasa ni kweli namba 1. Kwa njia hii, mimi kupata optimization kidogo. 1043 00:58:39,000 --> 00:58:44,000 Kwa sababu tu nimepata de-queued mtu kutoka mstari katika mwanzo wa mstari katika kuhifadhi Apple 1044 00:58:44,000 --> 00:58:47,000 haina maana kila mtu ana kuhama, ambayo wanakumbuka ni operesheni linear. 1045 00:58:47,000 --> 00:58:50,000 Naweza kutumia muda badala ya mara kwa mara tu 1046 00:58:50,000 --> 00:58:53,000 na kufikia basi majibu kwa kasi zaidi. 1047 00:58:53,000 --> 00:58:56,000 Lakini mimi nina bei kulipa ni nini kupata kwamba utendaji ziada 1048 00:58:56,000 --> 00:58:58,000 na si kuwa na kuhama kila mtu? 1049 00:58:58,000 --> 00:59:01,000 Yeah. >> [Inaudible mwanafunzi majibu] 1050 00:59:01,000 --> 00:59:04,000 Anaweza kuongeza watu zaidi, vizuri, tatizo kwamba ni orthogonal 1051 00:59:04,000 --> 00:59:07,000 na ukweli kwamba sisi siyo shifting watu duniani. 1052 00:59:07,000 --> 00:59:11,000 Ni bado safu, hivyo kama au sisi kuhama kila mtu au si- 1053 00:59:11,000 --> 00:59:13,000 oh, mimi kuona nini maana, sawa. 1054 00:59:13,000 --> 00:59:16,000 Kweli, mimi kukubaliana na unachosema kwa kuwa karibu kama ingawa 1055 00:59:16,000 --> 00:59:19,000 tuko sasa kamwe kwenda kutumia mwanzo wa safu hii tena 1056 00:59:19,000 --> 00:59:22,000 kwa sababu kama mimi kuondoa 5, basi mimi kuondoa 7. 1057 00:59:22,000 --> 00:59:24,000 Lakini mimi tu kuweka watu kwa haki. 1058 00:59:24,000 --> 00:59:28,000 >> Ni anahisi kama mimi nina kupoteza nafasi, na hatimaye foleni yangu disintegrates ndani ya kitu! 1059 00:59:28,000 --> 00:59:31,000 hivyo tunaweza tu watu iliyomficha 1060 00:59:31,000 --> 00:59:35,000 na tunaweza kufikiri wa safu hii kwa kweli kama baadhi ya aina ya muundo mviringo, 1061 00:59:35,000 --> 00:59:38,000 lakini sisi kutumia nini operator katika C kufanya aina hiyo ya iliyomficha? 1062 00:59:38,000 --> 00:59:40,000 [Inaudible mwanafunzi majibu] >> operator modulo. 1063 00:59:40,000 --> 00:59:43,000 Itakuwa annoying kidogo kufikiri kwa jinsi gani unaweza kufanya iliyomficha 1064 00:59:43,000 --> 00:59:46,000 lakini tunaweza kufanya hivyo, na sisi inaweza kuanza kuweka watu katika kile kutumika kuwa mbele ya mstari, 1065 00:59:46,000 --> 00:59:52,000 lakini sisi kumbuka tu na hii variable kichwa kichwa ambaye halisi ya mstari kweli ni. 1066 00:59:52,000 --> 00:59:57,000 Je, iwapo, badala yake, lengo letu hatimaye, ingawa, 1067 00:59:57,000 --> 01:00:00,000 ilikuwa kuangalia namba, kama tulivyofanya hapa juu ya hatua kwa Anita, 1068 01:00:00,000 --> 01:00:02,000 lakini kweli tunataka bora ya walimwengu wote hawa? 1069 01:00:02,000 --> 01:00:05,000 Tunataka zaidi kuliko sophistication safu inaruhusu 1070 01:00:05,000 --> 01:00:09,000 sababu tunataka uwezo wa dynamically kukua muundo data. 1071 01:00:09,000 --> 01:00:12,000 Lakini hatutaki kuwa na mapumziko kwa kitu ambacho sisi alidokeza 1072 01:00:12,000 --> 01:00:15,000 katika hotuba ya kwanza ilikuwa si algorithm mojawapo, 1073 01:00:15,000 --> 01:00:17,000 ile ya utafutaji linear. 1074 01:00:17,000 --> 01:00:21,000 Ni zinageuka kuwa unaweza, kwa kweli, kufikia 1075 01:00:21,000 --> 01:00:24,000 au angalau karibu na wakati mara kwa mara, ambapo mtu kama Anita, 1076 01:00:24,000 --> 01:00:27,000 kama yeye configures data wake muundo si kwa kuwa orodha zilizounganishwa, 1077 01:00:27,000 --> 01:00:30,000 si kwa kuwa stack, si kwa kuwa foleni, anaweza, kwa kweli, 1078 01:00:30,000 --> 01:00:33,000 kuja na muundo data kwamba unamruhusu kuangalia juu ya mambo, 1079 01:00:33,000 --> 01:00:37,000 hata maneno, si tu idadi, katika kile Tutamwita wakati mara kwa mara. 1080 01:00:37,000 --> 01:00:40,000 >> Na kwa kweli, kuangalia mbele, mmoja wa psets katika darasa hili ni karibu daima 1081 01:00:40,000 --> 01:00:43,000 utekelezaji wa spellchecker, ambapo 1082 01:00:43,000 --> 01:00:46,000 sisi kukupa tena baadhi 150,000 maneno ya Kiingereza na lengo ni 1083 01:00:46,000 --> 01:00:51,000 mzigo wale katika kumbukumbu na kwa kasi na uwezo wa kujibu maswali ya aina 1084 01:00:51,000 --> 01:00:54,000 ni neno hili yameendelezwa vizuri? 1085 01:00:54,000 --> 01:00:58,000 Na ingekuwa kweli Suck kama alikuwa na iterate kupitia maneno yote 150,000 kujibu. 1086 01:00:58,000 --> 01:01:02,000 Lakini, kwa kweli, tutaweza kuona kwamba tunaweza kufanya hivyo katika muda sana, ya haraka sana. 1087 01:01:02,000 --> 01:01:06,000 Na itakuja kuhusisha kutekeleza kitu kinachoitwa meza hash, 1088 01:01:06,000 --> 01:01:09,000 na hata kama katika mtazamo wa kwanza jambo hili aitwaye meza hash ni kwenda 1089 01:01:09,000 --> 01:01:12,000 hebu kufikia haya super mwitikio wa haraka wakati, 1090 01:01:12,000 --> 01:01:18,000 zinageuka kuwa kuna ukweli katika tatizo. 1091 01:01:18,000 --> 01:01:23,000 Linapokuja wakati wa kutekeleza jambo hili aitwaye-tena, mimi nina kufanya hivyo tena. 1092 01:01:23,000 --> 01:01:25,000 Mimi nina moja tu hapa. 1093 01:01:25,000 --> 01:01:28,000 Linapokuja wakati wa kutekeleza jambo hili aitwaye meza hash, 1094 01:01:28,000 --> 01:01:30,000 sisi itawabidi kufanya uamuzi. 1095 01:01:30,000 --> 01:01:32,000 Jinsi kubwa lazima jambo hili kweli kuwa? 1096 01:01:32,000 --> 01:01:36,000 Na wakati sisi kuanza idadi ya kuingiza katika meza hii hash, 1097 01:01:36,000 --> 01:01:38,000 jinsi sisi kwenda kuhifadhi yao katika namna 1098 01:01:38,000 --> 01:01:42,000 kwamba tunaweza kupata yao nyuma nje kwa haraka kama sisi got yao katika? 1099 01:01:42,000 --> 01:01:45,000 Lakini tutaweza kuona kabla ya muda mrefu kwamba swali hili 1100 01:01:45,000 --> 01:01:48,000 wakati siku ya kuzaliwa ya kila mtu ni katika darasa itakuwa kabisa germane. 1101 01:01:48,000 --> 01:01:51,000 Ni zinageuka kuwa katika nafasi hii, sisi tumepewa watu mia kadhaa, 1102 01:01:51,000 --> 01:01:56,000 hivyo tabia mbaya kwamba sisi wawili kuwa na siku ya kuzaliwa huo pengine ni pretty juu. 1103 01:01:56,000 --> 01:01:58,000 Nini kama kulikuwa na 40 tu ya sisi katika chumba hii? 1104 01:01:58,000 --> 01:02:02,000 Je, ni tabia mbaya ya watu wawili kuzaliwa sawa? 1105 01:02:02,000 --> 01:02:04,000 [Wanafunzi] Zaidi ya 50%. 1106 01:02:04,000 --> 01:02:06,000 Yeah, zaidi ya 50%. Kwa kweli, mimi hata kuletwa chati. 1107 01:02:06,000 --> 01:02:08,000 Ni zinageuka-na hii ni kweli tu sneak preview- 1108 01:02:08,000 --> 01:02:12,000 kama kuna 58 tu ya sisi katika nafasi hii, uwezekano wa 2 wa kwetu 1109 01:02:12,000 --> 01:02:16,000 kuwa na siku ya kuzaliwa huo ni hugely juu, karibu 100%, 1110 01:02:16,000 --> 01:02:20,000 na ambayo inaenda kusababisha rundo zima la kuumiza kwa ajili yetu juu ya Jumatano. 1111 01:02:20,000 --> 01:02:24,000 >> Kwa kuwa alisema, hebu kuahirishwa hapa. Tutaweza kuona juu ya Jumatano. 1112 01:02:24,000 --> 01:02:28,000 [Applause] 1113 01:02:28,000 --> 01:02:30,000 [CS50.TV]