1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:11,137 [MUSIC KUCHEZA] 3 00:00:11,137 --> 00:00:12,220 DAVID J. Malan: All wa kulia. 4 00:00:12,220 --> 00:00:13,950 Hii ni CS50. 5 00:00:13,950 --> 00:00:18,560 Hii ni wiki tano kuendelea, na sisi kuwa na baadhi ya habari njema na baadhi ya habari mbaya. 6 00:00:18,560 --> 00:00:21,140 Hivyo habari njema ni kwamba CS50 lanserar Ijumaa hii. 7 00:00:21,140 --> 00:00:24,430 Kama ungependa kujiunga na sisi, kichwa na kawaida URL hapa. 8 00:00:24,430 --> 00:00:28,670 Habari Hata bora, hakuna hotuba huu kuja Jumatatu ya 13. 9 00:00:28,670 --> 00:00:31,970 Kidogo kidogo habari bora, Jaribio zero ni Jumatano ijayo. 10 00:00:31,970 --> 00:00:33,840 Maelezo zaidi yanaweza kuwa kupatikana katika URL hii hapa. 11 00:00:33,840 --> 00:00:36,340 Na zaidi ya wanandoa siku tutaweza kuwa na kujaza nafasi zilizoachwa wazi 12 00:00:36,340 --> 00:00:39,234 kwa upande wa vyumba kwamba sisi kuwa zimehifadhiwa. 13 00:00:39,234 --> 00:00:41,400 Bora habari ni kwamba kuna itabidi kuwa mapitio shaka kote 14 00:00:41,400 --> 00:00:43,570 kikao hiki kuja Jumatatu jioni. 15 00:00:43,570 --> 00:00:46,270 Stay tuned kwa kozi ya tovuti kwa ajili ya eneo na maelezo. 16 00:00:46,270 --> 00:00:49,290 Sehemu, hata kama ni likizo, pia kukutana na kama vizuri. 17 00:00:49,290 --> 00:00:50,490 18 00:00:50,490 --> 00:00:52,940 Best habari, hotuba Ijumaa ijayo. 19 00:00:52,940 --> 00:00:56,220 Hivyo hii ni mila sisi kuwa, kama per mtaala. 20 00:00:56,220 --> 00:00:58,100 Just-- ni kwenda kuwa ajabu. 21 00:00:58,100 --> 00:01:02,510 Wewe utaona vitu kama miundo data wakati mara kwa mara 22 00:01:02,510 --> 00:01:04,730 na meza hash na miti na anajaribu. 23 00:01:04,730 --> 00:01:07,150 Na tutaweza majadiliano juu ya matatizo siku ya kuzaliwa. 24 00:01:07,150 --> 00:01:09,440 rundo zima ya mambo watapata Ijumaa ijayo. 25 00:01:09,440 --> 00:01:11,212 26 00:01:11,212 --> 00:01:12,200 OK. 27 00:01:12,200 --> 00:01:13,190 Hata hivyo. 28 00:01:13,190 --> 00:01:17,080 >> Hivyo kukumbuka kuwa sisi tumekuwa kulenga picha hii ya nini 29 00:01:17,080 --> 00:01:18,980 ndani ya kumbukumbu ya kompyuta yetu. 30 00:01:18,980 --> 00:01:22,875 Hivyo kumbukumbu au RAM ni ambapo programu kuwepo wakati wewe mbio yao. 31 00:01:22,875 --> 00:01:25,215 Kama wewe mara mbili-click icon ya kuendesha mpango baadhi 32 00:01:25,215 --> 00:01:27,520 au mara mbili-click icon kufungua baadhi ya faili, 33 00:01:27,520 --> 00:01:30,430 ni kubeba kutoka ngumu yako kuendesha gari au gari hali imara 34 00:01:30,430 --> 00:01:34,190 ndani ya RAM, Random Access Memory, ambapo ni maisha mpaka nguvu huenda mbali, 35 00:01:34,190 --> 00:01:36,700 mfuniko mbali kufunga, au wewe kuacha mpango. 36 00:01:36,700 --> 00:01:38,960 >> Sasa kwa kuwa kumbukumbu, ya ambayo pengine 37 00:01:38,960 --> 00:01:41,950 1 gigabyte siku hizi, 2 gigabytes, au hata zaidi, 38 00:01:41,950 --> 00:01:44,420 kwa ujumla kuweka nje kwa mpango wa kupewa 39 00:01:44,420 --> 00:01:47,170 katika aina hii ya rectangular mtindo wa dhana 40 00:01:47,170 --> 00:01:50,860 ambapo tuna stack chini na rundo la mambo mengine kwa juu. 41 00:01:50,860 --> 00:01:53,140 Jambo saa ya juu sana tumeona juu ya picha hii 42 00:01:53,140 --> 00:01:55,670 lakini kamwe kabla ya kuongelea ni kinachojulikana Nakala sehemu. 43 00:01:55,670 --> 00:01:58,419 Nakala sehemu ni njia tu dhana ya kusema zeros na wale ambao 44 00:01:58,419 --> 00:02:01,150 kutunga halisi compiled mpango wako. 45 00:02:01,150 --> 00:02:03,910 >> Hivyo wakati wewe mara mbili-click Microsoft Word juu ya Mac au PC yako, 46 00:02:03,910 --> 00:02:08,030 au wakati wewe kukimbia dot kufyeka Mario juu ya Linux kompyuta katika terminal dirisha yako, 47 00:02:08,030 --> 00:02:12,460 zeros na wale ambao kutunga Neno au Mario ni kuhifadhiwa kwa muda 48 00:02:12,460 --> 00:02:16,610 katika RAM ya kompyuta yako katika kinachojulikana Nakala sehemu kwa ajili ya mpango fulani. 49 00:02:16,610 --> 00:02:19,080 Chini kwamba huenda initialized na data uninitialized. 50 00:02:19,080 --> 00:02:22,655 Hii ni mambo kama vigezo kimataifa, kwamba tumekuwa si kutumika wengi wa, 51 00:02:22,655 --> 00:02:24,910 lakini juu ya tukio tumekuwa alikuwa vigezo kimataifa 52 00:02:24,910 --> 00:02:28,819 au statically defined masharti kwamba ni ngumu coded maneno kama "hello" 53 00:02:28,819 --> 00:02:31,860 ambayo si kuchukuliwa katika kutoka kwa mtumiaji kuwa ni ngumu-coded katika mpango wako. 54 00:02:31,860 --> 00:02:34,230 >> Sasa, chini chini sisi na kinachojulikana stack. 55 00:02:34,230 --> 00:02:37,665 Na stack, hivi sasa, tumekuwa kutumia kwa ajili ya aina gani ya makusudi? 56 00:02:37,665 --> 00:02:39,706 57 00:02:39,706 --> 00:02:40,997 Nini stack zimetumika kwa ajili ya? 58 00:02:40,997 --> 00:02:41,160 Yeah? 59 00:02:41,160 --> 00:02:42,070 >> Watazamaji: Kazi. 60 00:02:42,070 --> 00:02:43,320 >> DAVID J. Malan: Kwa kazi? 61 00:02:43,320 --> 00:02:44,980 Ni katika maana gani kwa ajili ya kazi? 62 00:02:44,980 --> 00:02:48,660 >> Watazamaji: Wakati wewe piga kazi, hoja ni kunakiliwa kwenye stack. 63 00:02:48,660 --> 00:02:49,660 >> DAVID J. Malan: Hasa. 64 00:02:49,660 --> 00:02:52,650 Wakati wewe piga kazi, yake hoja ni kunakiliwa kwenye stack. 65 00:02:52,650 --> 00:02:56,330 Hivyo X yoyote au Y au A au B ya kwamba wewe ni kupita katika kazi 66 00:02:56,330 --> 00:02:58,680 ni muda kuweka juu ya kinachojulikana stack, 67 00:02:58,680 --> 00:03:02,000 tu kama moja ya Annenberg dining trays ukumbi, na pia mambo 68 00:03:02,000 --> 00:03:03,190 kama vigezo mitaa. 69 00:03:03,190 --> 00:03:06,290 Kama foo kazi yako au byta yako kazi kuwa na vigezo mitaa, 70 00:03:06,290 --> 00:03:08,602 kama temp, wale wawili kuishia juu ya stack. 71 00:03:08,602 --> 00:03:11,560 Sasa, sisi si kuzungumza sana kuhusu yao, lakini vigezo hivi mazingira 72 00:03:11,560 --> 00:03:15,690 chini tuliona wakati iliyopita wakati Mimi nilikuwa futzing katika keyboard siku moja 73 00:03:15,690 --> 00:03:20,050 na mimi kuanza kupata mambo kama argv 100 au argv 1000, 74 00:03:20,050 --> 00:03:22,320 tu elements-- mimi kusahau numbers-- lakini kwamba 75 00:03:22,320 --> 00:03:24,330 walikuwa si walidhani kuwa kupatikana kwa mimi. 76 00:03:24,330 --> 00:03:26,581 Sisi kuanza kuona baadhi alama funky juu ya screen. 77 00:03:26,581 --> 00:03:28,330 Wale walikuwa kinachojulikana mazingira vigezo 78 00:03:28,330 --> 00:03:32,390 kama mipangilio ya kwa ajili yangu mpango au kwa kompyuta yangu, si 79 00:03:32,390 --> 00:03:37,090 lisilohusiana na ya hivi karibuni mdudu kwamba sisi kujadiliwa, 80 00:03:37,090 --> 00:03:39,670 Shellshock, kwamba imekuwa inayolikabili kompyuta chache kabisa. 81 00:03:39,670 --> 00:03:42,960 >> Sasa mwisho, katika mtazamo wa leo tutaweza hatimaye kuwa juu ya lundo. 82 00:03:42,960 --> 00:03:44,864 Hii ni chunk nyingine ya kumbukumbu. 83 00:03:44,864 --> 00:03:47,030 Na kimsingi yote haya kumbukumbu ni mambo sawa. 84 00:03:47,030 --> 00:03:48,040 Ni vifaa hivyo. 85 00:03:48,040 --> 00:03:49,956 Sisi ni tu aina ya kutibu nguzo mbalimbali 86 00:03:49,956 --> 00:03:51,460 ya ka kwa malengo tofauti. 87 00:03:51,460 --> 00:03:56,540 chungu pia ni kwenda kuwa ambapo vigezo na kumbukumbu kwamba wewe ombi 88 00:03:56,540 --> 00:03:58,810 kutoka mfumo wa uendeshaji ni muda kuhifadhiwa. 89 00:03:58,810 --> 00:04:01,890 >> Lakini kuna aina ya tatizo hapa, kama picha ina maana. 90 00:04:01,890 --> 00:04:05,261 Sisi aina ya wawili meli juu ya collide. 91 00:04:05,261 --> 00:04:08,010 Kwa sababu kama wewe kutumia zaidi na zaidi ya stack, na kama sisi kuona leo 92 00:04:08,010 --> 00:04:11,800 kuendelea, kama wewe kutumia zaidi na zaidi ya chungu, hakika mambo mabaya yanaweza kutokea. 93 00:04:11,800 --> 00:04:15,054 Na hakika, sisi inaweza kutumika kwamba makusudi au bila kukusudia. 94 00:04:15,054 --> 00:04:16,970 Hivyo cliffhanger mwisho huo ilikuwa mpango huu, 95 00:04:16,970 --> 00:04:20,570 ambao hawakuwa kumtumikia yoyote kazi kusudi wengine kuliko kuonyesha 96 00:04:20,570 --> 00:04:24,750 jinsi kama guy mbaya inaweza kweli kuchukua faida ya mende katika mpango wa mtu 97 00:04:24,750 --> 00:04:28,460 na kuchukua juu ya mpango au hata zima mfumo wa kompyuta au server. 98 00:04:28,460 --> 00:04:31,660 Hivyo tu kwa mtazamo kwa ufupi, wewe taarifa kwamba kuu chini 99 00:04:31,660 --> 00:04:34,510 inachukua katika mstari amri hoja, kama per argv. 100 00:04:34,510 --> 00:04:38,480 Na ina mwito wa kazi f, kimsingi kazi Nameless kuitwa 101 00:04:38,480 --> 00:04:40,250 f, na ni kupita katika argv [1]. 102 00:04:40,250 --> 00:04:43,960 >> Kwa hiyo chochote neno aina user katika saa haraka baada ya jina mpango huu, 103 00:04:43,960 --> 00:04:49,310 na kisha kazi hii holela up juu, f, inachukua katika kamba, AKA * Char, 104 00:04:49,310 --> 00:04:51,720 kama tumeanza kujadili, na ni haki anaiita "bar." 105 00:04:51,720 --> 00:04:53,310 Lakini tunaweza kuiita kitu chochote. 106 00:04:53,310 --> 00:04:57,470 Na kisha anatangaza, ndani ya ya f, safu ya wahusika 107 00:04:57,470 --> 00:04:59,930 kuitwa c-- 12 wahusika kama. 108 00:04:59,930 --> 00:05:03,580 >> Sasa, kwa hadithi mimi alikuwa akiwaambia wakati iliyopita, ambapo katika kumbukumbu 109 00:05:03,580 --> 00:05:06,720 ni c, au ni wale 12 chars kwenda kuishia? 110 00:05:06,720 --> 00:05:07,570 Tu kuwa wazi. 111 00:05:07,570 --> 00:05:08,070 Yeah? 112 00:05:08,070 --> 00:05:08,590 >> Watazamaji: On stack. 113 00:05:08,590 --> 00:05:09,420 >> DAVID J. Malan: On stack. 114 00:05:09,420 --> 00:05:10,720 Hivyo c ni variable mitaa. 115 00:05:10,720 --> 00:05:14,079 Tunawaomba kwa chars 12 au ka 12. 116 00:05:14,079 --> 00:05:16,120 Wale ni kwenda kuishia juu ya kile kinachoitwa stack. 117 00:05:16,120 --> 00:05:18,530 Sasa hatimaye ni kazi hii nyingine hiyo ni kweli pretty muhimu, 118 00:05:18,530 --> 00:05:20,571 lakini tumekuwa si kweli kutumika wenyewe, strncopy. 119 00:05:20,571 --> 00:05:21,550 120 00:05:21,550 --> 00:05:25,200 Ina maana string nakala, lakini tu n barua, n wahusika. 121 00:05:25,200 --> 00:05:31,990 Hivyo wahusika n itakuwa kunakiliwa kutoka bar ndani ya c. 122 00:05:31,990 --> 00:05:32,980 Na jinsi wengi? 123 00:05:32,980 --> 00:05:34,110 urefu wa bar. 124 00:05:34,110 --> 00:05:36,330 Hivyo kwa maneno mengine, kwamba mstari mmoja, strncopy, 125 00:05:36,330 --> 00:05:39,500 ni kwenda nakala ufanisi bar katika kwa c. 126 00:05:39,500 --> 00:05:42,340 >> Sasa, tu aina ya wanatarajia maadili ya hadithi hii, 127 00:05:42,340 --> 00:05:44,750 nini ni uwezekano wa matatizo hapa? 128 00:05:44,750 --> 00:05:49,710 Hata ingawa sisi ni kuangalia urefu ya bar na kupita katika strncopy, 129 00:05:49,710 --> 00:05:53,145 kile gut wako akikuambia ni bado kuvunjwa kuhusu mpango huu? 130 00:05:53,145 --> 00:05:54,410 131 00:05:54,410 --> 00:05:55,220 Yeah? 132 00:05:55,220 --> 00:05:57,491 >> Watazamaji: Je, si ni pamoja na chumba for null tabia. 133 00:05:57,491 --> 00:05:59,990 DAVID J. Malan: Je, si ni pamoja na chumba for null tabia. 134 00:05:59,990 --> 00:06:02,073 Uwezekano, tofauti na katika mitindo ya kizamani sisi kufanya hata 135 00:06:02,073 --> 00:06:04,810 kuwa na kiasi kama plus 1 kwa malazi kwamba null tabia. 136 00:06:04,810 --> 00:06:06,649 Lakini ni mbaya zaidi kuliko hiyo. 137 00:06:06,649 --> 00:06:07,940 Nini kingine ni sisi kushindwa kufanya? 138 00:06:07,940 --> 00:06:08,432 Yeah? 139 00:06:08,432 --> 00:06:09,307 >> Watazamaji: [inaudible] 140 00:06:09,307 --> 00:06:15,440 141 00:06:15,440 --> 00:06:16,440 DAVID J. Malan: Perfect. 142 00:06:16,440 --> 00:06:18,490 Tumekuwa ngumu coded 12 pretty kiholela. 143 00:06:18,490 --> 00:06:19,497 144 00:06:19,497 --> 00:06:21,330 Hiyo ni si sana tatizo, lakini ukweli 145 00:06:21,330 --> 00:06:25,630 kwamba sisi siyo hata kuangalia kama urefu wa bar ni chini ya 12, 146 00:06:25,630 --> 00:06:28,530 katika kesi ambayo ni kwenda kuwa salama ya kuweka ndani ya kumbukumbu 147 00:06:28,530 --> 00:06:30,260 kuitwa c kwamba tumekuwa zilizotengwa. 148 00:06:30,260 --> 00:06:32,960 Hakika, kama bar ni kama Wahusika 20 kwa muda mrefu, 149 00:06:32,960 --> 00:06:39,010 kazi hii inaonekana kuwa kuiga Wahusika 20 kutoka bar ndani ya c, na hivyo 150 00:06:39,010 --> 00:06:41,310 kuchukua angalau 8 ka kwamba ni lazima kuwa. 151 00:06:41,310 --> 00:06:42,690 Hiyo ni maana hapa. 152 00:06:42,690 --> 00:06:44,347 >> Hivyo katika muda mfupi, kuvunjwa mpango. 153 00:06:44,347 --> 00:06:45,180 Si kama mpango kubwa. 154 00:06:45,180 --> 00:06:46,360 Labda wewe kupata kosa segmentation. 155 00:06:46,360 --> 00:06:47,651 Tumekuwa wote walikuwa na mende katika programu. 156 00:06:47,651 --> 00:06:50,196 Sisi wote wapate kuwa na mende katika programu hivi sasa. 157 00:06:50,196 --> 00:06:51,320 Lakini nini maana? 158 00:06:51,320 --> 00:06:54,390 Naam, hapa ni zoomed-katika toleo la picha ya kumbukumbu ya kompyuta yangu. 159 00:06:54,390 --> 00:06:56,230 Hii ni chini ya stack yangu. 160 00:06:56,230 --> 00:06:59,644 Na hakika, chini sana ni nini kuitwa mzazi wa mara kwa mara stack, dhana njia 161 00:06:59,644 --> 00:07:00,560 ya kusema kwamba kuu. 162 00:07:00,560 --> 00:07:03,772 Ili kila mtu aitwaye kazi f kwamba sisi ni kuzungumza juu. 163 00:07:03,772 --> 00:07:05,230 Hivyo hii ni chini ya stack. 164 00:07:05,230 --> 00:07:06,640 Return anwani ni kitu kipya. 165 00:07:06,640 --> 00:07:08,810 Ni daima imekuwa pale, daima imekuwa katika picha hiyo. 166 00:07:08,810 --> 00:07:10,440 Sisi tu kamwe kuitwa tahadhari hiyo. 167 00:07:10,440 --> 00:07:15,290 Kwa sababu ni zamu nje ya njia c kazi ni kwamba wakati kazi moja wito mwingine, 168 00:07:15,290 --> 00:07:18,780 si tu kufanya hoja ya kwamba kazi kupata kusukuma kwenye stack, 169 00:07:18,780 --> 00:07:22,470 si tu kufanya kazi ya ndani vigezo kupata kusukuma kwenye stack, 170 00:07:22,470 --> 00:07:26,820 kitu kinachoitwa anwani kurudi pia anapata kuweka kwenye stack. 171 00:07:26,820 --> 00:07:33,330 Hasa, kama wito kuu foo, ya kuu mwenyewe anwani katika kumbukumbu, ng'ombe kitu, 172 00:07:33,330 --> 00:07:38,240 ufanisi anapata kuweka kwenye stack hivyo kwamba wakati f ni kosa utekelezaji yake 173 00:07:38,240 --> 00:07:43,630 anajua wapi kuruka nyuma katika maandishi sehemu ili kuendelea utekelezaji. 174 00:07:43,630 --> 00:07:47,760 >> Hivyo kama tuko hapa conceptually, katika kuu, basi f anapata kuitwa. 175 00:07:47,760 --> 00:07:50,200 Jinsi gani f kujua ni nani kwa mkono kudhibiti nyuma? 176 00:07:50,200 --> 00:07:52,020 Naam, hii kidogo breadcrumb katika nyekundu hapa, 177 00:07:52,020 --> 00:07:54,978 kuitwa anwani kurudi, ni tu hundi, nini ni kwamba kurudi anwani? 178 00:07:54,978 --> 00:07:57,039 Oh, napenda kuruka nyuma kwa kuu hapa. 179 00:07:57,039 --> 00:07:59,080 Na kwamba ni kidogo ya kurahisisha, 180 00:07:59,080 --> 00:08:00,750 kwa sababu zeros na ndio kwa kuu ni kitaalam 181 00:08:00,750 --> 00:08:01,967 up hapa katika sehemu tech. 182 00:08:01,967 --> 00:08:03,800 Lakini hiyo ni wazo. f tu ana kujua nini 183 00:08:03,800 --> 00:08:06,680 ambapo kudhibiti hatimaye inakwenda nyuma. 184 00:08:06,680 --> 00:08:09,790 >> Lakini kompyuta njia kwa muda mrefu kuweka nje mambo 185 00:08:09,790 --> 00:08:12,320 kama vigezo mitaa na hoja ni kama hii. 186 00:08:12,320 --> 00:08:17,180 Hivyo katika juu ya picha hii katika bluu ni stack frame kwa f, hivyo wote 187 00:08:17,180 --> 00:08:19,630 ya kumbukumbu kwamba f hasa ni kutumia. 188 00:08:19,630 --> 00:08:22,990 Hivyo ipasavyo, taarifa kwamba bar ni katika picha hii. 189 00:08:22,990 --> 00:08:23,980 Bar ilikuwa hoja yake. 190 00:08:23,980 --> 00:08:27,240 Na sisi alidai kuwa hoja ya kazi kupata kusukuma kwenye stack. 191 00:08:27,240 --> 00:08:29,910 Na c, bila shaka, ni pia katika picha hii. 192 00:08:29,910 --> 00:08:33,520 >> Na tu kwa madhumuni ya notational, taarifa juu upande wa kushoto kona 193 00:08:33,520 --> 00:08:37,020 ni nini itakuwa c bracket 0 na kisha chini kidogo na haki 194 00:08:37,020 --> 00:08:38,220 ni c bracket 11. 195 00:08:38,220 --> 00:08:41,240 Hivyo kwa maneno mengine, unaweza kufikiria kwamba kuna gridi ya taifa ya ka 196 00:08:41,240 --> 00:08:44,380 kuna ya kwanza ambayo ni juu kushoto, chini ya ambayo 197 00:08:44,380 --> 00:08:48,360 ni mwisho wa wale ka 12. 198 00:08:48,360 --> 00:08:49,930 >> Lakini sasa kujaribu kufunga mbele. 199 00:08:49,930 --> 00:08:55,580 Nini ni kuhusu kutokea kama sisi kupita katika kamba bar hiyo ni muda mrefu zaidi ya c? 200 00:08:55,580 --> 00:08:59,130 Na sisi ni si kuangalia kama ni kweli kwa muda mrefu kuliko 12. 201 00:08:59,130 --> 00:09:03,146 Ambayo ni sehemu ya picha hii ni kwenda kupata overwritten na ka 0, 1, 2, 3, 202 00:09:03,146 --> 00:09:07,890 dot dot dot, 11, na kisha mbaya, 12, 13 kupitia 19? 203 00:09:07,890 --> 00:09:11,820 Nini kinaendelea kutokea hapa, kama wewe infer kutoka kuagiza 204 00:09:11,820 --> 00:09:14,790 kwamba c bracket 0 ni juu na c bracket 11 ni aina ya chini 205 00:09:14,790 --> 00:09:15,812 upande wa kulia? 206 00:09:15,812 --> 00:09:16,796 Yeah? 207 00:09:16,796 --> 00:09:19,260 >> Watazamaji: Naam, ni kwenda overwrite * Char bar. 208 00:09:19,260 --> 00:09:22,260 >> DAVID J. Malan: Yeah, inaonekana kama wewe ni kwenda overwrite * Char bar. 209 00:09:22,260 --> 00:09:26,245 Na mbaya zaidi, kama kutuma katika kweli kwa muda mrefu kamba, unaweza hata overwrite nini? 210 00:09:26,245 --> 00:09:27,460 211 00:09:27,460 --> 00:09:28,570 anwani kurudi. 212 00:09:28,570 --> 00:09:31,380 Ambayo tena, ni tu kama breadcrumb kwa kuwaambia mpango ambapo 213 00:09:31,380 --> 00:09:34,060 kwenda nyuma wakati f ni kosa kuitwa. 214 00:09:34,060 --> 00:09:37,140 >> Hivyo kile wabaya kawaida ya kufanya ni kama wao kuja hela mpango 215 00:09:37,140 --> 00:09:41,290 kwamba wao ni curious kama ni exploitable, buggy kwa namna 216 00:09:41,290 --> 00:09:43,550 kwamba yeye au yeye anaweza kuchukua faida ya kwamba mdudu, 217 00:09:43,550 --> 00:09:45,720 kwa ujumla hawana kupata haki hii mara ya kwanza. 218 00:09:45,720 --> 00:09:48,590 Wao tu kuanza kutuma, kwa mfano, masharti random katika mpango wako, 219 00:09:48,590 --> 00:09:50,260 iwe katika keyboard, au kusema ukweli wao pengine 220 00:09:50,260 --> 00:09:52,740 kuandika mpango kidogo tu moja kwa moja kuzalisha masharti, 221 00:09:52,740 --> 00:09:55,430 na kuanza banging juu ya mpango wako na kutuma katika kura ya pembejeo mbalimbali 222 00:09:55,430 --> 00:09:56,340 katika urefu tofauti. 223 00:09:56,340 --> 00:09:58,990 >> Haraka kama shambulio mpango wako, hiyo ni jambo la kushangaza. 224 00:09:58,990 --> 00:10:01,020 Kwa sababu ina maana yeye au yeye ana aligundua 225 00:10:01,020 --> 00:10:02,660 nini pengine ni kweli mdudu. 226 00:10:02,660 --> 00:10:05,830 Na kisha wanaweza kupata zaidi wajanja na kuanza kuelekeza nguvu zaidi narrowly 227 00:10:05,830 --> 00:10:07,420 juu ya jinsi ya kutumia kwamba mdudu. 228 00:10:07,420 --> 00:10:11,480 Hasa, nini yeye au anaweza kufanya ni kutuma, katika kesi bora, hello. 229 00:10:11,480 --> 00:10:12,210 Hakuna mpango kubwa. 230 00:10:12,210 --> 00:10:14,750 Ni string kwamba ni kutosha short. 231 00:10:14,750 --> 00:10:18,100 Lakini nini kama yeye au yeye zituma, na tutaweza kujumlisha ni kama, 232 00:10:18,100 --> 00:10:20,890 mashambulizi code-- hivyo zeros na wale ambao kufanya mambo 233 00:10:20,890 --> 00:10:25,150 kama rm-rf, kwamba kuondoa kila kitu kutoka gari ngumu au kutuma spam 234 00:10:25,150 --> 00:10:27,000 au kwa namna fulani kushambulia mashine? 235 00:10:27,000 --> 00:10:29,570 >> Hivyo kama kila moja ya haya barua A tu inawakilisha, 236 00:10:29,570 --> 00:10:32,380 conceptually, mashambulizi, mashambulizi, mashambulizi, mashambulizi, baadhi ya kanuni mbaya 237 00:10:32,380 --> 00:10:36,410 kwamba mtu mwingine aliandika, lakini iwapo mtu huyo ni smart kutosha 238 00:10:36,410 --> 00:10:40,790 kwa si tu ni pamoja na kila ya wale rm-RFS, lakini pia 239 00:10:40,790 --> 00:10:46,100 na ka yake michache iliyopita kuwa idadi hiyo sambamba 240 00:10:46,100 --> 00:10:50,540 kwa anwani ya yake au mashambulizi yake mwenyewe code 241 00:10:50,540 --> 00:10:53,820 kwamba yeye au yeye kupita katika tu kwa kutoa hiyo kwa haraka, 242 00:10:53,820 --> 00:10:58,760 unaweza ufanisi hila kompyuta ndani ya noticing wakati f ni kosa utekelezaji, 243 00:10:58,760 --> 00:11:02,400 oh, ni wakati kwa ajili yangu kuruka nyuma nyekundu kurudi mahali. 244 00:11:02,400 --> 00:11:06,070 Lakini kwa sababu yeye au yeye ana namna fulani walipishana kwamba kurudi anwani 245 00:11:06,070 --> 00:11:09,602 na idadi yao wenyewe, na wao uko smart kutosha 246 00:11:09,602 --> 00:11:11,560 kwa uliyoisanidi kwamba idadi ya rejea, kama wewe 247 00:11:11,560 --> 00:11:13,740 kuona katika top super mkono wa kushoto kona kuna, 248 00:11:13,740 --> 00:11:18,020 anwani halisi katika kompyuta kumbukumbu ya baadhi ya mashambulizi kanuni zao, 249 00:11:18,020 --> 00:11:21,740 guy mbaya inaweza hila kompyuta ndani ya utekelezaji code yake mwenyewe. 250 00:11:21,740 --> 00:11:23,700 >> Na kwamba kanuni, tena, inaweza kuwa kitu chochote. 251 00:11:23,700 --> 00:11:26,120 Ni kwa ujumla aitwaye shell code, ambayo ni tu 252 00:11:26,120 --> 00:11:29,030 njia ya kusema kwamba siyo kwa ujumla kitu rahisi kama rm-rf. 253 00:11:29,030 --> 00:11:32,340 Ni kweli kitu kama Bash, au mpango halisi kwamba inampa 254 00:11:32,340 --> 00:11:37,230 au kudhibiti yake programu kutekeleza kitu kingine chochote kwamba wanataka. 255 00:11:37,230 --> 00:11:40,210 Hivyo katika muda mfupi, hii yote inatokana na ukweli rahisi 256 00:11:40,210 --> 00:11:44,490 kwamba hii mdudu kushiriki si kuangalia mipaka ya safu yako. 257 00:11:44,490 --> 00:11:47,250 Na kwa sababu njia kompyuta kazi ni kwamba wao 258 00:11:47,250 --> 00:11:49,430 kutumia stack kutoka ufanisi, conceptually, 259 00:11:49,430 --> 00:11:54,830 chini juu juu, lakini basi mambo kushinikiza kwenye stack kukua juu chini, 260 00:11:54,830 --> 00:11:56,624 hii ni incredibly tatizo. 261 00:11:56,624 --> 00:11:58,290 Sasa, kuna njia ya kufanya kazi ya kuzunguka hili. 262 00:11:58,290 --> 00:12:00,800 Na kusema ukweli, kuna lugha na ambayo kwa kazi ya kuzunguka hili. 263 00:12:00,800 --> 00:12:03,100 Java ni kinga, kwa mfano, kwa hasa katika suala hili. 264 00:12:03,100 --> 00:12:04,110 Kwa sababu hawana kuwapa kuyatumia. 265 00:12:04,110 --> 00:12:05,943 Hawana kukupa kumbukumbu anwani moja kwa moja. 266 00:12:05,943 --> 00:12:08,560 Hivyo kwa nguvu hii kwamba tuna kwa kugusa kitu chochote katika kumbukumbu 267 00:12:08,560 --> 00:12:11,580 sisi wanataka kuja, admittedly, hatari kubwa. 268 00:12:11,580 --> 00:12:12,430 >> Hivyo kuweka jicho nje. 269 00:12:12,430 --> 00:12:14,596 Kama, kusema ukweli, katika kipindi cha miezi au miaka ijayo, wakati wowote 270 00:12:14,596 --> 00:12:17,740 wewe kusoma kuhusu baadhi unyonyaji ya mpango au server, 271 00:12:17,740 --> 00:12:22,370 kama wewe milele kuona ladha ya kitu kama mashambulizi buffer kufurika, 272 00:12:22,370 --> 00:12:25,390 au stack kufurika ni aina nyingine ya mashambulizi, sawa katika roho, 273 00:12:25,390 --> 00:12:28,770 vile kuwahamasisha tovuti ya jina, kama wewe kujua, 274 00:12:28,770 --> 00:12:33,170 ni wote kuzungumza juu ya tu wingi na ukubwa wa baadhi ya tabia 275 00:12:33,170 --> 00:12:36,200 safu au safu baadhi zaidi kwa ujumla. 276 00:12:36,200 --> 00:12:38,822 Maswali yoyote, basi, juu ya hili? 277 00:12:38,822 --> 00:12:39,780 Je, si kujaribu hili nyumbani. 278 00:12:39,780 --> 00:12:41,620 279 00:12:41,620 --> 00:12:42,300 >> Wote haki. 280 00:12:42,300 --> 00:12:47,270 Hivyo malloc hivi sasa imekuwa wetu mpya rafiki katika kwamba tunaweza kutenga kumbukumbu 281 00:12:47,270 --> 00:12:50,540 kwamba hatuna lazima kujua katika mapema kwamba tunataka hivyo hatuna 282 00:12:50,540 --> 00:12:52,920 na kanuni ngumu katika yetu namba mpango kama 12. 283 00:12:52,920 --> 00:12:55,550 Mara baada ya user anatueleza jinsi gani data yeye au yeye anataka kwa pembejeo, 284 00:12:55,550 --> 00:12:58,000 tunaweza malloc kumbukumbu kwamba mengi. 285 00:12:58,000 --> 00:13:01,484 >> Hivyo malloc ni zamu nje, kwa kiwango tumekuwa kutumia hiyo, 286 00:13:01,484 --> 00:13:03,900 wazi mara ya mwisho, na kisha nyie wamekuwa kutumia 287 00:13:03,900 --> 00:13:08,160 kwa GetString kutojua kwa wiki kadhaa, yote ya kumbukumbu malloc ya 288 00:13:08,160 --> 00:13:09,820 linatokana na kinachojulikana chungu. 289 00:13:09,820 --> 00:13:13,852 Na hii ni kwa nini GetString, kwa mfano, unaweza kutenga kumbukumbu dynamically 290 00:13:13,852 --> 00:13:16,060 bila kujua nini wewe ni kwenda aina mapema, 291 00:13:16,060 --> 00:13:21,520 mkono wewe nyuma pointer kwa kuwa kumbukumbu, na kwamba kumbukumbu ni bado yako ya kutunza, 292 00:13:21,520 --> 00:13:24,080 hata baada ya GetString anarudi. 293 00:13:24,080 --> 00:13:27,450 Kwa sababu kukumbuka baada ya yote stack ni mara kwa mara kwenda juu na chini, 294 00:13:27,450 --> 00:13:27,950 juu na chini. 295 00:13:27,950 --> 00:13:30,230 Na kama hivi karibuni kama unaendelea chini, hiyo ina maana yoyote kumbukumbu 296 00:13:30,230 --> 00:13:33,030 kazi hii kutumika lazima si kutumiwa na mtu mwingine yeyote. 297 00:13:33,030 --> 00:13:34,570 Ni maadili takataka sasa. 298 00:13:34,570 --> 00:13:36,120 >> Lakini chungu ni up hapa. 299 00:13:36,120 --> 00:13:39,360 Na nini ni nzuri kuhusu malloc ni kwamba wakati malloc kutenga kumbukumbu hadi hapa, 300 00:13:39,360 --> 00:13:42,070 ni si wanashikiliwa, kwa sehemu kubwa, na stack. 301 00:13:42,070 --> 00:13:46,000 Na hivyo kazi yoyote wanaweza kupata kumbukumbu ambayo imekuwa malloc'd, 302 00:13:46,000 --> 00:13:49,120 hata kwa kazi kama GetString, hata baada ya kurudi huko. 303 00:13:49,120 --> 00:13:51,700 >> Sasa, kinyume cha malloc ni bure. 304 00:13:51,700 --> 00:13:53,900 Na hakika, utawala wewe haja ya kuanza kupitisha 305 00:13:53,900 --> 00:13:58,950 ni yoyote, yoyote, wakati wowote wewe kutumia malloc lazima wewe mwenyewe kutumia bure, hatimaye, 306 00:13:58,950 --> 00:14:00,280 juu ya kwamba pointer huo. 307 00:14:00,280 --> 00:14:03,289 Muda wote huu tumekuwa kuandika buggy, buggy code, kwa sababu nyingi. 308 00:14:03,289 --> 00:14:05,580 Lakini moja ya ambayo imekuwa kutumia maktaba CS50, ambayo 309 00:14:05,580 --> 00:14:09,010 yenyewe ni kwa makusudi buggy, ni uvujaji kumbukumbu. 310 00:14:09,010 --> 00:14:11,410 Wakati wowote umetumia GetString katika wiki chache zilizopita 311 00:14:11,410 --> 00:14:13,870 sisi ni kuuliza uendeshaji mfumo, Linux, kwa ajili ya kumbukumbu. 312 00:14:13,870 --> 00:14:15,780 Na una kamwe mara moja kutokana na nyuma. 313 00:14:15,780 --> 00:14:17,730 Na hii si, katika mazoezi, jambo zuri. 314 00:14:17,730 --> 00:14:20,330 >> Na Valgrind, mmoja wa zana ilianzisha katika pset 4, 315 00:14:20,330 --> 00:14:22,900 ni wote kuhusu kusaidia sasa kupata mende kama hiyo. 316 00:14:22,900 --> 00:14:27,060 Bali nashiriki kwa pset 4 huna haja ya kutumia maktaba CS50 au GetString. 317 00:14:27,060 --> 00:14:31,220 Hivyo mende yoyote kuhusiana na kumbukumbu ni hatimaye kwenda kuwa yako mwenyewe. 318 00:14:31,220 --> 00:14:34,060 >> Hivyo malloc ni zaidi ya rahisi kwa ajili ya lengo hili. 319 00:14:34,060 --> 00:14:37,420 Tunaweza kweli sasa kutatua matatizo kimsingi tofauti, 320 00:14:37,420 --> 00:14:41,640 na kimsingi kutatua matatizo zaidi ufanisi kama kwa wiki zero ya ahadi. 321 00:14:41,640 --> 00:14:44,720 Hivi sasa hii ni sexiest muundo data tumekuwa alikuwa. 322 00:14:44,720 --> 00:14:47,804 Na kwa muundo data I just maana njia ya kufafanua kumbukumbu 323 00:14:47,804 --> 00:14:50,720 kwa njia ambayo inakwenda zaidi ya kusema tu, hii ni int, hii ni char. 324 00:14:50,720 --> 00:14:52,930 Tunaweza kuanza nguzo mambo pamoja. 325 00:14:52,930 --> 00:14:54,460 >> Hivyo safu inaonekana kama hii. 326 00:14:54,460 --> 00:14:57,270 Na nini ilikuwa muhimu katika kuhusu safu ni kwamba anatoa wewe 327 00:14:57,270 --> 00:14:59,724 nyuma-ya-nyuma chunks ya kumbukumbu, ambayo kila mmoja 328 00:14:59,724 --> 00:15:02,765 ni kwenda kuwa ya aina moja, int, int, int, int, au char, char, char, 329 00:15:02,765 --> 00:15:03,330 char. 330 00:15:03,330 --> 00:15:04,496 Lakini kuna downsides wachache. 331 00:15:04,496 --> 00:15:06,570 Hii kwa mfano, ni safu ya ukubwa sita. 332 00:15:06,570 --> 00:15:10,650 Tuseme wewe kujaza safu hii na sita namba na kisha, kwa sababu yoyote, 333 00:15:10,650 --> 00:15:13,187 user yako anataka kuwapa wewe idadi ya saba. 334 00:15:13,187 --> 00:15:14,020 Ambapo gani unaweza kuweka it? 335 00:15:14,020 --> 00:15:15,490 336 00:15:15,490 --> 00:15:18,990 >> Nini suluhisho kama una kuundwa safu juu ya stack, 337 00:15:18,990 --> 00:15:22,030 kwa mfano, tu na wiki mbili nukuu kwamba sisi kuletwa, 338 00:15:22,030 --> 00:15:23,730 ya mabano mraba na idadi ndani? 339 00:15:23,730 --> 00:15:25,160 340 00:15:25,160 --> 00:15:27,260 Naam, nimepata sita idadi katika masanduku hayo. 341 00:15:27,260 --> 00:15:28,530 Gani hisia zako kuwa? 342 00:15:28,530 --> 00:15:29,973 Ambapo unataka kuiweka? 343 00:15:29,973 --> 00:15:30,860 >> Watazamaji: [inaudible] 344 00:15:30,860 --> 00:15:31,315 >> DAVID J. Malan: Sorry? 345 00:15:31,315 --> 00:15:32,380 >> Watazamaji: Weka ya mwisho. 346 00:15:32,380 --> 00:15:33,796 >> DAVID J. Malan: Weka ya mwisho. 347 00:15:33,796 --> 00:15:35,880 Hivyo tu juu ya upande wa kulia, nje ya boksi hii. 348 00:15:35,880 --> 00:15:38,710 Ambayo itakuwa nzuri, lakini anarudi nje huwezi kufanya hivyo. 349 00:15:38,710 --> 00:15:41,350 Kwa sababu kama umefanya si aliuliza kwa chunk hii ya kumbukumbu, 350 00:15:41,350 --> 00:15:44,490 inaweza kuwa kwa bahati mbaya kwamba hii ni kutumiwa na baadhi variable nyingine 351 00:15:44,490 --> 00:15:45,030 kabisa. 352 00:15:45,030 --> 00:15:49,210 Fikiria nyuma wiki au hivyo wakati sisi kuweka nje Zamyla na Davin na Gabe ya majina 353 00:15:49,210 --> 00:15:49,930 katika kumbukumbu. 354 00:15:49,930 --> 00:15:51,638 Walikuwa literally nyuma kwa nyuma kwa nyuma. 355 00:15:51,638 --> 00:15:53,550 Hivyo tunaweza si lazima imani kwamba kila ya 356 00:15:53,550 --> 00:15:55,800 zaidi ya hapa ni inapatikana kwa ajili yangu kutumia. 357 00:15:55,800 --> 00:15:56,990 >> Hivyo kile kingine inaweza kufanya nini? 358 00:15:56,990 --> 00:16:00,282 Naam, mara moja kutambua wewe haja safu ya ukubwa saba, 359 00:16:00,282 --> 00:16:02,490 unaweza kujenga tu safu ya ukubwa saba kisha kutumia 360 00:16:02,490 --> 00:16:05,950 a kwa kitanzi au kitanzi wakati, nakala yake katika safu mpya, 361 00:16:05,950 --> 00:16:09,680 na kisha kwa namna fulani tu kujikwamua safu hii au tu kuacha kutumia hiyo. 362 00:16:09,680 --> 00:16:12,130 Lakini si kwamba hasa ufanisi. 363 00:16:12,130 --> 00:16:15,340 Kwa kifupi, arrays si basi wewe dynamically resize. 364 00:16:15,340 --> 00:16:17,900 >> Hivyo kwa upande mmoja, kupata upatikanaji random, ambayo ni ya ajabu. 365 00:16:17,900 --> 00:16:20,108 Kwa sababu unatuwezesha kufanya mambo kama kugawanya na kushinda, 366 00:16:20,108 --> 00:16:23,100 search binary, ambayo yote tumekuwa aliyesema kuhusu juu ya screen hapa. 367 00:16:23,100 --> 00:16:24,950 Lakini wewe mwenyewe rangi katika kona. 368 00:16:24,950 --> 00:16:27,810 Haraka kama wewe hit mwisho wa safu yako, 369 00:16:27,810 --> 00:16:29,980 una kufanya sana operesheni ghali 370 00:16:29,980 --> 00:16:33,910 au kuandika rundo zima la code kwa sasa kukabiliana na tatizo hilo. 371 00:16:33,910 --> 00:16:36,680 >> Basi nini kama badala tulikuwa kitu kinachoitwa orodha, 372 00:16:36,680 --> 00:16:38,820 au wanaohusishwa orodha hasa? 373 00:16:38,820 --> 00:16:41,930 Nini kama badala ya kuwa rectangles nyuma kwa nyuma kwa nyuma, 374 00:16:41,930 --> 00:16:45,730 tuna rectangles kwamba kuondoka kidogo kidogo ya wiggle chumba katika kati yao? 375 00:16:45,730 --> 00:16:49,670 Na hata kama nimekuwa inayotolewa hii picha au ilichukuliwa picha hii 376 00:16:49,670 --> 00:16:54,696 kutoka kwa mmoja wa maandiko hapa kuwa nyuma ya nyuma kwa nyuma utaratibu sana, katika hali halisi, 377 00:16:54,696 --> 00:16:56,820 moja ya rectangles wale inaweza kuwa hapa up katika kumbukumbu. 378 00:16:56,820 --> 00:16:58,028 Mmoja wao inaweza kuwa juu hapa. 379 00:16:58,028 --> 00:17:00,420 Mmoja wao inaweza kuwa juu hapa, zaidi ya hapa, na kadhalika. 380 00:17:00,420 --> 00:17:02,910 >> Lakini nini kama sisi akauchomoa, katika kesi hii, mishale 381 00:17:02,910 --> 00:17:05,650 kwamba kwa namna fulani kuhusisha haya mistatili pamoja? 382 00:17:05,650 --> 00:17:08,170 Hakika, tumeona kiufundi mwili wa mshale. 383 00:17:08,170 --> 00:17:09,839 384 00:17:09,839 --> 00:17:13,710 Nini sisi kutumika katika hivi karibuni siku hiyo, chini ya Hood, 385 00:17:13,710 --> 00:17:15,210 ni mwakilishi wa arrow? 386 00:17:15,210 --> 00:17:16,290 387 00:17:16,290 --> 00:17:17,349 pointer, haki? 388 00:17:17,349 --> 00:17:19,780 >> Basi nini kama, badala ya tu kuhifadhi namba, 389 00:17:19,780 --> 00:17:23,130 kama 9, 17, 22, 26, 34, nini kama sisi kuhifadhiwa si 390 00:17:23,130 --> 00:17:27,079 tu idadi lakini pointer karibu na kila idadi kama hiyo? 391 00:17:27,079 --> 00:17:30,690 Hivyo kwamba kiasi kama ungependa thread sindano kwa njia ya rundo zima la kitambaa, 392 00:17:30,690 --> 00:17:32,950 mambo kwa namna fulani tying pamoja, vile vile unaweza 393 00:17:32,950 --> 00:17:35,550 sisi na kuyatumia, kama incarnated kwa mishale hapa, 394 00:17:35,550 --> 00:17:38,550 aina ya weave pamoja rectangles haya ya mtu binafsi 395 00:17:38,550 --> 00:17:41,780 kwa kutumia vyema pointer karibu na kila idadi hiyo 396 00:17:41,780 --> 00:17:46,065 anazungumzia baadhi ya idadi ya pili yake, anazungumzia, kwa upande wake, baadhi ya idadi ijayo? 397 00:17:46,065 --> 00:17:47,940 Hivyo kwa maneno mengine, nini kama sisi kweli alitaka 398 00:17:47,940 --> 00:17:49,820 kutekeleza kitu kama hii? 399 00:17:49,820 --> 00:17:53,610 Naam kwa bahati mbaya, mistatili haya, angalau moja na 9, 17, 22, 400 00:17:53,610 --> 00:17:57,040 na kadhalika, haya ni tena mraba nzuri na namba moja. 401 00:17:57,040 --> 00:17:59,960 chini, mstatili chini 9, kwa mfano, 402 00:17:59,960 --> 00:18:04,330 inawakilisha kile lazima kuwa pointer, 32 bits. 403 00:18:04,330 --> 00:18:09,460 Sasa, mimi nina bado na ufahamu wa aina yoyote data katika C kwamba anatoa si tu int 404 00:18:09,460 --> 00:18:11,630 lakini pointer kabisa. 405 00:18:11,630 --> 00:18:15,020 >> Basi nini ufumbuzi kama tunataka mzulia jibu yetu wenyewe na hii? 406 00:18:15,020 --> 00:18:15,760 Yeah? 407 00:18:15,760 --> 00:18:16,640 >> Watazamaji: [inaudible] 408 00:18:16,640 --> 00:18:17,360 >> DAVID J. Malan: Nini hiyo? 409 00:18:17,360 --> 00:18:17,880 >> Watazamaji: muundo mpya. 410 00:18:17,880 --> 00:18:19,590 >> DAVID J. Malan: Yeah, hivyo kwa nini si sisi kujenga muundo mpya, 411 00:18:19,590 --> 00:18:20,920 au katika C, struct? 412 00:18:20,920 --> 00:18:25,990 Tumeona structs kabla ya, kama kwa ufupi, ambapo sisi kushughulikiwa na muundo mwanafunzi 413 00:18:25,990 --> 00:18:27,780 kama huyo, ambaye alikuwa jina na nyumba. 414 00:18:27,780 --> 00:18:31,980 Katika pset 3 kuzuka unaweza kutumika zima rundo la structs-- GRect na GOvals 415 00:18:31,980 --> 00:18:34,810 kwamba Stanford kuundwa kwa habari nguzo ya pamoja. 416 00:18:34,810 --> 00:18:38,580 Basi nini kama sisi kuchukua wazo hili hili la maneno "typedef" na "struct," 417 00:18:38,580 --> 00:18:42,890 na kisha baadhi mwanafunzi maalum stuff, na kufuka hii katika yafuatayo: 418 00:18:42,890 --> 00:18:46,210 typedef struct nodi node-- na ni tu generic sana sayansi ya kompyuta 419 00:18:46,210 --> 00:18:49,980 mrefu kwa ajili ya kitu katika muundo data, chombo katika muundo data. 420 00:18:49,980 --> 00:18:53,900 node mimi kudai ni kwenda kuwa na int n, kabisa moja kwa moja, 421 00:18:53,900 --> 00:18:58,810 na kisha kidogo zaidi isiyoeleweka kirahisi, line hii ya pili, struct nodi * ijayo. 422 00:18:58,810 --> 00:19:01,300 Lakini katika suala chini ya kiufundi, ni nini kwamba mstari wa pili 423 00:19:01,300 --> 00:19:02,980 wa kanuni ndani ya braces curly? 424 00:19:02,980 --> 00:19:03,737 Yeah? 425 00:19:03,737 --> 00:19:04,851 >> Watazamaji: [inaudible] 426 00:19:04,851 --> 00:19:06,600 DAVID J. Malan: A pointer nodi nyingine. 427 00:19:06,600 --> 00:19:09,910 Hivyo admittedly, syntax kidogo cryptic. 428 00:19:09,910 --> 00:19:13,250 Lakini kama wewe kusoma literally, pili ni jina la kutofautiana. 429 00:19:13,250 --> 00:19:14,410 Ni aina yake data nini? 430 00:19:14,410 --> 00:19:18,206 Ni verbose kidogo wakati huu, lakini ni ya aina struct nodi *. 431 00:19:18,206 --> 00:19:22,960 Wakati wowote tumeona kitu nyota, kwamba ina maana ni pointer kwa ajili ya aina kwamba data. 432 00:19:22,960 --> 00:19:26,810 Hivyo ijayo ni inaonekana pointer kwa struct nodi. 433 00:19:26,810 --> 00:19:28,310 >> Sasa, ni nini struct nodi? 434 00:19:28,310 --> 00:19:31,044 Naam, taarifa yenu kuona wale maneno yale yale katika haki juu. 435 00:19:31,044 --> 00:19:33,960 Na hakika, wewe pia kuona neno "Node" chini hapa chini kushoto. 436 00:19:33,960 --> 00:19:35,640 Na hii ni kweli tu urahisi. 437 00:19:35,640 --> 00:19:39,930 Taarifa kwamba katika yetu mwanafunzi ufafanuzi kuna neno "mwanafunzi" mara moja tu. 438 00:19:39,930 --> 00:19:42,510 Na hiyo ni kwa sababu mwanafunzi hicho kilikuwa ni si binafsi rejea. 439 00:19:42,510 --> 00:19:45,340 Kuna kitu ndani ya mwanafunzi kwamba mahitaji kwa uhakika na mwanafunzi mwingine, 440 00:19:45,340 --> 00:19:45,610 persay. 441 00:19:45,610 --> 00:19:47,630 Hiyo itakuwa aina ya weird katika ulimwengu wa kweli. 442 00:19:47,630 --> 00:19:50,880 >> Lakini pamoja na node katika wanaohusishwa orodha, sisi kufanya unataka node 443 00:19:50,880 --> 00:19:53,970 kuwa rejea kwa sawa kitu. 444 00:19:53,970 --> 00:19:57,900 Na hivyo taarifa ya mabadiliko ya hapa ni si tu nini ndani braces curly. 445 00:19:57,900 --> 00:20:00,800 Lakini sisi kuongeza neno "node" saa ya juu kama vizuri kama 446 00:20:00,800 --> 00:20:02,930 akiongeza kuwa chini badala ya "mwanafunzi." 447 00:20:02,930 --> 00:20:06,000 Na hii ni tu kina ya kiufundi hivyo tena kuwa, muundo yako data 448 00:20:06,000 --> 00:20:11,380 inaweza kuwa self-rejea, ili node unaweza kumweka kwa node mwingine vile. 449 00:20:11,380 --> 00:20:13,840 >> Hivyo ni nini hii hatimaye kwenda maana kwa ajili yetu? 450 00:20:13,840 --> 00:20:17,560 Naam, moja, mambo haya ndani ya ni yaliyomo ya node yetu. 451 00:20:17,560 --> 00:20:19,360 Jambo hili hapa juu, haki ya juu, ni hivyo tu 452 00:20:19,360 --> 00:20:20,860 tena kuwa, tunaweza kutaja wenyewe. 453 00:20:20,860 --> 00:20:23,401 Na kisha mambo yttersta, ingawa node ni mpya mrefu, 454 00:20:23,401 --> 00:20:25,500 labda, bado huo kama mwanafunzi na kile 455 00:20:25,500 --> 00:20:27,520 Ilikuwa chini ya Hood katika SPL. 456 00:20:27,520 --> 00:20:31,095 >> Hivyo kama sisi sasa alitaka kuanza utekelezaji wa orodha hii wanaohusishwa, 457 00:20:31,095 --> 00:20:33,220 jinsi gani sisi kutafsiri kitu kama hii na kanuni? 458 00:20:33,220 --> 00:20:35,350 Naam, hebu tu kuona mfano wa mpango huo 459 00:20:35,350 --> 00:20:36,840 kwa kweli matumizi ya orodha wanaohusishwa. 460 00:20:36,840 --> 00:20:40,870 Miongoni mwa leo usambazaji code ni programu inayoitwa Orodha ya Zero. 461 00:20:40,870 --> 00:20:44,980 Na kama mimi kukimbia hii mimi umba super GUI rahisi, Graphical User Interface, 462 00:20:44,980 --> 00:20:46,460 lakini ni kweli tu printf. 463 00:20:46,460 --> 00:20:50,930 Na sasa nimepata kutokana na mwenyewe menu chache options-- Futa, Insert, Search, 464 00:20:50,930 --> 00:20:51,750 na Traverse. 465 00:20:51,750 --> 00:20:52,630 Na kuacha. 466 00:20:52,630 --> 00:20:55,970 Hizi ni shughuli ya kawaida tu juu ya muundo data inayojulikana kama orodha ya kiungo. 467 00:20:55,970 --> 00:20:58,409 >> Sasa, Futa ni kwenda kufuta idadi kutoka kwenye orodha. 468 00:20:58,409 --> 00:21:00,200 Insert kwenda kuongeza idadi ya orodha. 469 00:21:00,200 --> 00:21:02,181 Search ni kwenda kuangalia kwa idadi katika orodha. 470 00:21:02,181 --> 00:21:04,930 Na traverse ni njia tu dhana ya kusema, kutembea kwa njia ya orodha, 471 00:21:04,930 --> 00:21:06,245 magazeti ya nje, lakini hiyo ni yake. 472 00:21:06,245 --> 00:21:07,720 Je, si mabadiliko hayo kwa njia yoyote. 473 00:21:07,720 --> 00:21:08,570 >> Basi hebu jaribu hii. 474 00:21:08,570 --> 00:21:10,160 Hebu kwenda mbele na aina 2. 475 00:21:10,160 --> 00:21:12,710 Na kisha mimi nina kwenda kuingiza simu, kusema 9. 476 00:21:12,710 --> 00:21:13,620 Kuingia. 477 00:21:13,620 --> 00:21:17,480 Na sasa mpango wangu ni tu iliyowekwa kusema, orodha ni sasa 9. 478 00:21:17,480 --> 00:21:20,190 Sasa, kama mimi kwenda mbele na je Ingiza tena, basi 479 00:21:20,190 --> 00:21:23,680 mimi kwenda mbele na zoom nje na aina katika 17. 480 00:21:23,680 --> 00:21:25,770 Sasa orodha yangu ni 9, kisha 17. 481 00:21:25,770 --> 00:21:27,750 Kama mimi kufanya kuingiza tena, hebu ruka moja. 482 00:21:27,750 --> 00:21:32,400 Badala ya 22, kama per picha tumekuwa wamekuwa kuangalia hapa, napenda kuruka mbele 483 00:21:32,400 --> 00:21:34,630 na kuingiza 26 ijayo. 484 00:21:34,630 --> 00:21:36,230 Hivyo mimi nina kwenda aina 26. 485 00:21:36,230 --> 00:21:37,755 orodha ni kama mimi kutarajia. 486 00:21:37,755 --> 00:21:40,630 Lakini sasa, tu kuona kama kanuni hii ni kwenda kuwa rahisi, napenda sasa 487 00:21:40,630 --> 00:21:43,520 aina 22, ambayo angalau conceptually, kama sisi ni 488 00:21:43,520 --> 00:21:46,520 kushika hii namna, ambayo ni kweli kwenda kuwa lengo lingine sasa hivi, 489 00:21:46,520 --> 00:21:48,690 anatakiwa kwenda katika kati ya 17 na 26. 490 00:21:48,690 --> 00:21:50,270 Hivyo mimi hit Enter. 491 00:21:50,270 --> 00:21:51,380 Hakika, kwamba kazi. 492 00:21:51,380 --> 00:21:54,950 Na hivyo sasa napenda kuingiza mwisho, kwa picha, 34. 493 00:21:54,950 --> 00:21:55,450 >> Wote haki. 494 00:21:55,450 --> 00:21:58,980 Hivyo kwa sasa napenda inasema kuwa Kufuta na Traverse na Tafuta kufanya, 495 00:21:58,980 --> 00:21:59,760 kwa kweli, kazi. 496 00:21:59,760 --> 00:22:04,180 Kwa kweli, kama mimi kufanya kukimbia Search, hebu kutafuta namba 22, kuingia. 497 00:22:04,180 --> 00:22:05,010 Ni kupatikana 22. 498 00:22:05,010 --> 00:22:07,580 Hivyo kwamba ni nini hii mpango Orodha ya Zero gani. 499 00:22:07,580 --> 00:22:10,230 >> Lakini nini ni kweli kwenda juu ya kwamba zana hii? 500 00:22:10,230 --> 00:22:14,530 Naam, kwanza nipate kuwa, na kwa kweli Mimi kuwa, faili inayoitwa list0.h. 501 00:22:14,530 --> 00:22:16,540 502 00:22:16,540 --> 00:22:20,690 Na mahali fulani katika kuna hii line, typedef, struct nodi, 503 00:22:20,690 --> 00:22:24,850 basi nina braces yangu curly, int n, na kisha struct-- nini ilikuwa ufafanuzi? 504 00:22:24,850 --> 00:22:26,530 505 00:22:26,530 --> 00:22:28,545 Struct nodi ijayo. 506 00:22:28,545 --> 00:22:29,920 507 00:22:29,920 --> 00:22:31,045 Hivyo tunahitaji nyota. 508 00:22:31,045 --> 00:22:33,420 Sasa kitaalam sisi kupata katika tabia ya kuchora hapa. 509 00:22:33,420 --> 00:22:35,670 Unaweza kuona vitabu vya kiada na marejeo online kufanya hivyo huko. 510 00:22:35,670 --> 00:22:36,660 Ni functionally sawa. 511 00:22:36,660 --> 00:22:37,980 Kwa kweli, hii ni kidogo zaidi ya kawaida. 512 00:22:37,980 --> 00:22:40,563 Lakini mimi itabidi kuwa thabiti na kile sisi alifanya mara ya mwisho na kufanya hili. 513 00:22:40,563 --> 00:22:42,350 Na kisha mwisho, mimi nina kwenda kufanya hivyo. 514 00:22:42,350 --> 00:22:45,550 >> Hivyo katika header ya faili mahali fulani, katika list0.h 515 00:22:45,550 --> 00:22:49,200 leo ni hii ufafanuzi struct, na labda baadhi ya mambo mengine. 516 00:22:49,200 --> 00:22:52,580 Wakati huo huo katika list0c kuna kwenda kuwa mambo kadhaa. 517 00:22:52,580 --> 00:22:54,740 Lakini sisi ni kwenda tu kuanza na si kumaliza hii. 518 00:22:54,740 --> 00:22:59,690 List0.h ni faili nataka ni pamoja na katika wangu C file. 519 00:22:59,690 --> 00:23:03,910 Na kisha wakati fulani mimi nina kwenda na int, kuu, utupu. 520 00:23:03,910 --> 00:23:06,530 Na kisha mimi nina kwenda na baadhi ya-do hapa. 521 00:23:06,530 --> 00:23:10,620 Mimi pia kwenda na mfano, kama batili, search, int, 522 00:23:10,620 --> 00:23:13,610 n, kusudi lake katika maisha ni kutafuta kipengele. 523 00:23:13,610 --> 00:23:18,310 Na kisha chini hapa mimi kudai katika code ya leo, batili, search, int, n, 524 00:23:18,310 --> 00:23:21,020 hakuna semicolon lakini wazi braces curly. 525 00:23:21,020 --> 00:23:25,049 Na sasa mimi nataka namna fulani kutafuta kwa kipengele katika orodha hii. 526 00:23:25,049 --> 00:23:27,340 Lakini hatuna kutosha habari juu ya screen bado. 527 00:23:27,340 --> 00:23:29,800 Nina si kweli kuwakilishwa orodha yenyewe. 528 00:23:29,800 --> 00:23:33,070 Hivyo njia moja tunaweza kutekeleza orodha wanaohusishwa katika mpango 529 00:23:33,070 --> 00:23:37,520 ni mimi aina ya kutaka kufanya kitu kama kutangaza wanaohusishwa orodha hapa. 530 00:23:37,520 --> 00:23:40,520 Kwa unyenyekevu, mimi nina kwenda kufanya hii ya kimataifa, ingawa kwa ujumla sisi 531 00:23:40,520 --> 00:23:41,645 haipaswi kufanya hii sana. 532 00:23:41,645 --> 00:23:43,260 Lakini itakuwa kurahisisha mfano huu. 533 00:23:43,260 --> 00:23:45,890 Hivyo nataka kutangaza orodha wanaohusishwa hapa. 534 00:23:45,890 --> 00:23:47,010 Sasa, jinsi gani mimi kufanya hivyo? 535 00:23:47,010 --> 00:23:48,810 536 00:23:48,810 --> 00:23:50,750 >> Hapa ni picha ya orodha wanaohusishwa. 537 00:23:50,750 --> 00:23:53,030 Na mimi si kweli kujua wakati jinsi 538 00:23:53,030 --> 00:23:56,710 Mimi nina kwenda juu anayewakilisha mambo mengi na moja tu 539 00:23:56,710 --> 00:23:58,040 variable katika kumbukumbu. 540 00:23:58,040 --> 00:23:59,160 Lakini kufikiri nyuma sasa. 541 00:23:59,160 --> 00:24:00,830 Muda wote huu tulikuwa na masharti, ambayo sisi basi 542 00:24:00,830 --> 00:24:02,913 umebaini kuwa arrays ya wahusika, ambayo sisi kisha 543 00:24:02,913 --> 00:24:05,740 umebaini kuwa tu pointer kwa tabia ya kwanza 544 00:24:05,740 --> 00:24:08,890 katika safu ya wahusika hiyo null terminated. 545 00:24:08,890 --> 00:24:13,530 Hivyo kwa mantiki hiyo, na kwa hili picha aina ya mbegu mawazo yenu, 546 00:24:13,530 --> 00:24:17,964 nini haja ya sisi kweli kuandika katika yetu code kwa kuwakilisha orodha wanaohusishwa? 547 00:24:17,964 --> 00:24:21,130 Ni kiasi gani cha habari hii tunahitaji kukamata katika C code, ungeweza kusema? 548 00:24:21,130 --> 00:24:22,654 549 00:24:22,654 --> 00:24:23,154 Yeah? 550 00:24:23,154 --> 00:24:24,738 >> Watazamaji: Tunahitaji pointer nodi. 551 00:24:24,738 --> 00:24:26,237 DAVID J. Malan: pointer nodi. 552 00:24:26,237 --> 00:24:29,320 Hasa, ambayo node ingekuwa yako hisia kuwa kuweka pointer kwa? 553 00:24:29,320 --> 00:24:30,026 >> Watazamaji: node kwanza. 554 00:24:30,026 --> 00:24:31,942 >> DAVID J. Malan: Yeah, pengine tu kwanza. 555 00:24:31,942 --> 00:24:34,030 Na taarifa, kwanza node ni sura tofauti. 556 00:24:34,030 --> 00:24:37,690 Ni tu nusu ya ukubwa wa struct, kwa sababu ni kweli tu pointer. 557 00:24:37,690 --> 00:24:44,650 Basi nini unaweza kweli kufanya ni kutangaza orodha wanaohusishwa na kuwa ya aina nodi *. 558 00:24:44,650 --> 00:24:47,780 Na hebu tu kuiita kwanza na initialize kwa null. 559 00:24:47,780 --> 00:24:49,910 Hivyo null, tena, ni kuja katika picha hapa. 560 00:24:49,910 --> 00:24:53,620 Si tu ni null kutumika kama kama maalum thamani ya kurudi kwa mambo kama GetString 561 00:24:53,620 --> 00:24:57,770 na malloc, null ni pia zero pointer, ukosefu wa pointer, 562 00:24:57,770 --> 00:24:58,430 kama wewe. 563 00:24:58,430 --> 00:25:00,309 Ni tu ina maana hakuna kitu bado hapa. 564 00:25:00,309 --> 00:25:02,100 Sasa kwanza, mimi naweza wameweza kuitwa kitu huu. 565 00:25:02,100 --> 00:25:04,200 Mimi naweza kuwa na kuitwa kuwa ni "orodha" au idadi yoyote ya mambo mengine. 566 00:25:04,200 --> 00:25:06,960 Lakini nina wito ni "kwanza" ili hayo yanaendana na picha hii. 567 00:25:06,960 --> 00:25:10,280 Hivyo tu kama kamba inaweza kuwakilishwa na anwani ya Byte wake wa kwanza, 568 00:25:10,280 --> 00:25:11,280 hivyo unaweza orodha wanaohusishwa. 569 00:25:11,280 --> 00:25:13,480 Na tutaweza kuona data nyingine miundo kuwa kuwakilishwa 570 00:25:13,480 --> 00:25:16,700 na pointer moja tu, 32-bit mshale, akizungumzia 571 00:25:16,700 --> 00:25:18,740 nodi kwanza sana katika muundo. 572 00:25:18,740 --> 00:25:20,340 >> Lakini sasa hebu wanatarajia tatizo. 573 00:25:20,340 --> 00:25:23,230 Kama mimi nina tu kukumbuka katika mpango wangu anwani 574 00:25:23,230 --> 00:25:27,220 ya nodi ya kwanza, kwanza Mstatili katika muundo huu data, 575 00:25:27,220 --> 00:25:31,760 nini alikuwa bora kuwa kesi kuhusu utekelezaji wa mapumziko ya orodha yangu? 576 00:25:31,760 --> 00:25:35,820 Nini undani muhimu kwamba kinaendelea kuhakikisha hii kwa kweli kazi? 577 00:25:35,820 --> 00:25:39,250 Na kwa "kweli kazi" Mimi maana, kiasi kama kamba, 578 00:25:39,250 --> 00:25:42,180 unatufanya kwenda kutoka tabia ya kwanza katika jina Davin ya pili, 579 00:25:42,180 --> 00:25:44,755 kwa wa tatu, mpaka nne, na mwisho sana, 580 00:25:44,755 --> 00:25:47,880 jinsi gani sisi kujua wakati tuko mwishoni ya orodha wanaohusishwa kwamba inaonekana kama hii? 581 00:25:47,880 --> 00:25:50,035 582 00:25:50,035 --> 00:25:50,660 Wakati ni null. 583 00:25:50,660 --> 00:25:53,640 Na nimepata kuwakilishwa aina hii ya kama kama nguvu ya umeme mhandisi, 584 00:25:53,640 --> 00:25:56,420 na kutuliza kidogo ishara, ya kila aina. 585 00:25:56,420 --> 00:25:58,246 Lakini kwamba tu maana null katika kesi hii. 586 00:25:58,246 --> 00:26:00,370 Unaweza kuteka ni idadi yoyote ya njia, lakini mwandishi huyu 587 00:26:00,370 --> 00:26:02,800 kilichotokea kwa kutumia alama hii hapa. 588 00:26:02,800 --> 00:26:06,260 >> Hiyo kwa muda mrefu kama sisi ni stringing wote wa nodes hizi pamoja, 589 00:26:06,260 --> 00:26:08,600 tu kukumbuka ambapo moja ya kwanza ni, hivyo muda mrefu 590 00:26:08,600 --> 00:26:11,760 kama sisi kuweka alama maalum katika node mwisho sana katika orodha, 591 00:26:11,760 --> 00:26:15,130 na tutaweza kutumia null, kwa sababu hiyo nini tuna inapatikana kwa sisi, 592 00:26:15,130 --> 00:26:16,480 orodha hii ni kamili. 593 00:26:16,480 --> 00:26:20,190 Na hata kama mimi tu kukupa pointer kwa kipengele kwanza, wewe, programu, 594 00:26:20,190 --> 00:26:22,486 Unaweza shaka kupata mapumziko ya yake. 595 00:26:22,486 --> 00:26:24,360 Lakini hebu basi akili yako tanga kidogo, 596 00:26:24,360 --> 00:26:26,140 kama uko tayari kabisa wandered-- nini 597 00:26:26,140 --> 00:26:28,723 kwenda kuwa wakati mbio ya kutafuta kitu chochote katika orodha hii? 598 00:26:28,723 --> 00:26:30,450 599 00:26:30,450 --> 00:26:33,470 Damn hilo, ni O kubwa ya n, ambayo si mbaya, katika haki. 600 00:26:33,470 --> 00:26:34,800 Lakini ni linear. 601 00:26:34,800 --> 00:26:37,980 Sisi wameacha kipengele kile ya arrays na kusonga zaidi 602 00:26:37,980 --> 00:26:43,130 kuelekea picha hii ya dynamically kusuka pamoja au wanaohusishwa nodes? 603 00:26:43,130 --> 00:26:44,970 604 00:26:44,970 --> 00:26:46,687 Tumekuwa aliyopewa up upatikanaji random. 605 00:26:46,687 --> 00:26:48,770 safu ni nzuri kwa sababu mathematically kila kitu 606 00:26:48,770 --> 00:26:50,340 ni nyuma kwa nyuma kwa nyuma kwa nyuma. 607 00:26:50,340 --> 00:26:52,370 Hata ingawa picha hii inaonekana pretty, na hata 608 00:26:52,370 --> 00:26:55,830 ingawa inaonekana kama nodes hizi ni nicely spaced mbali, katika hali halisi 609 00:26:55,830 --> 00:26:56,830 wao inaweza kuwa mahali popote. 610 00:26:56,830 --> 00:27:01,590 OX1, Ox50, Ox123, Ox99, hizi nodes inaweza kuwa mahali popote. 611 00:27:01,590 --> 00:27:05,960 Kwa sababu gani malloc kutenga kumbukumbu kutoka chungu, lakini mahali popote katika chungu. 612 00:27:05,960 --> 00:27:09,080 Wewe si lazima kujua kwamba ni kwenda kuwa nyuma kwa nyuma kwa nyuma. 613 00:27:09,080 --> 00:27:12,460 Na hivyo picha hii katika hali halisi ya si kwenda kuwa kabisa hii pretty. 614 00:27:12,460 --> 00:27:16,140 >> Hivyo ni kwenda kuchukua kidogo ya kazi ili kutekeleza kazi hii. 615 00:27:16,140 --> 00:27:17,880 Basi hebu kutekeleza tafuta sasa. 616 00:27:17,880 --> 00:27:20,250 Na tutaweza kuona aina ya njia wajanja wa kufanya hivyo. 617 00:27:20,250 --> 00:27:24,660 Hivyo kama mimi ni kutafuta kazi na Mimi nina aliyopewa variable, integer n 618 00:27:24,660 --> 00:27:28,490 kwa kuangalia, mimi haja ya kujua syntax mpya kwa ajili ya kuangalia ndani ya 619 00:27:28,490 --> 00:27:32,400 ya muundo hiyo ni alisema kwa, ili kupata n. 620 00:27:32,400 --> 00:27:33,210 Basi hebu kufanya hili. 621 00:27:33,210 --> 00:27:36,030 >> Hivyo kwanza mimi nina kwenda mbele na kutangaza nodi *. 622 00:27:36,030 --> 00:27:39,400 Na mimi nina kwenda kumwita pointer, tu kwa mkataba. 623 00:27:39,400 --> 00:27:41,710 Na mimi nina kwenda initialize kwa kwanza. 624 00:27:41,710 --> 00:27:43,770 Na sasa siwezi kufanya hivyo katika idadi ya njia. 625 00:27:43,770 --> 00:27:45,436 Lakini nina kwenda kuchukua njia ya kawaida. 626 00:27:45,436 --> 00:27:50,180 Wakati pointer ni si sawa na null, na kwamba ni halali syntax. 627 00:27:50,180 --> 00:27:54,550 Na ni tu ina maana kufanya yafuatayo, hivyo muda mrefu kama wewe si akionyesha chochote. 628 00:27:54,550 --> 00:27:55,800 Nini nataka kufanya? 629 00:27:55,800 --> 00:28:01,939 >> Kama pointer dot n, basi mimi kuja nyuma na kwamba, equals-- sawa na nini? 630 00:28:01,939 --> 00:28:03,105 Nini thamani mimi kuangalia kwa? 631 00:28:03,105 --> 00:28:04,920 632 00:28:04,920 --> 00:28:06,590 n halisi kwamba ilipitishwa katika. 633 00:28:06,590 --> 00:28:09,020 Hivyo hapa ni kipengele mwingine ya C na lugha nyingi. 634 00:28:09,020 --> 00:28:13,705 Hata ingawa muundo kuitwa node ina thamani n, kabisa halali 635 00:28:13,705 --> 00:28:17,530 na pia kuwa na hoja za mitaa au variable kuitwa n. 636 00:28:17,530 --> 00:28:20,085 Kwa sababu hata sisi, pamoja na macho ya binadamu, wanaweza kutofautisha 637 00:28:20,085 --> 00:28:22,087 kwamba hii ni labda n tofauti na n huu. 638 00:28:22,087 --> 00:28:23,420 Kwa sababu syntax ni tofauti. 639 00:28:23,420 --> 00:28:26,211 Nimepata dot na pointer, ambapo hii moja ina hakuna kitu kama hicho. 640 00:28:26,211 --> 00:28:27,290 Hivyo hii ni sawa. 641 00:28:27,290 --> 00:28:29,120 Hiyo ni sawa kuwaita mambo sawa. 642 00:28:29,120 --> 00:28:32,380 >> Kama mimi kupata hii, mimi nina kwenda wanataka kufanya kitu 643 00:28:32,380 --> 00:28:35,000 kama kutangaza kwamba sisi kupatikana n. 644 00:28:35,000 --> 00:28:37,930 Na tutaweza kuondoka kwamba kama maoni au pseudocode code. 645 00:28:37,930 --> 00:28:40,190 Mwingine, na hapa ni kuvutia sehemu, nini 646 00:28:40,190 --> 00:28:47,320 kufanya mimi wanataka kufanya kama nodi sasa si vyenye n kwamba mimi huduma ya juu? 647 00:28:47,320 --> 00:28:50,700 Je, mimi kufikia yafuatayo? 648 00:28:50,700 --> 00:28:53,710 Kama kidole yangu katika sasa ni PTR, na ni 649 00:28:53,710 --> 00:28:55,920 akionyesha chochote kwanza ni akizungumzia katika, 650 00:28:55,920 --> 00:28:59,290 jinsi gani mimi hoja kidole yangu kwa node ya pili katika kanuni? 651 00:28:59,290 --> 00:29:01,915 Naam, nini breadcrumb tuko kwenda kufuata katika kesi hii? 652 00:29:01,915 --> 00:29:03,464 653 00:29:03,464 --> 00:29:04,380 Watazamaji: [inaudible]. 654 00:29:04,380 --> 00:29:05,630 DAVID J. Malan: Yeah, hivyo ijayo. 655 00:29:05,630 --> 00:29:06,640 656 00:29:06,640 --> 00:29:09,824 Hivyo kama mimi kwenda nyuma yangu code hapa, kwa kweli, mimi nina 657 00:29:09,824 --> 00:29:12,990 kwenda mbele na kusema pointer, ambayo ni tu variable-- muda ni 658 00:29:12,990 --> 00:29:15,320 jina weird, PTR, lakini ni tu kama temp-- 659 00:29:15,320 --> 00:29:19,234 Mimi nina kwenda kuweka pointer sawa na chochote pointer is-- 660 00:29:19,234 --> 00:29:22,150 na tena, hii ni kwenda kuwa buggy kidogo kwa ajili ya moment-- dot ijayo. 661 00:29:22,150 --> 00:29:23,551 662 00:29:23,551 --> 00:29:26,550 Kwa maneno mengine, mimi nina kwenda kuchukua yangu kidole hiyo akionyesha node hii 663 00:29:26,550 --> 00:29:31,247 hapa na mimi nina kwenda kusema, unajua nini, kuangalia uwanja ijayo 664 00:29:31,247 --> 00:29:33,330 na hoja kidole kwa chochote ni akizungumzia katika. 665 00:29:33,330 --> 00:29:35,163 Na hii ni kwenda kurudia, kurudia, kurudia. 666 00:29:35,163 --> 00:29:37,630 Lakini wakati gani kidole yangu kuacha kufanya kitu chochote wakati wote? 667 00:29:37,630 --> 00:29:40,095 Haraka kama nini mstari wa kanuni mateke katika? 668 00:29:40,095 --> 00:29:40,970 Watazamaji: [inaudible] 669 00:29:40,970 --> 00:29:43,060 DAVID J. Malan: Kama hatua wakati pointer ni si sawa na null. 670 00:29:43,060 --> 00:29:44,900 Wakati fulani kidole yangu kwenda kuwa akionyesha null 671 00:29:44,900 --> 00:29:47,070 na mimi nina kwenda kwa kutambua hiyo ni mwisho wa orodha hii. 672 00:29:47,070 --> 00:29:48,910 Sasa, hii ni kidogo uongo nyeupe kwa urahisi. 673 00:29:48,910 --> 00:29:51,580 Ni zinageuka kuwa hata kama sisi tu kujifunza dot nukuu hii 674 00:29:51,580 --> 00:29:55,220 kwa ajili ya miundo, pointer ni si struct. 675 00:29:55,220 --> 00:29:56,580 PTR ni nini? 676 00:29:56,580 --> 00:29:58,350 Tu kuwa zaidi nitpicky. 677 00:29:58,350 --> 00:29:59,720 678 00:29:59,720 --> 00:30:01,360 Ni pointer nodi. 679 00:30:01,360 --> 00:30:03,120 Siyo node yenyewe. 680 00:30:03,120 --> 00:30:06,650 Kama sikuwa na nyota hapa, pointer absolutely-- ni nodi. 681 00:30:06,650 --> 00:30:08,650 Hii ni kama wiki moja tamko la variable, 682 00:30:08,650 --> 00:30:10,120 ingawa neno "node" ni mpya. 683 00:30:10,120 --> 00:30:13,860 >> Lakini kwa haraka kama sisi kuanzisha nyota, ni sasa pointer nodi. 684 00:30:13,860 --> 00:30:17,960 Na kwa bahati mbaya huwezi kutumia dot nukuu kwa pointer. 685 00:30:17,960 --> 00:30:21,070 Una kutumia mshale nukuu, ambayo, strikingly, 686 00:30:21,070 --> 00:30:23,470 ni mara ya kwanza kipande yoyote ya syntax inaonekana Intuitive. 687 00:30:23,470 --> 00:30:25,245 Hii ina inaonekana kama mshale. 688 00:30:25,245 --> 00:30:26,370 Na hivyo kwamba ni jambo jema. 689 00:30:26,370 --> 00:30:28,995 Na hapa chini literally inaonekana kama mshale. 690 00:30:28,995 --> 00:30:31,870 Hivyo nadhani hiyo ni la-- mimi si kufikiri mimi nina juu-kufanya here-- mimi 691 00:30:31,870 --> 00:30:34,120 nadhani hiyo ni mwisho mpya kipande ya syntax tunakwenda kuona. 692 00:30:34,120 --> 00:30:36,500 Na nashiriki, ni kweli kidogo Intuitive zaidi. 693 00:30:36,500 --> 00:30:40,090 >> Sasa, kwa wale ambao kingependa njia ya zamani, 694 00:30:40,090 --> 00:30:42,550 bado unaweza kutumia dot nukuu. 695 00:30:42,550 --> 00:30:45,380 Lakini kama per Jumatatu mazungumzo, sisi kwanza 696 00:30:45,380 --> 00:30:50,530 haja ya kwenda huko, kwenda kuwa kushughulikia, na kisha kupata shamba. 697 00:30:50,530 --> 00:30:51,897 Hivyo hii ni pia sahihi. 698 00:30:51,897 --> 00:30:53,730 Na kusema ukweli, hii ni kidogo zaidi pedantic. 699 00:30:53,730 --> 00:30:56,530 Wewe ni literally akisema, dereference pointer na kwenda huko. 700 00:30:56,530 --> 00:30:59,320 Kisha kunyakua .n, shamba iitwayo n. 701 00:30:59,320 --> 00:31:01,370 Lakini kusema ukweli, hakuna mtu anataka aina au kusoma hii. 702 00:31:01,370 --> 00:31:03,620 Na hivyo dunia zuliwa arrow nukuu, ambayo 703 00:31:03,620 --> 00:31:06,980 ni sawa, kufanana, ni tu Kiwango cha kisintaksia sukari. 704 00:31:06,980 --> 00:31:10,570 Hivyo njia dhana ya kusema hii inaonekana zaidi, au inaonekana rahisi. 705 00:31:10,570 --> 00:31:12,296 >> Hivyo sasa mimi nina kwenda kufanya jambo moja nyingine. 706 00:31:12,296 --> 00:31:15,420 Mimi nina kwenda kusema "kuvunja" mara moja nimekuwa kupatikana hivyo mimi si kuendelea kutafuta kwa ajili yake. 707 00:31:15,420 --> 00:31:17,620 Lakini hii ni kiini ya kazi ya utafutaji. 708 00:31:17,620 --> 00:31:21,710 Lakini ni rahisi sana, katika mwisho, si kwa kutembea kwa njia ya kificho. 709 00:31:21,710 --> 00:31:25,570 Hii ni kweli utekelezaji rasmi ya kutafuta katika leo usambazaji code. 710 00:31:25,570 --> 00:31:30,530 Mimi kuthubutu kusema kwamba Insert ni si hasa furaha kwa kutembea kwa njia ya 711 00:31:30,530 --> 00:31:33,180 kuibua, wala ni kufuta, hata ingawa mwisho wa siku 712 00:31:33,180 --> 00:31:35,460 wao jipu chini kwa haki rahisi heuristics. 713 00:31:35,460 --> 00:31:36,330 >> Basi hebu kufanya hili. 714 00:31:36,330 --> 00:31:39,250 Kama wewe utakuwa ucheshi mimi hapa, mimi kuleta rundo la mipira stress. 715 00:31:39,250 --> 00:31:40,620 Mimi kuletwa rundo la idadi. 716 00:31:40,620 --> 00:31:46,562 Na tunaweza kupata kujitolea chache tu kuwakilisha 9, 17, 20, 22, 29, na 34? 717 00:31:46,562 --> 00:31:48,270 Hivyo kimsingi kila mtu ambaye ni hapa leo. 718 00:31:48,270 --> 00:31:50,170 719 00:31:50,170 --> 00:31:52,760 Hiyo ilikuwa moja, mbili, tatu, nne, tano, sita watu. 720 00:31:52,760 --> 00:31:55,740 Na nimekuwa aliuliza kwa go-- kuona, hakuna moja katika nyuma huwafufua mikono yao. 721 00:31:55,740 --> 00:32:01,910 OK, moja, mbili, tatu, nne, five-- napenda mzigo balance-- sita. 722 00:32:01,910 --> 00:32:03,051 OK, wewe sita kuja juu up. 723 00:32:03,051 --> 00:32:04,050 Tutaweza haja watu wengine. 724 00:32:04,050 --> 00:32:05,460 Sisi kuletwa mipira ya ziada stress. 725 00:32:05,460 --> 00:32:08,200 Na kama unaweza, kwa muda tu, line 726 00:32:08,200 --> 00:32:10,490 maisha yenu juu tu kama picha hii hapa. 727 00:32:10,490 --> 00:32:15,200 728 00:32:15,200 --> 00:32:15,959 >> Wote haki. 729 00:32:15,959 --> 00:32:17,125 Hebu angalia, nini jina lako? 730 00:32:17,125 --> 00:32:17,550 >> Watazamaji: Andrew. 731 00:32:17,550 --> 00:32:18,800 >> DAVID J. Malan: Andrew, wewe ni namba 9. 732 00:32:18,800 --> 00:32:19,540 Nice kukutana na wewe. 733 00:32:19,540 --> 00:32:20,400 Hapa kwenda. 734 00:32:20,400 --> 00:32:21,593 735 00:32:21,593 --> 00:32:22,176 Watazamaji: Jen. 736 00:32:22,176 --> 00:32:22,662 DAVID J. Malan: Jen. 737 00:32:22,662 --> 00:32:23,162 Daudi. 738 00:32:23,162 --> 00:32:23,765 Namba 17. 739 00:32:23,765 --> 00:32:24,950 740 00:32:24,950 --> 00:32:25,450 Ndiyo? 741 00:32:25,450 --> 00:32:26,400 >> Watazamaji: Mimi nina Julia. 742 00:32:26,400 --> 00:32:26,980 >> DAVID J. Malan: Julia, David. 743 00:32:26,980 --> 00:32:27,545 Idadi 20. 744 00:32:27,545 --> 00:32:28,507 745 00:32:28,507 --> 00:32:29,340 Watazamaji: Christian. 746 00:32:29,340 --> 00:32:30,715 DAVID J. Malan: Christian, David. 747 00:32:30,715 --> 00:32:31,541 Idadi 22. 748 00:32:31,541 --> 00:32:32,040 Na? 749 00:32:32,040 --> 00:32:32,649 >> Watazamaji: JP. 750 00:32:32,649 --> 00:32:33,440 DAVID J. Malan: JP. 751 00:32:33,440 --> 00:32:34,880 Idadi 29. 752 00:32:34,880 --> 00:32:37,080 Hivyo kwenda mbele na kupata in-- Uh oh. 753 00:32:37,080 --> 00:32:38,486 754 00:32:38,486 --> 00:32:38,985 Uh oh. 755 00:32:38,985 --> 00:32:39,650 756 00:32:39,650 --> 00:32:40,150 Kusubiri. 757 00:32:40,150 --> 00:32:41,360 758 00:32:41,360 --> 00:32:42,390 20. 759 00:32:42,390 --> 00:32:43,682 Je, mtu yeyote kuwa na marker? 760 00:32:43,682 --> 00:32:44,890 Watazamaji: Mimi nimepata Sharpie. 761 00:32:44,890 --> 00:32:45,660 DAVID J. Malan: You got Sharpie? 762 00:32:45,660 --> 00:32:46,159 OK. 763 00:32:46,159 --> 00:32:47,577 764 00:32:47,577 --> 00:32:49,160 Na je, mtu yeyote kuwa na kipande cha karatasi? 765 00:32:49,160 --> 00:32:51,562 766 00:32:51,562 --> 00:32:52,270 Ila hotuba. 767 00:32:52,270 --> 00:32:53,810 768 00:32:53,810 --> 00:32:55,362 Kuja juu. 769 00:32:55,362 --> 00:32:56,320 Watazamaji: Sisi tumepewa yake. 770 00:32:56,320 --> 00:32:57,600 DAVID J. Malan: Sisi got it? 771 00:32:57,600 --> 00:32:58,577 Zote haki, asante. 772 00:32:58,577 --> 00:33:01,380 773 00:33:01,380 --> 00:33:02,520 Hapa sisi kwenda. 774 00:33:02,520 --> 00:33:03,582 Ilikuwa hii kutoka kwenu? 775 00:33:03,582 --> 00:33:04,540 Wewe tu kuokolewa siku. 776 00:33:04,540 --> 00:33:05,670 777 00:33:05,670 --> 00:33:07,220 Hivyo 29. 778 00:33:07,220 --> 00:33:10,510 779 00:33:10,510 --> 00:33:11,110 Wote haki. 780 00:33:11,110 --> 00:33:13,360 781 00:33:13,360 --> 00:33:14,890 Mimi misspelled 29, lakini OK. 782 00:33:14,890 --> 00:33:15,720 Kwenda mbele. 783 00:33:15,720 --> 00:33:18,114 Haki wote, mimi nitakupa kalamu yako nyuma momentarily. 784 00:33:18,114 --> 00:33:19,280 Hivyo tuna folks hizi hapa. 785 00:33:19,280 --> 00:33:20,330 Hebu kuwa na mtu mwingine. 786 00:33:20,330 --> 00:33:23,750 Gabe, je, unataka kucheza kipengele kwanza hapa? 787 00:33:23,750 --> 00:33:25,705 Tutaweza haja ya wewe kwa uhakika hizi folks faini. 788 00:33:25,705 --> 00:33:26,930 789 00:33:26,930 --> 00:33:31,030 Hivyo 9, 17, 20, 22, aina ya 29, na kisha 34. 790 00:33:31,030 --> 00:33:32,160 791 00:33:32,160 --> 00:33:33,325 Je, sisi kupoteza mtu? 792 00:33:33,325 --> 00:33:33,950 Mimi kufanya kuwa 34. 793 00:33:33,950 --> 00:33:36,730 Ambapo did-- OK, ambaye anataka kuwa 34? 794 00:33:36,730 --> 00:33:37,605 OK, kuja juu juu, 34. 795 00:33:37,605 --> 00:33:39,280 796 00:33:39,280 --> 00:33:41,220 Zote haki, hii itakuwa pamoja na thamani ya kilele. 797 00:33:41,220 --> 00:33:41,550 Nini jina lako? 798 00:33:41,550 --> 00:33:42,040 >> Watazamaji: Peter. 799 00:33:42,040 --> 00:33:43,456 >> DAVID J. Malan: Peter, kuja juu up. 800 00:33:43,456 --> 00:33:46,810 Haki wote, hivyo hapa ni rundo zima la nodes. 801 00:33:46,810 --> 00:33:49,060 Kila mmoja wenu guys inawakilisha moja ya rectangles haya. 802 00:33:49,060 --> 00:33:51,930 Na Gabe, kidogo isiyo ya kawaida mtu nje, inawakilisha kwanza. 803 00:33:51,930 --> 00:33:54,850 Hivyo pointer yake ni kidogo kidogo juu ya screen kuliko mtu mwingine. 804 00:33:54,850 --> 00:33:58,120 Na katika kesi hii, kila mmoja wa wako wa kushoto mikono ni kwenda aidha uhakika chini, 805 00:33:58,120 --> 00:34:01,085 hivyo anayewakilisha null, hivyo tu kukosekana kwa pointer, 806 00:34:01,085 --> 00:34:03,210 au ni kwenda akizungumzia nodi karibu na wewe. 807 00:34:03,210 --> 00:34:05,440 >> Hivyo sasa hivi kama wewe kupamba wenyewe kama picha 808 00:34:05,440 --> 00:34:07,585 hapa, kwenda mbele na hatua kwa kila mmoja, na Gabe 809 00:34:07,585 --> 00:34:11,030 katika akizungumzia hasa katika namba 9 ya kuwakilisha orodha. 810 00:34:11,030 --> 00:34:14,050 OK, na idadi 34, mkono wako wa kushoto lazima tu akizungumzia katika sakafu. 811 00:34:14,050 --> 00:34:15,750 >> OK, hivyo hii ni orodha wanaohusishwa. 812 00:34:15,750 --> 00:34:17,580 Hivyo hii ni mazingira katika swali. 813 00:34:17,580 --> 00:34:20,210 Na hakika, hii ni mwakilishi wa darasa la matatizo 814 00:34:20,210 --> 00:34:21,929 kwamba unaweza kujaribu kutatua na kanuni. 815 00:34:21,929 --> 00:34:25,020 Unataka hatimaye kuingiza kipengele mpya katika orodha. 816 00:34:25,020 --> 00:34:27,494 Katika kesi hiyo, tunakwenda kujaribu kuingiza idadi 55. 817 00:34:27,494 --> 00:34:28,500 818 00:34:28,500 --> 00:34:30,860 Lakini kuna kwenda kuwa matukio mbalimbali ya kuzingatia. 819 00:34:30,860 --> 00:34:34,409 Na hakika, hii ni kwenda kuwa moja ya big-picha Takeaways hapa, ni, 820 00:34:34,409 --> 00:34:35,659 nini ni kesi tofauti. 821 00:34:35,659 --> 00:34:39,120 Je, ni tofauti kama hali au matawi kwamba mpango wako wanaweza kuwa na? 822 00:34:39,120 --> 00:34:42,024 >> Naam, idadi wewe ni kujaribu Insert, ambayo sisi kujua sasa kuwa 55, 823 00:34:42,024 --> 00:34:44,650 lakini kama wewe hakujua mapema, mimi daresay 824 00:34:44,650 --> 00:34:47,840 unaingia angalau tatu inawezekana hali. 825 00:34:47,840 --> 00:34:49,717 Ambapo wanaweza kipengele mpya kuwa? 826 00:34:49,717 --> 00:34:51,050 Watazamaji: Na mwisho au katikati. 827 00:34:51,050 --> 00:34:54,150 DAVID J. Malan: Mwishoni, katika katikati, au mwanzoni. 828 00:34:54,150 --> 00:34:56,650 Hivyo mimi kudai kuna angalau matatizo matatu sisi haja ya kutatua. 829 00:34:56,650 --> 00:34:58,691 Hebu kuchagua nini labda arguably rahisi 830 00:34:58,691 --> 00:35:01,090 moja, ambapo kipengele mpya mali mwanzoni. 831 00:35:01,090 --> 00:35:04,040 Hivyo nina kwenda kuwa na code kabisa kama kutafuta, ambayo mimi tu aliandika. 832 00:35:04,040 --> 00:35:07,670 Na mimi nina kwenda kuwa na PTR, ambayo Mimi itabidi kuwakilisha hapa kwa kidole yangu, 833 00:35:07,670 --> 00:35:08,370 kama kawaida. 834 00:35:08,370 --> 00:35:12,430 >> Na kumbuka thamani, nini gani sisi initialize PTR kwa? 835 00:35:12,430 --> 00:35:15,300 Hivyo sisi initialized kwa null awali. 836 00:35:15,300 --> 00:35:16,410 837 00:35:16,410 --> 00:35:19,770 Lakini basi nini sisi kufanya mara moja sisi walikuwa ndani ya kutafuta kazi yetu? 838 00:35:19,770 --> 00:35:20,940 839 00:35:20,940 --> 00:35:24,870 Sisi kuweka sawa na ya kwanza, ambayo haina maana kufanya hivyo. 840 00:35:24,870 --> 00:35:25,890 841 00:35:25,890 --> 00:35:30,570 Kama mimi kuweka PTR sawa na kwanza, nini lazima mkono wangu kweli kuwa akionyesha? 842 00:35:30,570 --> 00:35:31,070 Haki. 843 00:35:31,070 --> 00:35:33,290 Hivyo kama Gabe na mimi ni kwenda kuwa na maadili sawa hapa, 844 00:35:33,290 --> 00:35:34,760 tunahitaji wote wawili uhakika katika namba 9. 845 00:35:34,760 --> 00:35:36,420 >> Hivyo hii ilikuwa mwanzo wa hadithi yetu. 846 00:35:36,420 --> 00:35:38,700 Na sasa hii ni moja kwa moja, ingawa syntax ni mpya. 847 00:35:38,700 --> 00:35:40,580 Conceptually hii ni search linear. 848 00:35:40,580 --> 00:35:42,750 Ni 55 sawa na 9? 849 00:35:42,750 --> 00:35:45,559 Au tuseme, hebu sema chini ya 9. 850 00:35:45,559 --> 00:35:47,600 Kwa sababu mimi nina kujaribu kufikiri mahali pa kuweka 55. 851 00:35:47,600 --> 00:35:51,270 Chini ya 9, chini ya 17, chini ya ya 20, chini ya 22, chini ya 29, 852 00:35:51,270 --> 00:35:52,510 chini ya 34, hakuna. 853 00:35:52,510 --> 00:35:55,080 Hivyo sasa tuko katika kesi moja ya angalau tatu. 854 00:35:55,080 --> 00:35:59,910 >> Kama mimi nataka kuingiza 55 zaidi ya hapa, nini mstari wa kanuni haja ya kupata kuuawa? 855 00:35:59,910 --> 00:36:01,890 Ni kwa jinsi gani picha hii ya binadamu haja ya kubadili? 856 00:36:01,890 --> 00:36:03,181 Je, mimi kufanya na mkono wangu wa kushoto? 857 00:36:03,181 --> 00:36:04,530 858 00:36:04,530 --> 00:36:07,360 Hii inapaswa kuwa null awali, kwa sababu mimi nina mwishoni mwa orodha. 859 00:36:07,360 --> 00:36:09,318 Na kile lazima kutokea hapa pamoja na Petro, kwa nani? 860 00:36:09,318 --> 00:36:10,520 861 00:36:10,520 --> 00:36:12,430 Yeye ni wazi kwenda kwa uhakika na mimi. 862 00:36:12,430 --> 00:36:15,580 Hivyo mimi kudai kuna mistari angalau mbili wa kanuni katika sampuli kificho kutoka leo 863 00:36:15,580 --> 00:36:18,570 kwamba kinaendelea kutekeleza hili mazingira ya kuongeza 55 katika mkia. 864 00:36:18,570 --> 00:36:20,950 Na naweza kuwa na mtu hop up na tu kuwakilisha 55? 865 00:36:20,950 --> 00:36:22,200 Haki wote, wewe ni mpya 55. 866 00:36:22,200 --> 00:36:23,580 867 00:36:23,580 --> 00:36:27,054 >> Hivyo sasa nini kama ya mazingira huja pamoja, 868 00:36:27,054 --> 00:36:29,720 na tunataka kuingiza katika mwanzo au mkuu wa orodha hii? 869 00:36:29,720 --> 00:36:31,100 Na nini jina lako, idadi ya 55? 870 00:36:31,100 --> 00:36:31,420 >> Watazamaji: Jack. 871 00:36:31,420 --> 00:36:32,295 >> DAVID J. Malan: Jack? 872 00:36:32,295 --> 00:36:33,585 OK, nzuri ya kukutana na wewe. 873 00:36:33,585 --> 00:36:34,210 Karibu ndani. 874 00:36:34,210 --> 00:36:36,640 Hivyo sasa sisi ni kwenda kuingiza, kusema, namba 5. 875 00:36:36,640 --> 00:36:39,840 Hapa ni kesi ya pili ya tatu sisi kuja na kabla ya. 876 00:36:39,840 --> 00:36:43,050 Hivyo kama 5 yanakuwa mwanzoni, hebu angalia jinsi sisi kupata kwamba nje. 877 00:36:43,050 --> 00:36:46,310 Mimi initialize PTR yangu pointer kwa namba 9 tena. 878 00:36:46,310 --> 00:36:49,140 Na mimi barabara, oh, 5 ni chini ya 9. 879 00:36:49,140 --> 00:36:50,880 Hivyo kurekebisha picha hii kwa ajili yetu. 880 00:36:50,880 --> 00:36:54,820 Ambao mikono, Gabe au Daudi or-- namba 9 ya jina ni nini? 881 00:36:54,820 --> 00:36:55,740 >> Watazamaji: Jen. 882 00:36:55,740 --> 00:36:58,406 >> DAVID J. Malan: hands-- Jen ya ambayo ya mikono yetu haja ya kubadili? 883 00:36:58,406 --> 00:36:58,905 884 00:36:58,905 --> 00:37:00,970 OK, hivyo Gabe anasema nini sasa? 885 00:37:00,970 --> 00:37:01,640 Saa yangu. 886 00:37:01,640 --> 00:37:02,750 Mimi ni node mpya. 887 00:37:02,750 --> 00:37:04,870 Hivyo mimi itabidi tu aina ya hoja hapa kuona kuibua. 888 00:37:04,870 --> 00:37:06,435 Na wakati huo huo je, mimi uhakika kwamba? 889 00:37:06,435 --> 00:37:07,910 890 00:37:07,910 --> 00:37:09,020 Bado ambapo mimi nina akizungumzia. 891 00:37:09,020 --> 00:37:10,000 Hivyo hiyo ni yake. 892 00:37:10,000 --> 00:37:13,717 Hivyo tu kweli line moja ya kanuni fixes hasa katika suala hili, ingekuwa kuonekana. 893 00:37:13,717 --> 00:37:14,800 Haki zote, hivyo hiyo ni nzuri. 894 00:37:14,800 --> 00:37:17,580 Na mtu anaweza kuwa placeholder kwa 5? 895 00:37:17,580 --> 00:37:18,080 Kuja juu juu. 896 00:37:18,080 --> 00:37:20,270 897 00:37:20,270 --> 00:37:21,320 Sisi itabidi kupata wewe mara ya pili. 898 00:37:21,320 --> 00:37:24,280 >> Haki zote, hivyo now-- na kama kando, majina 899 00:37:24,280 --> 00:37:28,510 Mimi si kufanya wazi kutaja ya haki sasa, pred pointer, mtangulizi pointer 900 00:37:28,510 --> 00:37:31,260 na pointer mpya, hiyo ni tu majina aliyopewa 901 00:37:31,260 --> 00:37:35,280 katika sampuli kificho kwa kuyatumia au mikono yangu hiyo ni aina ya kuonyesha kote. 902 00:37:35,280 --> 00:37:36,060 Nini jina lako? 903 00:37:36,060 --> 00:37:36,700 >> Watazamaji: Christine. 904 00:37:36,700 --> 00:37:37,100 >> DAVID J. Malan: Christine. 905 00:37:37,100 --> 00:37:38,090 Karibu ndani. 906 00:37:38,090 --> 00:37:42,180 Haki zote, hivyo hebu fikiria sasa kidogo zaidi annoying mazingira, 907 00:37:42,180 --> 00:37:46,350 ambapo mimi unataka Insert kitu kama 26 katika hili. 908 00:37:46,350 --> 00:37:47,090 20? 909 00:37:47,090 --> 00:37:47,590 Nini? 910 00:37:47,590 --> 00:37:50,510 Hizi are-- jambo zuri tuna kalamu hii. 911 00:37:50,510 --> 00:37:51,955 Zote haki, 20. 912 00:37:51,955 --> 00:37:53,640 913 00:37:53,640 --> 00:37:57,570 Kama mtu anaweza kupata kipande kingine cha karatasi tayari, tu katika case-- haki yote. 914 00:37:57,570 --> 00:37:58,370 Oh, kuvutia. 915 00:37:58,370 --> 00:37:59,760 916 00:37:59,760 --> 00:38:02,390 Naam hii ni mfano ya hotuba mdudu. 917 00:38:02,390 --> 00:38:03,894 OK hivyo nini jina yako tena? 918 00:38:03,894 --> 00:38:04,560 Watazamaji: Julia. 919 00:38:04,560 --> 00:38:07,559 DAVID J. Malan: Julia, unaweza pop nje na kujifanya wewe walikuwa kamwe huko? 920 00:38:07,559 --> 00:38:09,040 OK, hii kamwe kilichotokea. 921 00:38:09,040 --> 00:38:09,680 Asante. 922 00:38:09,680 --> 00:38:12,180 Hivyo tuseme tunataka kuingiza Julia katika orodha hii wanaohusishwa. 923 00:38:12,180 --> 00:38:13,780 Yeye ni namba 20. 924 00:38:13,780 --> 00:38:15,530 Na bila shaka yeye ni kwenda ni katika 925 00:38:15,530 --> 00:38:17,521 begin-- hawana uhakika katika chochote bado. 926 00:38:17,521 --> 00:38:20,020 Hivyo mkono wako unaweza aina ya kuwa chini null au baadhi thamani takataka. 927 00:38:20,020 --> 00:38:21,210 Hebu kuwaambia hadithi ya haraka. 928 00:38:21,210 --> 00:38:22,980 Mimi nina akionyesha namba 5 wakati huu. 929 00:38:22,980 --> 00:38:23,880 Kisha mimi kuangalia 9. 930 00:38:23,880 --> 00:38:25,130 Kisha mimi kuangalia 17. 931 00:38:25,130 --> 00:38:26,247 Kisha mimi kuangalia 22. 932 00:38:26,247 --> 00:38:27,650 933 00:38:27,650 --> 00:38:32,485 Na mimi kutambua, ooh, Julia mahitaji ya kwenda kabla ya 22. 934 00:38:32,485 --> 00:38:33,580 935 00:38:33,580 --> 00:38:34,660 Basi nini mahitaji ya kutokea? 936 00:38:34,660 --> 00:38:35,786 937 00:38:35,786 --> 00:38:36,910 Ambao mikono haja ya kubadili? 938 00:38:36,910 --> 00:38:38,360 Julia ya, yangu, or-- nini jina yako tena? 939 00:38:38,360 --> 00:38:39,230 >> Watazamaji: Christian. 940 00:38:39,230 --> 00:38:40,060 >> DAVID J. Malan: Christian au? 941 00:38:40,060 --> 00:38:40,560 >> Watazamaji: Andy. 942 00:38:40,560 --> 00:38:40,905 >> DAVID J. Malan: Andy. 943 00:38:40,905 --> 00:38:41,654 Mkristo au Andy? 944 00:38:41,654 --> 00:38:44,280 945 00:38:44,280 --> 00:38:45,690 Andy mahitaji ya kumweka katika? 946 00:38:45,690 --> 00:38:46,780 947 00:38:46,780 --> 00:38:47,341 Julia. 948 00:38:47,341 --> 00:38:47,840 Wote haki. 949 00:38:47,840 --> 00:38:48,960 Hivyo Andy, unataka kumweka katika Julia? 950 00:38:48,960 --> 00:38:50,120 Lakini kusubiri dakika. 951 00:38:50,120 --> 00:38:53,260 Katika hadithi hivi sasa, Mimi nina aina ya moja 952 00:38:53,260 --> 00:38:56,800 katika malipo, kwa maana kwamba pointer ni jambo kwamba 953 00:38:56,800 --> 00:38:57,850 kuhamia kwa njia ya orodha. 954 00:38:57,850 --> 00:39:00,800 Tuweze kuwa na jina kwa Andy, lakini hakuna variable kuitwa Andy. 955 00:39:00,800 --> 00:39:04,320 tu variable mwingine tuna ni kwanza, ambaye ni kuwakilishwa na Gabe. 956 00:39:04,320 --> 00:39:07,690 >> Hivyo hii ni kweli kwa nini hivyo mbali tumekuwa si zinahitajika huu. 957 00:39:07,690 --> 00:39:10,846 Lakini sasa juu ya screen kuna kutaja tena ya pred pointer. 958 00:39:10,846 --> 00:39:11,970 Hivyo basi mimi kuwa wazi zaidi. 959 00:39:11,970 --> 00:39:14,820 Kama hii ni pointer, mimi alikuwa bora kupata akili kidogo zaidi 960 00:39:14,820 --> 00:39:15,950 kuhusu iteration yangu. 961 00:39:15,950 --> 00:39:19,580 Kama huna akili yangu kwenda kwa njia ya hapa tena, akizungumzia hapa, akizungumzia hapa. 962 00:39:19,580 --> 00:39:22,500 Lakini ngoja na pointer pred, mtangulizi pointer, hiyo ni 963 00:39:22,500 --> 00:39:24,740 aina ya akionyesha kipengele Mimi mara tu saa. 964 00:39:24,740 --> 00:39:27,330 Hivyo wakati mimi kwenda hapa, sasa mkono wangu wa kushoto updates. 965 00:39:27,330 --> 00:39:29,370 Wakati mimi kwenda hapa wangu updates mkono wa kushoto. 966 00:39:29,370 --> 00:39:33,090 Na sasa nina si tu pointer kwa kipengele kwamba huenda baada ya Julia, 967 00:39:33,090 --> 00:39:36,300 Mimi bado wana pointer kwa Andy, kipengele kabla ya. 968 00:39:36,300 --> 00:39:39,430 Hivyo unaweza kupata, kimsingi, breadcrumbs, kama wewe, 969 00:39:39,430 --> 00:39:41,500 yote ya kuyatumia zinazohitajika. 970 00:39:41,500 --> 00:39:43,710 >> Hivyo kama mimi nina akionyesha Andy na mimi nina pia akizungumzia 971 00:39:43,710 --> 00:39:47,105 Christian, ambaye mikono lazima sasa kuwa alisema mahali pengine? 972 00:39:47,105 --> 00:39:48,770 973 00:39:48,770 --> 00:39:51,960 Hivyo Andy sasa wanaweza kumweka katika Julia. 974 00:39:51,960 --> 00:39:54,460 Julia sasa wanaweza kumweka katika Kikristo. 975 00:39:54,460 --> 00:39:56,950 Kwa sababu yeye anaweza nakala yangu upande wa kulia ya pointer. 976 00:39:56,950 --> 00:40:00,044 Na kwamba kwa ufanisi unaweka nyuma katika nafasi hii hapa. 977 00:40:00,044 --> 00:40:02,460 Hivyo katika muda mfupi, hata ingawa hii ni kuchukua us aina ya milele 978 00:40:02,460 --> 00:40:04,510 kwa kweli update wanaohusishwa orodha, kutambua 979 00:40:04,510 --> 00:40:06,580 kwamba shughuli za ni rahisi kiasi. 980 00:40:06,580 --> 00:40:10,030 Ni ya moja, mbili, tatu mstari wa kanuni hatimaye. 981 00:40:10,030 --> 00:40:12,780 Lakini kung'ata wale mstari wa kanuni labda 982 00:40:12,780 --> 00:40:16,350 ni kidogo ya mantiki kwamba ufanisi anauliza swali, ambapo ni sisi? 983 00:40:16,350 --> 00:40:18,970 Je, sisi mwanzoni, katikati, au mwisho? 984 00:40:18,970 --> 00:40:21,890 >> Sasa, kuna shaka baadhi ya wengine shughuli tupate kutekeleza. 985 00:40:21,890 --> 00:40:24,880 Na picha hizi hapa depict tu kile sisi tu alivyofanya kwa binadamu. 986 00:40:24,880 --> 00:40:26,080 Nini juu ya kuondolewa? 987 00:40:26,080 --> 00:40:30,650 Kama mimi nataka, kwa mfano, kuondoa namba 34 au 55, 988 00:40:30,650 --> 00:40:34,680 Nipate kuwa aina hiyo ya kificho, lakini mimi nina kwenda haja ya hatua moja au mbili. 989 00:40:34,680 --> 00:40:36,110 Kwa sababu nini mpya? 990 00:40:36,110 --> 00:40:40,460 Kama mimi kuondoa mtu mwishoni, kama idadi ya 55 na kisha 34, 991 00:40:40,460 --> 00:40:42,995 nini pia ina mabadiliko kama mimi kufanya hivyo? 992 00:40:42,995 --> 00:40:44,870 Nina si evict-- nini jina yako tena? 993 00:40:44,870 --> 00:40:45,380 >> Watazamaji: Jack. 994 00:40:45,380 --> 00:40:46,255 >> DAVID J. Malan: Jack. 995 00:40:46,255 --> 00:40:49,770 Nina si tu evict-- bure Jack, hivyo literally wito bure Jack, au angalau 996 00:40:49,770 --> 00:40:53,530 pointer huko pia, lakini sasa nini inahitaji mabadiliko na Petro? 997 00:40:53,530 --> 00:40:55,510 Mkono wake bora kuanza akizungumzia chini. 998 00:40:55,510 --> 00:40:59,300 Sababu kwa haraka kama mimi wito bure juu ya Jack, kama Petro bado akionyesha Jack 999 00:40:59,300 --> 00:41:02,530 na mimi hivyo kuweka apitaye orodha na upatikanaji pointer hii, 1000 00:41:02,530 --> 00:41:05,650 kwamba wakati wetu wa kale rafiki segmentation kosa ili kweli kick katika. 1001 00:41:05,650 --> 00:41:07,860 Kwa sababu tumekuwa aliyopewa kumbukumbu nyuma Jack. 1002 00:41:07,860 --> 00:41:10,760 >> Unaweza kukaa huko awkwardly kwa muda tu. 1003 00:41:10,760 --> 00:41:13,410 Kwa sababu tuna michache tu shughuli ya mwisho ya kuzingatia. 1004 00:41:13,410 --> 00:41:15,600 Kuondoa mkuu wa orodha, au beginning-- na hii moja ya 1005 00:41:15,600 --> 00:41:16,349 kidogo annoying. 1006 00:41:16,349 --> 00:41:19,640 Kwa sababu tuna kujua kwamba Gabe ni aina ya pekee katika mpango huu. 1007 00:41:19,640 --> 00:41:21,440 Kwa sababu kwa kweli, yeye ana pointer yake mwenyewe. 1008 00:41:21,440 --> 00:41:24,860 Yeye si tu kuwa alisema katika, kama ni karibu kila mtu mwingine hapa. 1009 00:41:24,860 --> 00:41:28,112 >> Hivyo wakati mkuu wa orodha ni kuondolewa, ambao mikono haja ya kubadili sasa? 1010 00:41:28,112 --> 00:41:29,070 Nini jina yako tena? 1011 00:41:29,070 --> 00:41:29,450 >> Watazamaji: Christine. 1012 00:41:29,450 --> 00:41:31,408 >> DAVID J. Malan: Mimi nina kubwa katika majina, inaonekana. 1013 00:41:31,408 --> 00:41:34,011 Hivyo Christine na Gabe, ambao mikono haja ya kubadili 1014 00:41:34,011 --> 00:41:36,510 wakati sisi kujaribu kuondoa Christine, namba 5, kutoka picha? 1015 00:41:36,510 --> 00:41:37,550 1016 00:41:37,550 --> 00:41:38,820 OK, hivyo hebu kufanya Gabe. 1017 00:41:38,820 --> 00:41:40,950 Gabe kinaendelea kwa uhakika, labda, katika namba 9. 1018 00:41:40,950 --> 00:41:42,230 1019 00:41:42,230 --> 00:41:44,642 Lakini nini ijayo lazima kutokea? 1020 00:41:44,642 --> 00:41:46,600 Watazamaji: Christine lazima kuwa null [inaudible]. 1021 00:41:46,600 --> 00:41:50,244 DAVID J. Malan: Sawa, sisi lazima pengine make-- nikasikia "null" mahali fulani. 1022 00:41:50,244 --> 00:41:51,410 Watazamaji: Null na bure yake. 1023 00:41:51,410 --> 00:41:51,855 DAVID J. Malan: null nini? 1024 00:41:51,855 --> 00:41:53,074 Watazamaji: Null na bure yake. 1025 00:41:53,074 --> 00:41:54,490 DAVID J. Malan: Null na bure yake. 1026 00:41:54,490 --> 00:41:55,422 Hivyo hii ni rahisi sana. 1027 00:41:55,422 --> 00:41:58,380 Na ni kamili kwamba wewe ni sasa aina ya amesimama pale, si wa mali. 1028 00:41:58,380 --> 00:42:00,430 Kwa sababu tumekuwa frikopplas kutoka kwenye orodha. 1029 00:42:00,430 --> 00:42:02,820 Ve ufanisi imekuwa yatima kutoka kwenye orodha. 1030 00:42:02,820 --> 00:42:07,770 Na hivyo sisi alikuwa bora wito bure sasa juu ya Christine kutoa kwamba kumbukumbu nyuma. 1031 00:42:07,770 --> 00:42:10,240 Vinginevyo kila wakati sisi kufuta nodi kutoka orodha 1032 00:42:10,240 --> 00:42:14,230 tupate kuwa maamuzi orodha mfupi, lakini si kweli kupungua 1033 00:42:14,230 --> 00:42:15,096 ukubwa katika kumbukumbu. 1034 00:42:15,096 --> 00:42:17,720 Na hivyo kama sisi kuendelea kuongeza na kuongeza, akiongeza mambo kwenye orodha, 1035 00:42:17,720 --> 00:42:19,280 kompyuta yangu ili kupata polepole na polepole na polepole, 1036 00:42:19,280 --> 00:42:21,740 kwa sababu mimi nina mbio nje ya kumbukumbu, hata kama nina si kweli 1037 00:42:21,740 --> 00:42:25,580 kutumia ka Christine ya ya kumbukumbu tena. 1038 00:42:25,580 --> 00:42:28,500 >> Hivyo katika mwisho kuna wengine matukio, ya course-- kuondolewa 1039 00:42:28,500 --> 00:42:30,640 katikati, kuondolewa mwishoni, kama sisi kuona. 1040 00:42:30,640 --> 00:42:32,348 Lakini zaidi ya kuvutia Changamoto sasa ni 1041 00:42:32,348 --> 00:42:34,770 kwenda kuwa kwa kuzingatia hasa nini wakati mbio ni. 1042 00:42:34,770 --> 00:42:36,640 Hivyo si tu unaweza kuweka yako vipande vya karatasi, kama, Gabe, 1043 00:42:36,640 --> 00:42:38,640 isingekuwa akili kutoa kila mtu stress mpira. 1044 00:42:38,640 --> 00:42:42,100 Asante sana kwa orodha yetu wanaohusishwa wa kujitolea hapa, kama unaweza. 1045 00:42:42,100 --> 00:42:45,320 >> [Makofi] 1046 00:42:45,320 --> 00:42:46,700 >> DAVID J. Malan: All wa kulia. 1047 00:42:46,700 --> 00:42:51,110 Hivyo wanandoa wa uchambuzi maswali basi, kama mimi naweza. 1048 00:42:51,110 --> 00:42:59,670 Tumeona nukuu hii kabla, O kubwa na Omega, mipaka juu 1049 00:42:59,670 --> 00:43:02,520 na mipaka ya chini juu ya mbio wakati wa baadhi ya algorithm. 1050 00:43:02,520 --> 00:43:04,950 Hivyo hebu fikiria tu wanandoa wa maswali. 1051 00:43:04,950 --> 00:43:07,090 >> Moja, na sisi alisema kabla ya, nini mbio 1052 00:43:07,090 --> 00:43:10,647 wakati wa kutafuta kwa orodha katika suala la kubwa O? 1053 00:43:10,647 --> 00:43:13,480 Nini amefungwa juu ya kuendesha wakati wa kutafuta orodha wanaohusishwa 1054 00:43:13,480 --> 00:43:16,340 kama kutekelezwa na kujitolea yetu hapa? 1055 00:43:16,340 --> 00:43:17,820 Ni O kubwa ya n, linear. 1056 00:43:17,820 --> 00:43:20,630 Kwa sababu katika hali mbaya zaidi, kipengele, kama 55, 1057 00:43:20,630 --> 00:43:23,830 sisi kuwa na kuangalia kwa inaweza kuwa ambapo Jack alikuwa, njia yote mwishoni. 1058 00:43:23,830 --> 00:43:28,250 Na kwa bahati mbaya, tofauti na safu hatuwezi kupata dhana wakati huu. 1059 00:43:28,250 --> 00:43:31,820 Hata ingawa yote ya binadamu wetu walikuwa sorted kutoka mambo madogo, 5, 1060 00:43:31,820 --> 00:43:35,900 njia yote hadi kipengele kubwa, 55, hiyo ni kawaida jambo zuri. 1061 00:43:35,900 --> 00:43:38,815 Lakini ni nini dhana kwamba tena kuruhusu sisi kufanya nini? 1062 00:43:38,815 --> 00:43:39,775 1063 00:43:39,775 --> 00:43:40,650 Watazamaji: [inaudible] 1064 00:43:40,650 --> 00:43:40,920 DAVID J. Malan: Sema tena? 1065 00:43:40,920 --> 00:43:41,800 Watazamaji: Random upatikanaji. 1066 00:43:41,800 --> 00:43:43,049 DAVID J. Malan: Random upatikanaji. 1067 00:43:43,049 --> 00:43:46,330 Na kwa upande hiyo ina maana tunaweza hakuna tena kutumia zeros dhaifu, Intuition, 1068 00:43:46,330 --> 00:43:49,365 na udhahiri wa kutumia binary kutafuta na kugawanya na kushinda. 1069 00:43:49,365 --> 00:43:51,240 Kwa sababu hata kama sisi binadamu inaweza wazi 1070 00:43:51,240 --> 00:43:54,610 kuona kwamba Andy au Kikristo walikuwa takribani katikati ya orodha, 1071 00:43:54,610 --> 00:43:57,670 sisi tu kujua kwamba kama kompyuta na skimming orodha 1072 00:43:57,670 --> 00:43:59,029 tangu mwanzo. 1073 00:43:59,029 --> 00:44:00,570 Hivyo tumekuwa wamekata kwamba upatikanaji random. 1074 00:44:00,570 --> 00:44:04,380 >> O Hivyo kubwa ya n sasa ni juu amefungwa juu ya search wakati wetu. 1075 00:44:04,380 --> 00:44:07,920 Nini juu ya omega ya search yetu? 1076 00:44:07,920 --> 00:44:11,535 Nini chini amefungwa juu ya kutafuta kwa baadhi ya idadi katika orodha hii? 1077 00:44:11,535 --> 00:44:12,410 Watazamaji: [inaudible] 1078 00:44:12,410 --> 00:44:13,040 DAVID J. Malan: Sema tena? 1079 00:44:13,040 --> 00:44:13,420 Watazamaji: One. 1080 00:44:13,420 --> 00:44:13,800 DAVID J. Malan: One. 1081 00:44:13,800 --> 00:44:14,760 Hivyo wakati mara kwa mara. 1082 00:44:14,760 --> 00:44:17,020 Katika kesi bora, Christine ni kweli mwanzoni mwa orodha. 1083 00:44:17,020 --> 00:44:19,020 Na sisi ni kuangalia kwa namba 5, hivyo sisi kupatikana yake. 1084 00:44:19,020 --> 00:44:19,787 Hivyo hakuna mpango kubwa. 1085 00:44:19,787 --> 00:44:22,370 Lakini yeye ni got kuwa katika mwanzo wa orodha katika kesi hii. 1086 00:44:22,370 --> 00:44:23,745 Nini juu ya kitu kama Futa? 1087 00:44:23,745 --> 00:44:24,717 1088 00:44:24,717 --> 00:44:26,300 Nini kama unataka kufuta kipengele? 1089 00:44:26,300 --> 00:44:29,200 Nini amefungwa juu na chini amefungwa juu ya kufuta kitu kutoka wanaohusishwa 1090 00:44:29,200 --> 00:44:29,699 orodha? 1091 00:44:29,699 --> 00:44:35,195 1092 00:44:35,195 --> 00:44:36,070 Watazamaji: [inaudible] 1093 00:44:36,070 --> 00:44:36,420 DAVID J. Malan: Sema tena? 1094 00:44:36,420 --> 00:44:37,067 Watazamaji: n. 1095 00:44:37,067 --> 00:44:38,900 DAVID J. Malan: n ni kweli juu amefungwa. 1096 00:44:38,900 --> 00:44:41,700 Kwa sababu katika kesi mbaya sisi kujaribu kufuta Jack, kama sisi tu hawakuwa. 1097 00:44:41,700 --> 00:44:43,050 Yeye ni njia yote mwishoni. 1098 00:44:43,050 --> 00:44:45,419 Inachukua sisi milele, au n hatua ya kumpata. 1099 00:44:45,419 --> 00:44:46,460 Hivyo hiyo ni amefungwa juu. 1100 00:44:46,460 --> 00:44:47,430 Hiyo ni linear, uhakika. 1101 00:44:47,430 --> 00:44:50,970 Na kesi bora mbio wakati, au mipaka ya chini katika kesi bora 1102 00:44:50,970 --> 00:44:51,975 itakuwa ni mara ya mara kwa mara. 1103 00:44:51,975 --> 00:44:54,600 Kwa sababu labda sisi kujaribu kufuta Christine, na sisi tu kupata bahati 1104 00:44:54,600 --> 00:44:55,558 yeye ni mwanzoni. 1105 00:44:55,558 --> 00:44:56,350 Sasa kusubiri dakika. 1106 00:44:56,350 --> 00:44:59,370 Gabe mara mwanzoni pia, na sisi pia alikuwa na update Gabe. 1107 00:44:59,370 --> 00:45:01,150 Hivyo hiyo haikuwa hatua moja tu. 1108 00:45:01,150 --> 00:45:04,210 Hivyo ni kweli mara kwa mara wakati, katika kesi bora, 1109 00:45:04,210 --> 00:45:06,345 kuondoa kipengele madogo? 1110 00:45:06,345 --> 00:45:07,360 1111 00:45:07,360 --> 00:45:10,960 Ni, hata ingawa inaweza kuwa mbili, tatu, au hata 100 mstari wa kanuni, 1112 00:45:10,960 --> 00:45:14,000 kama ni idadi sawa ya mistari, si katika baadhi kitanzi, 1113 00:45:14,000 --> 00:45:16,577 na uhuru wa ukubwa ya orodha, kabisa. 1114 00:45:16,577 --> 00:45:18,660 Kufuta kipengele katika mwanzo wa orodha, 1115 00:45:18,660 --> 00:45:21,940 hata kama sisi kuwa na kushughulika na Gabe, ni wakati wa mara kwa mara bado. 1116 00:45:21,940 --> 00:45:24,220 >> Hivyo hii inaonekana kama hatua kubwa nyuma. 1117 00:45:24,220 --> 00:45:27,000 Na nini kupoteza muda kama, katika wiki moja na wiki 1118 00:45:27,000 --> 00:45:30,250 zero tulikuwa si tu pseudocode code lakini code halisi 1119 00:45:30,250 --> 00:45:35,780 kutekeleza kitu ambacho ni logi msingi n, au kuingia, badala yake, ya n, msingi 2, 1120 00:45:35,780 --> 00:45:37,150 katika suala la mbio yake wakati. 1121 00:45:37,150 --> 00:45:40,710 Hivyo kwa nini heck ingekuwa tunataka kuanza kutumia kitu kama orodha wanaohusishwa? 1122 00:45:40,710 --> 00:45:41,517 Yeah. 1123 00:45:41,517 --> 00:45:44,022 >> Watazamaji: Hivyo unaweza kuongeza mambo ya safu. 1124 00:45:44,022 --> 00:45:46,230 DAVID J. Malan: Hivyo unaweza kuongeza mambo kwa safu. 1125 00:45:46,230 --> 00:45:47,550 Na hii pia ni ufadhili. 1126 00:45:47,550 --> 00:45:49,740 Na tutaweza kuendelea kuona hii, biashara-off, kiasi 1127 00:45:49,740 --> 00:45:51,573 kama tumeona biashara-off na kuunganisha aina. 1128 00:45:51,573 --> 00:45:54,606 Tunaweza kweli kasi ya kutafuta au kuchagua, badala yake, 1129 00:45:54,606 --> 00:45:57,480 kama sisi kutumia nafasi kidogo zaidi na na chunk ya ziada ya kumbukumbu 1130 00:45:57,480 --> 00:45:58,760 au safu kwa kuunganisha aina. 1131 00:45:58,760 --> 00:46:01,270 Lakini sisi kutumia zaidi nafasi, lakini sisi kuokoa muda. 1132 00:46:01,270 --> 00:46:04,820 Katika kesi hiyo, sisi ni kutoa up wakati lakini sisi ni 1133 00:46:04,820 --> 00:46:08,170 kupata mabadiliko, mabadiliko kama wewe, 1134 00:46:08,170 --> 00:46:10,280 ambayo ni arguably kipengele chanya. 1135 00:46:10,280 --> 00:46:11,520 >> Sisi ni pia kutumia nafasi. 1136 00:46:11,520 --> 00:46:13,710 Ni katika maana gani ni wanaohusishwa orodha ghali zaidi 1137 00:46:13,710 --> 00:46:15,700 katika suala la nafasi zaidi safu? 1138 00:46:15,700 --> 00:46:18,379 1139 00:46:18,379 --> 00:46:19,920 Ambapo ni nafasi ya ziada kuja kutoka? 1140 00:46:19,920 --> 00:46:20,460 Yeah? 1141 00:46:20,460 --> 00:46:21,800 >> Watazamaji: [inaudible] pointer. 1142 00:46:21,800 --> 00:46:23,310 >> DAVID J. Malan: Yeah, sisi pia kuwa pointer. 1143 00:46:23,310 --> 00:46:25,560 Hivyo hii ni minorly annoying kwa kuwa sipo 1144 00:46:25,560 --> 00:46:27,780 Mimi kuhifadhi tu int kuwakilisha int. 1145 00:46:27,780 --> 00:46:30,990 Mimi nina kuhifadhi int na a pointer, ambayo pia ni 32 bits. 1146 00:46:30,990 --> 00:46:33,470 Hivyo mimi nina literally mara mbili kiasi cha nafasi ya kushiriki. 1147 00:46:33,470 --> 00:46:36,040 Hivyo hiyo ni biashara-off, lakini hiyo ni katika kesi ya int. 1148 00:46:36,040 --> 00:46:39,580 Tuseme kwamba wewe si kuhifadhi int, lakini nadhani kila mmoja wa rectangles haya 1149 00:46:39,580 --> 00:46:43,290 au kila mmoja wa hawa binadamu mara anayewakilisha neno, neno la Kiingereza kuwa 1150 00:46:43,290 --> 00:46:46,430 inaweza kuwa wahusika tano, 10 wahusika, labda hata zaidi. 1151 00:46:46,430 --> 00:46:49,940 Kisha kuongeza bits 32 tu zaidi inaweza kuwa chini ya mpango kubwa. 1152 00:46:49,940 --> 00:46:52,160 >> Nini kama kila mmoja wa wanafunzi katika maandamano 1153 00:46:52,160 --> 00:46:55,107 walikuwa literally mwanafunzi structs kwamba kuwa na majina na nyumba na labda 1154 00:46:55,107 --> 00:46:57,065 namba za simu na Twitter Hushughulikia na kadhalika. 1155 00:46:57,065 --> 00:46:59,564 Basi wote wa mashamba tulianza kuzungumza juu ya siku nyingine, 1156 00:46:59,564 --> 00:47:02,410 kiasi kidogo ya mpango kubwa kama nodes wetu kupata zaidi ya kuvutia 1157 00:47:02,410 --> 00:47:05,972 na kubwa kwa kutumia, eh, ziada pointer tu kwa kiungo wao pamoja. 1158 00:47:05,972 --> 00:47:07,180 Lakini kwa kweli, ni biashara-off. 1159 00:47:07,180 --> 00:47:09,560 Na hakika, kanuni na ni zaidi tata, kama wewe utakuwa 1160 00:47:09,560 --> 00:47:11,770 kuona kwa kupitia skimming kuwa mfano fulani. 1161 00:47:11,770 --> 00:47:14,302 Lakini nini kama kulikuwa na baadhi grail takatifu hapa. 1162 00:47:14,302 --> 00:47:17,010 Nini kama hatuwezi kuchukua hatua nyuma lakini hatua kubwa mbele 1163 00:47:17,010 --> 00:47:19,180 na kutekeleza data muundo kupitia ambayo sisi 1164 00:47:19,180 --> 00:47:22,870 Unaweza kupata mambo kama Jack au Christine au mambo mengine yoyote 1165 00:47:22,870 --> 00:47:25,870 katika safu hii katika wakati kweli mara kwa mara? 1166 00:47:25,870 --> 00:47:26,920 Search ni mara kwa mara. 1167 00:47:26,920 --> 00:47:28,320 Kufuta ni mara kwa mara. 1168 00:47:28,320 --> 00:47:29,570 Insert ni mara kwa mara. 1169 00:47:29,570 --> 00:47:32,260 Wote wa shughuli hizo ni mara kwa mara. 1170 00:47:32,260 --> 00:47:33,750 Hiyo itakuwa grail zetu takatifu. 1171 00:47:33,750 --> 00:47:36,690 Na kwamba ni wapi sisi pick up wakati ujao. 1172 00:47:36,690 --> 00:47:38,600 Tazama wewe hapo. 1173 00:47:38,600 --> 00:47:39,371