1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [Sehemu ya 6] [Zaidi Starehe] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Chuo Kikuu cha Harvard] 3 00:00:04,000 --> 00:00:09,000 [Hii ni CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Tunaweza kichwa na sehemu yetu ya maswali. 5 00:00:11,000 --> 00:00:17,000 Mimi nimewatuma URL kwa nafasi kabla. 6 00:00:17,000 --> 00:00:22,000 mwanzo wa sehemu ya maswali kusema- 7 00:00:22,000 --> 00:00:26,000 inaonekana mimi si kabisa unsick-ni swali rahisi sana 8 00:00:26,000 --> 00:00:28,000 ya kile tu ni valgrind? 9 00:00:28,000 --> 00:00:30,000 Je valgrind kufanya? 10 00:00:30,000 --> 00:00:34,000 Mtu unataka kusema nini valgrind gani? 11 00:00:34,000 --> 00:00:36,000 [Mwanafunzi] Checks kumbukumbu uvujaji. 12 00:00:36,000 --> 00:00:41,000 Yeah, ni valgrind ujumla kumbukumbu kusahihisha. 13 00:00:41,000 --> 00:00:44,000 Ni, mwisho, anakwambia kama una uvujaji yoyote kumbukumbu, 14 00:00:44,000 --> 00:00:49,000 ambayo ni zaidi ya kile tunayatumia kwa sababu kama unataka 15 00:00:49,000 --> 00:00:54,000 kufanya vizuri katika kuweka tatizo au kama unataka 16 00:00:54,000 --> 00:00:59,000 kupata kwenye bodi kubwa, unahitaji kuwa na uvujaji hakuna kumbukumbu yo yote, 17 00:00:59,000 --> 00:01:01,000 na katika kesi una leak kumbukumbu kwamba huwezi kupata, 18 00:01:01,000 --> 00:01:04,000 pia kukumbuka kwamba wakati wowote wewe kufungua faili 19 00:01:04,000 --> 00:01:07,000 na kama huna kulifunga, hiyo leak kumbukumbu. 20 00:01:07,000 --> 00:01:10,000 >> mengi ya watu ni kuangalia kwa baadhi nodi kwamba wao siyo kumkomboa 21 00:01:10,000 --> 00:01:15,000 wakati kwa kweli, hawakuwa karibu kamusi katika hatua ya kwanza kabisa. 22 00:01:15,000 --> 00:01:19,000 Unakuelekeza pia kama una batili anasoma au anaandika, 23 00:01:19,000 --> 00:01:22,000 ambayo ina maana kama wewe kujaribu na kuweka thamani 24 00:01:22,000 --> 00:01:26,000 hiyo ni zaidi ya mwisho wa lundo na haina kutokea kwa kosa seg 25 00:01:26,000 --> 00:01:30,000 lakini valgrind upatikanaji wa samaki, kama ni lazima si kweli kuwa kuandika huko, 26 00:01:30,000 --> 00:01:33,000 na hivyo wewe dhahiri wanapaswa kuwa yoyote ya wale aidha. 27 00:01:33,000 --> 00:01:38,000 Jinsi gani unaweza kutumia valgrind? 28 00:01:38,000 --> 00:01:42,000 Jinsi gani unaweza kutumia valgrind? 29 00:01:42,000 --> 00:01:45,000 >> Ni swali ya jumla ya 30 00:01:45,000 --> 00:01:49,000 aina ya kukimbia na kuangalia pato. 31 00:01:49,000 --> 00:01:51,000 pato ni balaa mengi ya nyakati. 32 00:01:51,000 --> 00:01:54,000 Kuna pia furaha makosa ambapo kama una baadhi kitu vibaya sana 33 00:01:54,000 --> 00:01:59,000 yanayotokea katika kitanzi, kisha hatimaye kusema, "makosa Njia nyingi sana. 34 00:01:59,000 --> 00:02:03,000 Mimi naenda kuacha kuhesabu sasa. " 35 00:02:03,000 --> 00:02:08,000 Ni kimsingi textual pato kwamba una kuchanganua. 36 00:02:08,000 --> 00:02:13,000 Katika mwisho, itakuambia uvujaji yoyote kumbukumbu kwamba una, 37 00:02:13,000 --> 00:02:16,000 wangapi vitalu, ambayo inaweza kuwa na manufaa kwa sababu 38 00:02:16,000 --> 00:02:20,000 ikiwa ni moja ya kuzuia unfreed, basi ni kawaida rahisi kupata 39 00:02:20,000 --> 00:02:23,000 kuliko 1000 vitalu unfreed. 40 00:02:23,000 --> 00:02:26,000 1000 vitalu unfreed pengine ina maana wewe si kumkomboa 41 00:02:26,000 --> 00:02:30,000 orodha yako wanaohusishwa ipasavyo au kitu. 42 00:02:30,000 --> 00:02:32,000 Hiyo valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Sasa tuna sehemu yetu ya maswali, 44 00:02:35,000 --> 00:02:38,000 ambayo huna haja ya shusha. 45 00:02:38,000 --> 00:02:41,000 Unaweza bonyeza juu ya jina langu na kuvuta yao juu katika nafasi. 46 00:02:41,000 --> 00:02:44,000 Sasa bonyeza yangu. 47 00:02:44,000 --> 00:02:46,000 Marekebisho 1 itakuwa stack, ambayo sisi ni kufanya kwanza. 48 00:02:46,000 --> 00:02:55,000 Marekebisho 2 itakuwa foleni, na Revision 3 itakuwa moja moja wanaohusishwa orodha. 49 00:02:55,000 --> 00:02:58,000 Kuanzia mbali na stack yetu. 50 00:02:58,000 --> 00:03:02,000 Kama anasema hapa, stack ni moja ya msingi zaidi, 51 00:03:02,000 --> 00:03:07,000 msingi data miundo ya sayansi ya kompyuta. 52 00:03:07,000 --> 00:03:11,000 mfano sana prototypical ni 53 00:03:11,000 --> 00:03:13,000 stack ya trays katika ukumbi dining. 54 00:03:13,000 --> 00:03:16,000 Ni kimsingi wakati wewe ni kuwa ilianzisha stack, 55 00:03:16,000 --> 00:03:20,000 mtu ni kwenda kusema, "Oh, kama stack ya trays." 56 00:03:20,000 --> 00:03:22,000 Wewe stack trays up. 57 00:03:22,000 --> 00:03:24,000 Kisha wakati wa kwenda kuvuta tray, 58 00:03:24,000 --> 00:03:31,000 tray kwanza hiyo kupata vunjwa ni moja ya mwisho kwamba ilikuwa kuweka juu ya stack. 59 00:03:31,000 --> 00:03:34,000 stack pia-kama inavyosema hapa- 60 00:03:34,000 --> 00:03:37,000 tuna sehemu ya kumbukumbu ya kuitwa stack. 61 00:03:37,000 --> 00:03:40,000 Na ni kwa nini inaitwa stack? 62 00:03:40,000 --> 00:03:42,000 >> Kwa sababu, kama muundo stack data, 63 00:03:42,000 --> 00:03:46,000 inasukuma na POP muafaka stack juu ya stack, 64 00:03:46,000 --> 00:03:53,000 ambapo muafaka stack ni kama wito maalum wa kazi. 65 00:03:53,000 --> 00:03:57,000 Na kama stack, utakuwa daima kuwa na kurudi 66 00:03:57,000 --> 00:04:03,000 kutoka kwa mwito wa kazi kabla ya wewe wanaweza kupata chini ndani ya muafaka chini stack tena. 67 00:04:03,000 --> 00:04:08,000 Huwezi kuwa kuu wito foo wito bar na kurudi bar moja kwa moja kuu. 68 00:04:08,000 --> 00:04:14,000 Ni daima got kufuata stack sahihi kusukuma na popping. 69 00:04:14,000 --> 00:04:18,000 shughuli mbili, kama nilivyosema, ni kushinikiza na pop. 70 00:04:18,000 --> 00:04:20,000 Wale ni zima masharti. 71 00:04:20,000 --> 00:04:26,000 Unapaswa kujua kushinikiza na pop katika suala la mwingi bila kujali. 72 00:04:26,000 --> 00:04:28,000 Tutaweza kuona foleni ni aina ya tofauti. 73 00:04:28,000 --> 00:04:32,000 Ni kweli haina muda wote, lakini msukumo na pop ni zima kwa mwingi. 74 00:04:32,000 --> 00:04:34,000 Push ni kuweka tu juu ya stack. 75 00:04:34,000 --> 00:04:37,000 Picha ni kuchukua mbali stack. 76 00:04:37,000 --> 00:04:43,000 Na tunaona hapa tuna struct wetu typedef stack, 77 00:04:43,000 --> 00:04:46,000 hivyo tuna masharti Char **. 78 00:04:46,000 --> 00:04:51,000 Msitishwe kwa ** yoyote. 79 00:04:51,000 --> 00:04:54,000 Hii ni kwenda kuishia kuwa safu ya masharti 80 00:04:54,000 --> 00:04:58,000 au safu ya kuyatumia kwa wahusika, ambapo 81 00:04:58,000 --> 00:05:00,000 kuyatumia kwa wahusika huwa na kuwa masharti. 82 00:05:00,000 --> 00:05:05,000 Haina kuwa masharti, lakini hapa, wao wanaenda kuwa masharti. 83 00:05:05,000 --> 00:05:08,000 >> Tuna safu ya masharti. 84 00:05:08,000 --> 00:05:14,000 Tuna kawaida, ambayo inawakilisha jinsi wengi mambo ni sasa juu ya stack, 85 00:05:14,000 --> 00:05:19,000 na kisha tuna uwezo, ambayo ni wangapi vipengele inaweza kuwa juu ya stack. 86 00:05:19,000 --> 00:05:22,000 uwezo wanapaswa kuanza mbali kama kitu zaidi ya 1, 87 00:05:22,000 --> 00:05:27,000 lakini ukubwa ni kwenda kuanza off kama 0. 88 00:05:27,000 --> 00:05:36,000 Sasa, kuna kimsingi tatu tofauti ambazo unaweza kufikiri ya stack. 89 00:05:36,000 --> 00:05:39,000 Naam, kuna pengine zaidi, lakini njia mbili kuu ni 90 00:05:39,000 --> 00:05:43,000 unaweza kutekeleza ni kutumia safu, au unaweza kutekeleza ni kutumia orodha zinazoungwa. 91 00:05:43,000 --> 00:05:48,000 Wanaohusishwa orodha ni aina ya trivial kufanya mwingi kutoka. 92 00:05:48,000 --> 00:05:51,000 Ni rahisi sana kufanya stack kutumia orodha zilizounganishwa, 93 00:05:51,000 --> 00:05:55,000 hivyo hapa, sisi ni kwenda kufanya stack kutumia arrays, 94 00:05:55,000 --> 00:05:59,000 na kisha kwa kutumia arrays, pia kuna njia mbili unaweza kufikiri juu yake. 95 00:05:59,000 --> 00:06:01,000 Kabla ya hapo, mimi alisema tuna uwezo kwa stack, 96 00:06:01,000 --> 00:06:04,000 hivyo tunaweza fit kipengele juu ya stack. 97 00:06:04,000 --> 00:06:09,000 >> njia moja inaweza kutokea ni haraka kama wewe hit vipengele 10, basi wewe ni kosa. 98 00:06:09,000 --> 00:06:13,000 Unaweza kujua kwamba kuna ghorofani amefungwa ya mambo 10 katika ulimwengu 99 00:06:13,000 --> 00:06:16,000 kwamba hutaweza kuwa na mambo zaidi ya 10 juu ya stack yako, 100 00:06:16,000 --> 00:06:20,000 katika kesi ambayo unaweza kuwa juu amefungwa juu ya ukubwa wa stack yako. 101 00:06:20,000 --> 00:06:23,000 Au unaweza kuwa na stack yako kuwa unbounded, 102 00:06:23,000 --> 00:06:27,000 lakini kama wewe ni kufanya safu, hiyo ina maana kwamba kila wakati wewe hit vipengele 10, 103 00:06:27,000 --> 00:06:29,000 basi wewe ni kwenda na kukua kwa vipengele 20, na wakati hit vipengele 20, 104 00:06:29,000 --> 00:06:33,000 wewe utaenda kuwa na kukua safu yako ya vipengele 30 au vipengele 40. 105 00:06:33,000 --> 00:06:37,000 Wewe ni kwenda haja ya kuongeza uwezo, ambayo ni nini tunakwenda kufanya hapa. 106 00:06:37,000 --> 00:06:40,000 Kila wakati sisi kufikia upeo wa ukubwa wa stack yetu, 107 00:06:40,000 --> 00:06:46,000 wakati sisi kushinikiza juu ya kitu kingine, sisi ni kwenda haja ya kuongeza uwezo. 108 00:06:46,000 --> 00:06:50,000 Hapa, tuna msukumo alitangaza kama kushinikiza bool (Char * str). 109 00:06:50,000 --> 00:06:54,000 Char * str ni string kwamba sisi ni kusukuma kwenye stack, 110 00:06:54,000 --> 00:06:58,000 na bool tu anasema iwapo sisi ilifanikiwa au alishindwa. 111 00:06:58,000 --> 00:07:00,000 >> Tutashindwaje? 112 00:07:00,000 --> 00:07:04,000 Je, ni hali tu kwamba unaweza kufikiria 113 00:07:04,000 --> 00:07:07,000 ambapo tunataka haja ya kurudi uongo? 114 00:07:07,000 --> 00:07:09,000 Yeah. 115 00:07:09,000 --> 00:07:12,000 [Mwanafunzi] Kama ni kamili na sisi ni kutumia utekelezaji imepakana. 116 00:07:12,000 --> 00:07:17,000 Yeah, hivyo ni jinsi gani sisi define-yeye akajibu 117 00:07:17,000 --> 00:07:23,000 kama ni kamili na sisi ni kutumia utekelezaji imepakana. 118 00:07:23,000 --> 00:07:26,000 Kisha sisi dhahiri kurudi uongo. 119 00:07:26,000 --> 00:07:31,000 Haraka kama sisi hit mambo 10 katika safu, hatuwezi fit 11, hivyo sisi kurudi uongo. 120 00:07:31,000 --> 00:07:32,000 Nini kama ni unbounded? Yeah. 121 00:07:32,000 --> 00:07:38,000 Kama huwezi kupanua safu kwa sababu fulani. 122 00:07:38,000 --> 00:07:43,000 Yeah, hivyo kumbukumbu ni rasilimali mdogo, 123 00:07:43,000 --> 00:07:51,000 na hatimaye, kama sisi kuweka mambo kusukuma kwenye stack tena na tena, 124 00:07:51,000 --> 00:07:54,000 sisi ni kwenda kujaribu na kutenga safu kubwa ya kifafa 125 00:07:54,000 --> 00:07:59,000 uwezo mkubwa zaidi, na malloc au chochote sisi ni kutumia ni kwenda na kurudi uongo. 126 00:07:59,000 --> 00:08:02,000 Naam, malloc atarudi null. 127 00:08:02,000 --> 00:08:05,000 >> Kumbuka, kila wakati milele kupiga malloc, unapaswa kuwa kuangalia ili kuona kama 128 00:08:05,000 --> 00:08:12,000 anarudi null au mwingine kwamba ni punguzo usahihi. 129 00:08:12,000 --> 00:08:17,000 Tangu tunataka kuwa na stack unbounded, 130 00:08:17,000 --> 00:08:21,000 Kesi tu tunakwenda tunarudi uongo ni kama tutajaribu 131 00:08:21,000 --> 00:08:26,000 kuongeza uwezo na malloc au chochote anarudi uongo. 132 00:08:26,000 --> 00:08:30,000 Kisha pop inachukua hoja hakuna, 133 00:08:30,000 --> 00:08:37,000 na kuirudisha string kwamba ni juu ya stack. 134 00:08:37,000 --> 00:08:41,000 Chochote alikuwa hivi karibuni juu ya kusukuma stack ni nini pop ni kurudi, 135 00:08:41,000 --> 00:08:44,000 na pia kuondosha ni kutoka stack. 136 00:08:44,000 --> 00:08:50,000 Na taarifa kwamba kuirudisha null kama kuna chochote juu ya stack. 137 00:08:50,000 --> 00:08:53,000 Daima ni kwamba inawezekana stack ni tupu. 138 00:08:53,000 --> 00:08:55,000 Katika Java, kama wewe ni kutumika kwamba, au lugha nyingine, 139 00:08:55,000 --> 00:09:01,000 kujaribu pop kutoka stack tupu inaweza kusababisha ubaguzi au kitu. 140 00:09:01,000 --> 00:09:09,000 >> Lakini katika C, null ni aina ya mengi ya matukio jinsi sisi kushughulikia matatizo haya. 141 00:09:09,000 --> 00:09:13,000 Msimamizi wa null ni jinsi tunakwenda yanamaanisha kwamba stack ilikuwa tupu. 142 00:09:13,000 --> 00:09:16,000 Tumekuwa zinazotolewa kificho kwamba mtihani utendaji stack yako, 143 00:09:16,000 --> 00:09:19,000 kutekeleza kushinikiza na pop. 144 00:09:19,000 --> 00:09:23,000 Hii haitakuwa mengi ya code. 145 00:09:23,000 --> 00:09:40,000 Nami-kweli, kabla ya sisi kufanya hivyo, ladha, ladha- 146 00:09:40,000 --> 00:09:44,000 kama si kuiona, malloc si kazi tu 147 00:09:44,000 --> 00:09:47,000 kwamba inatenga kumbukumbu juu ya lundo kwa ajili yenu. 148 00:09:47,000 --> 00:09:51,000 Kuna familia ya kazi alloc. 149 00:09:51,000 --> 00:09:53,000 kwanza ni malloc, ambayo wewe ni kutumika. 150 00:09:53,000 --> 00:09:56,000 Kisha kuna calloc, ambayo haina kitu kimoja kama malloc, 151 00:09:56,000 --> 00:09:59,000 lakini itakuwa sifuri kila kitu kwa ajili yenu. 152 00:09:59,000 --> 00:10:04,000 Kama ve milele alitaka kuweka kila kitu kwa null baada mallocing kitu 153 00:10:04,000 --> 00:10:06,000 unapaswa kuwa tu kutumika calloc katika nafasi ya kwanza badala ya kuandika 154 00:10:06,000 --> 00:10:09,000 kwa kitanzi kwa sifuri nje block nzima ya kumbukumbu. 155 00:10:09,000 --> 00:10:15,000 >> Realloc ni kama malloc na ina mengi ya matukio maalum, 156 00:10:15,000 --> 00:10:19,000 lakini kimsingi nini realloc gani ni 157 00:10:19,000 --> 00:10:24,000 inachukua pointer kwamba alikuwa tayari zimetengwa. 158 00:10:24,000 --> 00:10:27,000 Realloc ni kazi unataka kulipa kipaumbele hapa. 159 00:10:27,000 --> 00:10:31,000 Inachukua pointer kwamba alikuwa tayari kurudi kutoka malloc. 160 00:10:31,000 --> 00:10:35,000 Hebu sema wewe kuomba kutoka malloc pointer ya ka 10. 161 00:10:35,000 --> 00:10:38,000 Kisha baadaye wewe kutambua alitaka ka 20, 162 00:10:38,000 --> 00:10:42,000 hivyo wewe piga juu ya realloc kwamba pointer na ka 20, 163 00:10:42,000 --> 00:10:47,000 na realloc moja kwa moja nakala juu ya kila kitu kwa ajili yenu. 164 00:10:47,000 --> 00:10:51,000 Kama wewe tu kuitwa malloc tena, kama nina block ya ka 10. 165 00:10:51,000 --> 00:10:53,000 Sasa mimi haja block ya ka 20, 166 00:10:53,000 --> 00:10:58,000 hivyo kama mimi malloc ka 20, basi nina manually nakala zaidi ya ka 10 ni kitu cha kwanza 167 00:10:58,000 --> 00:11:01,000 katika jambo la pili na kisha bure jambo la kwanza. 168 00:11:01,000 --> 00:11:04,000 Realloc kushughulikia kwamba kwa ajili yenu. 169 00:11:04,000 --> 00:11:11,000 >> Notice signature ni kwenda kuwa utupu *, 170 00:11:11,000 --> 00:11:15,000 ambayo ni haki ya kurudi pointer block ya kumbukumbu, 171 00:11:15,000 --> 00:11:17,000 kisha utupu * PTR. 172 00:11:17,000 --> 00:11:22,000 Unaweza kufikiri ya * utupu kama pointer generic. 173 00:11:22,000 --> 00:11:27,000 Kwa ujumla, kamwe kukabiliana na * batili, 174 00:11:27,000 --> 00:11:30,000 lakini malloc ni kurudi * batili, na kisha ni kutumika tu kama 175 00:11:30,000 --> 00:11:34,000 hii ni kweli kwenda kuwa * Char. 176 00:11:34,000 --> 00:11:37,000 uliopita utupu * ambayo yamekuwa akarudi na malloc 177 00:11:37,000 --> 00:11:41,000 sasa inaenda kuwa kupita kwa realloc, na kisha ukubwa 178 00:11:41,000 --> 00:11:49,000 ni idadi mpya ya ka unataka kutenga, hivyo uwezo wako mpya. 179 00:11:49,000 --> 00:11:57,000 Mimi nitakupa dakika kadhaa, na kufanya hivyo katika nafasi yetu. 180 00:11:57,000 --> 00:12:02,000 Anza na Revision 1. 181 00:12:16,000 --> 00:12:21,000 Mimi nitaacha wewe baada hopefully kuhusu muda wa kutosha wa kutekeleza kushinikiza, 182 00:12:21,000 --> 00:12:24,000 na kisha mimi nitakupa mwingine mapumziko kufanya pop. 183 00:12:24,000 --> 00:12:27,000 Lakini ni kweli si kwamba code sana wakati wote. 184 00:12:27,000 --> 00:12:35,000 code zaidi pengine ni mambo kupanua, kupanua uwezo. 185 00:12:35,000 --> 00:12:39,000 Sawa, hakuna shinikizo kabisa kufanyika, 186 00:12:39,000 --> 00:12:47,000 lakini muda mrefu kama wewe kujisikia kama uko kwenye njia ya haki, kwamba ni vizuri. 187 00:12:47,000 --> 00:12:53,000 >> Je, mtu yeyote yoyote code wao kujisikia vizuri na mimi kuunganisha up? 188 00:12:53,000 --> 00:12:59,000 Yeah, mimi, bali haina mtu yeyote yoyote code naweza kuvuta up? 189 00:12:59,000 --> 00:13:05,000 Sawa, unaweza kuanza, ila it, chochote ni? 190 00:13:05,000 --> 00:13:09,000 Mimi daima kusahau kwamba hatua. 191 00:13:09,000 --> 00:13:15,000 Okay, kuangalia kushinikiza, 192 00:13:15,000 --> 00:13:18,000 unataka kueleza code yako? 193 00:13:18,000 --> 00:13:24,000 [Mwanafunzi] Awali ya yote, mimi kuongezeka ukubwa. 194 00:13:24,000 --> 00:13:28,000 Nadhani labda mimi lazima kuwa na kwamba-anyway, mimi kuongezeka ukubwa, 195 00:13:28,000 --> 00:13:31,000 na mimi kuona kama ni chini ya uwezo. 196 00:13:31,000 --> 00:13:36,000 Na kama ni chini ya uwezo, mimi kuongeza safu ya kwamba tayari tunao. 197 00:13:36,000 --> 00:13:42,000 Na kama siyo, mimi nitaongeza uwezo kwa 2, 198 00:13:42,000 --> 00:13:50,000 na mimi reallocate safu masharti kwa kitu fulani na ukubwa kubwa uwezo sasa. 199 00:13:50,000 --> 00:13:55,000 Na kisha kama kwamba inashindwa, nawaambia mtumiaji na kurudi uongo, 200 00:13:55,000 --> 00:14:04,000 na ikiwa ni faini, basi mimi kuweka kamba katika doa mpya. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Pia taarifa kwamba sisi kutumika nzuri bitwise operator hapa 202 00:14:07,000 --> 00:14:09,000 kuzidisha kwa 2. 203 00:14:09,000 --> 00:14:11,000 Kumbuka, kuhama kushoto ni daima kwenda tele kwa 2. 204 00:14:11,000 --> 00:14:15,000 Kuhama haki ni kugawanywa na 2 kwa muda mrefu kama wewe kumbuka kwamba ina maana 205 00:14:15,000 --> 00:14:18,000 kugawanya na 2 kama katika integer kugawanywa na 2. 206 00:14:18,000 --> 00:14:20,000 Ni wanaweza butu 1 hapa au pale. 207 00:14:20,000 --> 00:14:26,000 Lakini mabadiliko ya kushoto na 1 daima ni kwenda kuwa kuyagawa kwa 2, 208 00:14:26,000 --> 00:14:32,000 isipokuwa wewe kufurika mipaka ya integer, na basi itakuwa si kuwa. 209 00:14:32,000 --> 00:14:34,000 maoni upande. 210 00:14:34,000 --> 00:14:39,000 Mimi kama kufanya-hii si kwenda na mabadiliko ya coding njia yoyote chochote, 211 00:14:39,000 --> 00:14:48,000 lakini mimi kama kwa kufanya kitu kama hiki. 212 00:14:48,000 --> 00:14:51,000 Ni kweli ni kwenda kufanya ni kidogo tena. 213 00:15:04,000 --> 00:15:08,000 Labda hii si kesi kamili kuonyesha hili, 214 00:15:08,000 --> 00:15:14,000 lakini mimi kama sehemu ya ndani ya vitalu haya ya- 215 00:15:14,000 --> 00:15:17,000 sawa, kama hii ikiwa ikitokea, basi mimi naenda kufanya kitu fulani, 216 00:15:17,000 --> 00:15:19,000 na kisha kazi ni kosa. 217 00:15:19,000 --> 00:15:22,000 Mimi hawana haja ya basi kitabu macho yangu njia yote chini kazi 218 00:15:22,000 --> 00:15:25,000 kuona nini kinatokea baada ya mwingine. 219 00:15:25,000 --> 00:15:27,000 Ni kama hii ikiwa ikitokea, basi mimi tu kurudi. 220 00:15:27,000 --> 00:15:30,000 Ni pia ina nice aliongeza faida ya kila kitu zaidi ya hii 221 00:15:30,000 --> 00:15:33,000 sasa ni kubadilishwa kushoto mara moja. 222 00:15:33,000 --> 00:15:40,000 Mimi hakuna haja tena-kama wewe milele karibu ridiculously mrefu mistari, 223 00:15:40,000 --> 00:15:45,000 kisha wale ka 4 inaweza kusaidia, na pia kitu zaidi ni kushoto, 224 00:15:45,000 --> 00:15:48,000 chini kuzidiwa unaweza kujisikia kama kama-sawa, mimi na kukumbuka 225 00:15:48,000 --> 00:15:53,000 Mimi nina sasa katika kitanzi wakati ndani ya ndani ya mwingine wa kwa kitanzi. 226 00:15:53,000 --> 00:15:58,000 Popote unaweza kufanya hivyo kurudi mara moja, mimi aina ya kama. 227 00:15:58,000 --> 00:16:05,000 Ni kabisa hiari na si inatarajiwa kwa njia yoyote. 228 00:16:05,000 --> 00:16:12,000 >> [Mwanafunzi] kuwe kawaida - katika hali ya kushindwa? 229 00:16:12,000 --> 00:16:19,000 hali ya kushindwa hapa ni sisi kushindwa realloc, hivyo ndiyo. 230 00:16:19,000 --> 00:16:22,000 Angalia jinsi katika hali ya kushindwa, labda, 231 00:16:22,000 --> 00:16:26,000 isipokuwa sisi bure stuff baadaye, sisi ni daima kwenda kushindwa 232 00:16:26,000 --> 00:16:29,000 hakuna jambo mara ngapi sisi kujaribu kushinikiza kitu. 233 00:16:29,000 --> 00:16:32,000 Kama tutaendelea kusukuma, sisi kuendelea incrementing kawaida, 234 00:16:32,000 --> 00:16:36,000 ingawa sisi si kuweka kitu chochote kwenye stack. 235 00:16:36,000 --> 00:16:39,000 Kawaida hatuwezi increment ukubwa mpaka 236 00:16:39,000 --> 00:16:43,000 baada tumefanikiwa kuweka kwenye stack. 237 00:16:43,000 --> 00:16:50,000 Tunataka kufanya hivyo, wanasema, aidha hapa na hapa. 238 00:16:50,000 --> 00:16:56,000 Na kisha badala ya kusema s.size ≤ uwezo, ni chini ya uwezo, 239 00:16:56,000 --> 00:17:01,000 tu kwa sababu sisi wakiongozwa ambapo kila kitu kilikuwa. 240 00:17:01,000 --> 00:17:07,000 >> Na kumbuka, mahali tu kwamba sisi inaweza uwezekano kurudi uongo 241 00:17:07,000 --> 00:17:14,000 ni hapa, ambapo realloc akarudi null, 242 00:17:14,000 --> 00:17:19,000 na kama kutokea kwa kukumbuka makosa ya hali, 243 00:17:19,000 --> 00:17:22,000 labda unaweza kufikiria kesi hii ambapo unataka magazeti makosa ya hali, 244 00:17:22,000 --> 00:17:26,000 hivyo fprintf stderr badala ya kuchapa moja kwa moja na nje ya kiwango. 245 00:17:26,000 --> 00:17:31,000 Tena, kwamba si matumaini, lakini kama ni makosa, 246 00:17:31,000 --> 00:17:41,000 aina printf, basi unaweza wanataka kufanya hivyo magazeti kwa makosa ya hali badala ya nje ya kiwango. 247 00:17:41,000 --> 00:17:44,000 >> Mtu yeyote kuwa kitu kingine kukumbuka? Ndiyo. 248 00:17:44,000 --> 00:17:47,000 [Mwanafunzi] Je, unaweza kwenda zaidi ya [inaudible]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Ndiyo, binariness wake halisi au tu ni nini? 250 00:17:55,000 --> 00:17:57,000 [Mwanafunzi] Basi wewe kuzidisha ni kwa 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Yeah, kimsingi. 252 00:17:59,000 --> 00:18:11,000 Katika nchi binary, sisi daima kuwa kuweka wetu wa tarakimu. 253 00:18:11,000 --> 00:18:22,000 Shifting hii kushoto na 1 kimsingi kuwekeza hapa upande wa kulia. 254 00:18:22,000 --> 00:18:25,000 Rudi hii, tu kukumbuka kwamba kila kitu katika binary 255 00:18:25,000 --> 00:18:28,000 ni nguvu ya 2, hivyo hii inawakilisha 2-0, 256 00:18:28,000 --> 00:18:30,000 hii 2-1, hii 2-2. 257 00:18:30,000 --> 00:18:33,000 Kwa kuingiza 0 kwa upande wa kulia sasa, sisi tu kuhama kila kitu juu. 258 00:18:33,000 --> 00:18:38,000 Nini kutumika kuwa 2-0 ni sasa 2-1, ni 2-2. 259 00:18:38,000 --> 00:18:41,000 upande wa kulia kwamba sisi kuingizwa 260 00:18:41,000 --> 00:18:44,000 ni lazima itakuwa 0, 261 00:18:44,000 --> 00:18:46,000 ambayo hufanya akili. 262 00:18:46,000 --> 00:18:49,000 Kama umewahi kuzidisha idadi na 2, si kwenda kuishia isiyo ya kawaida, 263 00:18:49,000 --> 00:18:54,000 hivyo 2 mahali 0 lazima 0, 264 00:18:54,000 --> 00:18:59,000 na hii ni kile nusu alionya kuhusu kabla ni kama huna kutokea kuhama 265 00:18:59,000 --> 00:19:01,000 zaidi ya idadi ya sarafu katika integer, 266 00:19:01,000 --> 00:19:04,000 kisha 1 huu ni kwenda kuishia kwenda mbali. 267 00:19:04,000 --> 00:19:10,000 Hiyo tu wasiwasi kama kutokea kwa kuwa kushughulika na uwezo kweli kubwa. 268 00:19:10,000 --> 00:19:15,000 Lakini katika hatua hiyo, basi wewe ni kushughulika na safu ya mabilioni ya mambo, 269 00:19:15,000 --> 00:19:25,000 ambayo inaweza kufaa katika kumbukumbu anyway. 270 00:19:25,000 --> 00:19:31,000 >> Sasa tunaweza kupata pop, ambayo ni rahisi hata. 271 00:19:31,000 --> 00:19:36,000 Unaweza kufanya hivyo kama kama wewe kutokea pop rundo zima, 272 00:19:36,000 --> 00:19:38,000 na sasa uko katika uwezo nusu tena. 273 00:19:38,000 --> 00:19:42,000 Unaweza realloc shrink kiasi cha kumbukumbu una, 274 00:19:42,000 --> 00:19:47,000 lakini huna na wasiwasi juu ya kwamba, hivyo tu realloc kesi ni kwenda kuwa 275 00:19:47,000 --> 00:19:50,000 kuongezeka kumbukumbu, kamwe kushuka kumbukumbu, 276 00:19:50,000 --> 00:19:59,000 ambayo ni kwenda kufanya super pop rahisi. 277 00:19:59,000 --> 00:20:02,000 Sasa foleni, ambayo ni kwenda kuwa kama mwingi, 278 00:20:02,000 --> 00:20:06,000 lakini ili kwamba kuchukua mambo ya nje ni kuachwa. 279 00:20:06,000 --> 00:20:10,000 Mfano wa foleni ni mstari, 280 00:20:10,000 --> 00:20:12,000 hivyo mimi nadhani kama ungekuwa Kiingereza, napenda kuwa alisema 281 00:20:12,000 --> 00:20:17,000 Mfano wa foleni ni foleni. 282 00:20:17,000 --> 00:20:22,000 Hivyo kama mstari, kama wewe ni mtu wa kwanza katika mstari, 283 00:20:22,000 --> 00:20:24,000 wanatarajia kuwa mtu wa kwanza nje ya mstari. 284 00:20:24,000 --> 00:20:31,000 Kama wewe ni mtu wa mwisho katika mstari, wewe ni kwenda kuwa mtu wa mwisho serviced. 285 00:20:31,000 --> 00:20:35,000 Tunatoa wito kuwa mfano FIFO, ambapo ilikuwa stack LIFO mfano. 286 00:20:35,000 --> 00:20:40,000 Wale maneno ni pretty zima. 287 00:20:40,000 --> 00:20:46,000 >> Kama mwingi na tofauti na arrays, foleni kawaida hawana kuruhusu upatikanaji wa vipengele katika katikati. 288 00:20:46,000 --> 00:20:50,000 Hapa, stack, tuna msukumo na pop. 289 00:20:50,000 --> 00:20:54,000 Hapa, sisi kutokea kwa niliyowaitia enqueue na dequeue. 290 00:20:54,000 --> 00:20:58,000 Mimi pia aliwasikia kuitwa kuhama na unshift. 291 00:20:58,000 --> 00:21:02,000 Nimesikia watu wakisema kushinikiza na pop na pia yanahusu foleni. 292 00:21:02,000 --> 00:21:05,000 Nimesikia Insert, kuondoa, 293 00:21:05,000 --> 00:21:11,000 hivyo kushinikiza na pop, kama wewe ni kuzungumza juu mwingi, wewe ni kusukuma na popping. 294 00:21:11,000 --> 00:21:16,000 Kama wewe ni kuzungumza kuhusu foleni, unaweza kuchukua maneno unataka kutumia 295 00:21:16,000 --> 00:21:23,000 kwa Infogande na kuondolewa, na hakuna makubaliano juu ya kile lazima kuitwa. 296 00:21:23,000 --> 00:21:27,000 Lakini hapa, tuna enqueue na dequeue. 297 00:21:27,000 --> 00:21:37,000 Sasa, struct inaonekana karibu kufanana na struct stack. 298 00:21:37,000 --> 00:21:40,000 Lakini tuna kuweka wimbo wa kichwa. 299 00:21:40,000 --> 00:21:44,000 Nadhani anasema chini hapa, lakini kwa nini tunahitaji kichwa? 300 00:21:53,000 --> 00:21:57,000 prototypes kimsingi kufanana na kushinikiza na pop. 301 00:21:57,000 --> 00:21:59,000 Unaweza kufikiria kama msukumo na pop. 302 00:21:59,000 --> 00:22:08,000 Tofauti tu ni pop ni kurudi-badala ya mwisho, ni kurudi kwanza. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, au kitu. 304 00:22:12,000 --> 00:22:14,000 Na hapa ni mwanzo. 305 00:22:14,000 --> 00:22:17,000 Foleni yetu ni kabisa kamili, hivyo kuna nne vipengele ndani yake. 306 00:22:17,000 --> 00:22:21,000 mwisho wa foleni yetu kwa sasa ni 2, 307 00:22:21,000 --> 00:22:24,000 na sasa sisi kwenda Insert kitu kingine. 308 00:22:24,000 --> 00:22:29,000 >> Wakati tunataka Insert kwamba kitu kingine, nini tulifanya kwa toleo stack 309 00:22:29,000 --> 00:22:36,000 ni sisi kupanuliwa block wetu wa kumbukumbu. 310 00:22:36,000 --> 00:22:40,000 Je, ni tatizo na hili? 311 00:22:40,000 --> 00:22:45,000 [Mwanafunzi] Wewe hoja 2. 312 00:22:45,000 --> 00:22:51,000 Kile alisema kabla kuhusu mwisho wa foleni, 313 00:22:51,000 --> 00:22:57,000 hii haina mantiki kwamba sisi kuanza saa 1, 314 00:22:57,000 --> 00:23:01,000 kisha tunataka dequeue 1, kisha dequeue 3, kisha dequeue 4, 315 00:23:01,000 --> 00:23:05,000 kisha dequeue 2, kisha dequeue hii moja. 316 00:23:05,000 --> 00:23:08,000 Hatuwezi kutumia realloc sasa, 317 00:23:08,000 --> 00:23:11,000 au kwa uchache sana, una matumizi realloc katika njia tofauti. 318 00:23:11,000 --> 00:23:15,000 Lakini pengine lazima sio tu kutumia realloc. 319 00:23:15,000 --> 00:23:18,000 Wewe ni kwenda kuwa na manually nakala ya kumbukumbu yako. 320 00:23:18,000 --> 00:23:21,000 >> Kuna kazi mbili kunakili kumbukumbu. 321 00:23:21,000 --> 00:23:25,000 Kuna memcopy na memmove. 322 00:23:25,000 --> 00:23:29,000 Mimi sasa kusoma kurasa mtu kuona ambayo moja wewe ni kwenda unataka kutumia. 323 00:23:29,000 --> 00:23:35,000 Okay, memcopy, tofauti ni 324 00:23:35,000 --> 00:23:38,000 kwamba memcopy na memmove, mmoja Hushughulikia kesi usahihi 325 00:23:38,000 --> 00:23:41,000 ambapo wewe ni kuiga katika kanda ambayo hufanyika na hufunika kanda 326 00:23:41,000 --> 00:23:46,000 wewe ni kuiga kutoka. 327 00:23:46,000 --> 00:23:50,000 Memcopy haina kushughulikia hilo. Memmove gani. 328 00:23:50,000 --> 00:23:59,000 Unaweza kufikiri ya tatizo kama- 329 00:23:59,000 --> 00:24:09,000 hebu sema nataka nakala hii guy, 330 00:24:09,000 --> 00:24:13,000 hizi nne kwa this guy zaidi. 331 00:24:13,000 --> 00:24:16,000 Katika mwisho, nini safu inapaswa kuangalia kama 332 00:24:16,000 --> 00:24:26,000 baada ya nakala ni 2, 1, 2, 1, 3, 4, na kisha baadhi ya mambo mwishoni. 333 00:24:26,000 --> 00:24:29,000 Lakini hii ni tegemezi kwa utaratibu ambao sisi kweli nakala, 334 00:24:29,000 --> 00:24:32,000 tangu kama hatuwezi kufikiria ukweli kwamba mkoa tuko ndani ya kuiga 335 00:24:32,000 --> 00:24:35,000 overlaps moja tuko kuiga kutoka, 336 00:24:35,000 --> 00:24:46,000 basi tunaweza kufanya kama mwanzo hapa, nakala 2 ndani ya mahali tunataka kwenda, 337 00:24:46,000 --> 00:24:52,000 kisha kuondoka kuyatumia yetu mbele. 338 00:24:52,000 --> 00:24:56,000 >> Sasa sisi ni kwenda kuwa hapa na hapa, na sasa tunataka nakala 339 00:24:56,000 --> 00:25:04,000 this guy juu ya guy hii na hoja kuyatumia yetu mbele. 340 00:25:04,000 --> 00:25:07,000 Nini sisi ni kwenda kuishia kupata ni 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 badala ya 2 inafaa, 1, 2, 1, 3, 4 kwa sababu 342 00:25:10,000 --> 00:25:15,000 2, 1 overrode 3 awali, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove Hushughulikia kwamba usahihi. 344 00:25:19,000 --> 00:25:23,000 Katika kesi hiyo, kimsingi tu daima kutumia memmove 345 00:25:23,000 --> 00:25:26,000 sababu Hushughulikia kwa usahihi. 346 00:25:26,000 --> 00:25:29,000 Ni kawaida haina kufanya yoyote mbaya. 347 00:25:29,000 --> 00:25:32,000 Wazo ni badala ya kuanzia mwanzo na kuiga njia hii 348 00:25:32,000 --> 00:25:35,000 kama sisi tu alifanya hapa, ni kuanza kutoka mwisho na nakala katika, 349 00:25:35,000 --> 00:25:38,000 na katika kesi hiyo, unaweza kamwe kuwa na tatizo. 350 00:25:38,000 --> 00:25:40,000 Kuna utendaji hakuna waliopotea. 351 00:25:40,000 --> 00:25:47,000 Daima kutumia memmove. Kamwe wasiwasi kuhusu memcopy. 352 00:25:47,000 --> 00:25:51,000 Na kwamba ni wapi utaenda kuwa na tofauti memmove 353 00:25:51,000 --> 00:26:01,000 sehemu amefungwa kuzunguka ya foleni yako. 354 00:26:01,000 --> 00:26:04,000 Hakuna wasiwasi kama si kabisa kufanyika. 355 00:26:04,000 --> 00:26:10,000 Hii ni ngumu zaidi kuliko stack, pop kushinikiza, na. 356 00:26:10,000 --> 00:26:15,000 >> Mtu yeyote kuwa yoyote code tunaweza kufanya kazi na? 357 00:26:15,000 --> 00:26:21,000 Hata kama kabisa incomplete? 358 00:26:21,000 --> 00:26:23,000 [Mwanafunzi] Yeah, ni kabisa hayajakamilika, ingawa. 359 00:26:23,000 --> 00:26:27,000 Kabisa incomplete ni faini kwa muda mrefu kama sisi-unaweza kujiokoa marekebisho? 360 00:26:27,000 --> 00:26:32,000 Mimi kusahau kwamba kila wakati. 361 00:26:32,000 --> 00:26:39,000 Okay, kupuuza kile kinachotokea wakati tunahitaji resize mambo. 362 00:26:39,000 --> 00:26:42,000 Kabisa kupuuza resize. 363 00:26:42,000 --> 00:26:49,000 Eleza kanuni hii. 364 00:26:49,000 --> 00:26:54,000 Mimi nina kuangalia kwanza ya yote kama kawaida ni chini ya nakala ya kwanza ya yote 365 00:26:54,000 --> 00:27:01,000 na kisha baada ya mimi Insert-Mimi kuchukua kichwa + ukubwa, 366 00:27:01,000 --> 00:27:05,000 na mimi kuhakikisha Wraps kuzunguka uwezo wa safu, 367 00:27:05,000 --> 00:27:08,000 na mimi Insert string mpya katika nafasi hiyo. 368 00:27:08,000 --> 00:27:12,000 Kisha mimi kuongeza ukubwa na kurudi kweli. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] Hii ni dhahiri moja ya kesi hizo ambapo utaenda wanataka kutumia Mod. 370 00:27:22,000 --> 00:27:25,000 Aina yoyote ya kesi ambapo una wrapping kote, ikiwa unafikiri wrapping kote, 371 00:27:25,000 --> 00:27:29,000 mawazo ya haraka lazima Mod. 372 00:27:29,000 --> 00:27:36,000 Kama optimization haraka / kufanya code yako mstari mmoja mfupi, 373 00:27:36,000 --> 00:27:42,000 taarifa kwamba line mara baada ya hii moja 374 00:27:42,000 --> 00:27:53,000 ni tu ukubwa + +, hivyo kuunganisha kwamba katika mstari huu, ukubwa + +. 375 00:27:53,000 --> 00:27:58,000 Sasa chini hapa, tuna kesi 376 00:27:58,000 --> 00:28:01,000 ambapo hatuna kumbukumbu ya kutosha, 377 00:28:01,000 --> 00:28:05,000 hivyo sisi ni kuongeza uwezo wetu kwa 2. 378 00:28:05,000 --> 00:28:09,000 Nadhani unaweza kuwa na tatizo moja hapa, lakini hatuwezi kupuuza sasa, 379 00:28:09,000 --> 00:28:13,000 ambapo kama umeshindwa kuongeza uwezo wako, 380 00:28:13,000 --> 00:28:18,000 basi wewe ni kwenda kutaka kupunguza uwezo wako na 2 tena. 381 00:28:18,000 --> 00:28:24,000 Mwingine note mfupi ni kama tu unaweza kufanya + =, 382 00:28:24,000 --> 00:28:30,000 unaweza pia kufanya << =. 383 00:28:30,000 --> 00:28:43,000 Karibu chochote unaweza kwenda mbele sawa, + =, | =, & =, << =. 384 00:28:43,000 --> 00:28:52,000 Char * mpya ni ya kuzuia wetu mpya wa kumbukumbu. 385 00:28:52,000 --> 00:28:55,000 Oh, zaidi ya hapa. 386 00:28:55,000 --> 00:29:02,000 >> Nini watu wanadhani kuhusu aina ya kuzuia wetu mpya wa kumbukumbu? 387 00:29:02,000 --> 00:29:06,000 [Mwanafunzi] Ni lazima Char **. 388 00:29:06,000 --> 00:29:12,000 Kufikiri nyuma struct yetu hapa juu, 389 00:29:12,000 --> 00:29:14,000 masharti ni nini sisi ni reallocating. 390 00:29:14,000 --> 00:29:21,000 Sisi ni maamuzi mzima mpya nguvu kwa ajili ya kuhifadhi mambo katika foleni. 391 00:29:21,000 --> 00:29:25,000 Nini sisi ni kwenda kuwa kumshirikisha kwa masharti yako ni nini tuko mallocing sasa hivi, 392 00:29:25,000 --> 00:29:30,000 na hivyo mpya ni itakuwa ** Char. 393 00:29:30,000 --> 00:29:34,000 Ni kwenda kuwa safu ya masharti. 394 00:29:34,000 --> 00:29:38,000 Basi ni nini kesi ya chini ambayo tunakwenda kurudi uongo? 395 00:29:38,000 --> 00:29:41,000 [Mwanafunzi] Je, sisi kufanya * Char? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Ndiyo, nzuri wito. 397 00:29:44,000 --> 00:29:46,000 [Mwanafunzi] Nini ilikuwa hivyo? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Sisi alitaka kufanya ukubwa wa * Char kwa sababu sisi ni tena- 399 00:29:49,000 --> 00:29:53,000 hii ingekuwa kweli kuwa tatizo kubwa sana kwa sababu sizeof (Char) itakuwa 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof Char * ni kwenda kuwa 4, 401 00:29:55,000 --> 00:29:58,000 hivyo mengi ya mara wakati wewe ni kushughulika na ints, 402 00:29:58,000 --> 00:30:01,000 wewe huwa na kupata mbali na hilo kwa sababu ya ukubwa wa int na ukubwa wa * int 403 00:30:01,000 --> 00:30:04,000 juu ya mfumo wa 32-bit ni kwenda kuwa kitu kimoja. 404 00:30:04,000 --> 00:30:09,000 Lakini hapa, sizeof (Char) na sizeof (Char *) sasa kwenda kuwa kitu kimoja. 405 00:30:09,000 --> 00:30:15,000 >> Je, ni hali ambapo sisi kurudi uongo? 406 00:30:15,000 --> 00:30:17,000 [Mwanafunzi] Mpya ni null. 407 00:30:17,000 --> 00:30:23,000 Yeah, ikiwa ni mpya null, sisi kurudi uongo, 408 00:30:23,000 --> 00:30:34,000 na mimi nina kwenda kutupa chini hapa- 409 00:30:34,000 --> 00:30:37,000 [Mwanafunzi] [inaudible] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Yeah, hii ni faini. 411 00:30:39,000 --> 00:30:46,000 Unaweza ama kufanya 2 mara uwezo au kuhama uwezo 1 na kisha tu akiweke chini hapa au chochote. 412 00:30:46,000 --> 00:30:52,000 Tutaweza kufanya hivyo kama sisi alikuwa ni. 413 00:30:52,000 --> 00:30:56,000 Uwezo >> = 1. 414 00:30:56,000 --> 00:31:08,000 Na wewe kamwe kwenda kuwa na wasiwasi juu ya kupoteza nafasi ya 1 415 00:31:08,000 --> 00:31:12,000 kwa sababu wewe kushoto kubadilishwa na 1, hivyo mahali 1 ni lazima 0, 416 00:31:12,000 --> 00:31:16,000 hivyo haki shifting na 1, wewe bado itakuwa faini. 417 00:31:16,000 --> 00:31:19,000 [Mwanafunzi] Je, unahitaji kufanya hivyo kabla ya kurudi? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Ndiyo, hii inafanya kabisa hakuna maana. 419 00:31:29,000 --> 00:31:36,000 >> Sasa kudhani tunakwenda kuishia kurejea kweli hadi mwisho. 420 00:31:36,000 --> 00:31:39,000 njia tunakwenda kufanya memmoves hizi, 421 00:31:39,000 --> 00:31:45,000 tunahitaji kuwa makini na jinsi sisi kufanya nao. 422 00:31:45,000 --> 00:31:50,000 Je, mtu yeyote una mapendekezo yoyote kwa jinsi sisi kufanya nao? 423 00:32:17,000 --> 00:32:21,000 Hapa ni kuanza yetu. 424 00:32:21,000 --> 00:32:28,000 Inevitably, tunataka kuanza tena mwanzoni 425 00:32:28,000 --> 00:32:35,000 na nakala ya mambo katika kutoka huko, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Jinsi gani unaweza kufanya hivyo? 427 00:32:41,000 --> 00:32:52,000 Kwanza, mimi na kuangalia ukurasa mtu kwa memmove tena. 428 00:32:52,000 --> 00:32:57,000 Memmove, utaratibu wa hoja zote ni muhimu. 429 00:32:57,000 --> 00:33:01,000 Tunataka marudio yetu ya kwanza, chanzo pili, ukubwa wa tatu. 430 00:33:01,000 --> 00:33:06,000 Kuna mengi ya kazi ambayo kubadili chanzo na marudio. 431 00:33:06,000 --> 00:33:11,000 Marudio, chanzo huelekea kuwa thabiti kiasi fulani. 432 00:33:17,000 --> 00:33:21,000 Hoja, kile ni kurudi? 433 00:33:21,000 --> 00:33:27,000 Kuirudisha pointer kwa marudio, kwa sababu yoyote unaweza kutaka kuwa. 434 00:33:27,000 --> 00:33:32,000 Siwezi picha kusoma, lakini tunataka kuhamia katika eneo letu. 435 00:33:32,000 --> 00:33:35,000 >> Nini marudio yetu kwenda kuwa? 436 00:33:35,000 --> 00:33:37,000 [Mwanafunzi] Mpya. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Ndiyo, na ambapo ni sisi kuiga kutoka? 438 00:33:39,000 --> 00:33:43,000 Jambo la kwanza sisi ni kuiga ni hii 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Je, ni-hii 1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Nini ni anuani ya hii 1? 441 00:33:55,000 --> 00:33:58,000 Nini ni anuani ya kwamba 1? 442 00:33:58,000 --> 00:34:01,000 [Mwanafunzi] [inaudible] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] Mkuu + anuani ya kipengele kwanza. 444 00:34:03,000 --> 00:34:05,000 Jinsi gani sisi kupata kipengele kwanza katika safu? 445 00:34:05,000 --> 00:34:10,000 [Mwanafunzi] Foleni. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Ndiyo, q.strings. 447 00:34:15,000 --> 00:34:20,000 Kumbuka, hapa, kichwa yetu ni 1. 448 00:34:20,000 --> 00:34:24,000 Darn yake. Mimi tu nadhani ni magically- 449 00:34:24,000 --> 00:34:29,000 Hapa, kichwa yetu ni 1. Mimi nina kwenda na mabadiliko ya rangi yangu pia. 450 00:34:29,000 --> 00:34:36,000 Na hapa ni masharti. 451 00:34:36,000 --> 00:34:41,000 Hii, tunaweza ama kuandika ni kama sisi alifanya juu hapa 452 00:34:41,000 --> 00:34:43,000 na vichwa + q.strings. 453 00:34:43,000 --> 00:34:51,000 mengi ya watu pia kuandika & q.strings [kichwa]. 454 00:34:51,000 --> 00:34:55,000 Hii si kweli yoyote chini ya ufanisi. 455 00:34:55,000 --> 00:34:58,000 Unaweza kufikiria kama wewe ni dereferencing yake na kisha kupata anuani ya, 456 00:34:58,000 --> 00:35:04,000 lakini compiler ni kwenda kutafsiri kwa nini tulikuwa kabla anyway, q.strings + kichwa. 457 00:35:04,000 --> 00:35:06,000 Aidha njia unataka kufikiria hivyo. 458 00:35:06,000 --> 00:35:11,000 >> Na jinsi gani sisi wengi ka unataka kunakili? 459 00:35:11,000 --> 00:35:15,000 [Mwanafunzi] Uwezo - kichwa. 460 00:35:15,000 --> 00:35:18,000 Uwezo - kichwa. 461 00:35:18,000 --> 00:35:21,000 Na kisha unaweza daima kuandika mfano 462 00:35:21,000 --> 00:35:23,000 kufikiri kama hiyo ni haki. 463 00:35:23,000 --> 00:35:26,000 [Mwanafunzi] Inahitaji kugawanywa na 2 hapo. 464 00:35:26,000 --> 00:35:30,000 Yeah, hivyo mimi nadhani tunaweza kutumia kawaida. 465 00:35:30,000 --> 00:35:35,000 Sisi bado tuna kawaida kuwa- 466 00:35:35,000 --> 00:35:39,000 kutumia ukubwa, tuna kawaida sawa na 4. 467 00:35:39,000 --> 00:35:42,000 Kawaida yetu ni 4. Kichwa yetu ni 1. 468 00:35:42,000 --> 00:35:46,000 Tunataka nakala mambo haya 3. 469 00:35:46,000 --> 00:35:54,000 Hiyo sanity kuangalia kwamba ukubwa - kichwa ni usahihi 3. 470 00:35:54,000 --> 00:35:58,000 Na kuja nyuma hapa, kama sisi alisema kabla, 471 00:35:58,000 --> 00:36:00,000 kama sisi kutumika uwezo, basi tunatarajia kuwa kwa kugawanya na 2 472 00:36:00,000 --> 00:36:04,000 kwa sababu tumekuwa tayari mzima uwezo wetu, hivyo badala yake, sisi ni kwenda kutumia kawaida. 473 00:36:11,000 --> 00:36:13,000 Hiyo nakala kwamba sehemu. 474 00:36:13,000 --> 00:36:18,000 Sasa, sisi haja ya kunakili sehemu nyingine, sehemu iliyosalia ya mwanzo. 475 00:36:18,000 --> 00:36:28,000 >> Hiyo inaenda memmove katika kile msimamo? 476 00:36:28,000 --> 00:36:32,000 [Mwanafunzi] Plus kawaida - kichwa. 477 00:36:32,000 --> 00:36:38,000 Ndiyo, hivyo sisi tayari kunakiliwa katika kawaida - ka kichwa, 478 00:36:38,000 --> 00:36:43,000 na hivyo ambapo tunataka nakala ka iliyobaki ni mpya 479 00:36:43,000 --> 00:36:48,000 na kisha ukubwa bala-vizuri, idadi ya ka tumekuwa tayari kunakiliwa in 480 00:36:48,000 --> 00:36:52,000 Na kisha ambapo ni sisi kuiga kutoka? 481 00:36:52,000 --> 00:36:54,000 [Mwanafunzi] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Ndiyo, q.strings. 483 00:36:56,000 --> 00:37:02,000 Tunaweza aidha kufanya & q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 Hii ni kwa kiasi kikubwa chini ya kawaida zaidi kuliko huu. 485 00:37:05,000 --> 00:37:14,000 Kama ni kwenda tu kuwa 0, basi utasikia huwa na kuona q.strings. 486 00:37:14,000 --> 00:37:16,000 Hiyo ambapo sisi ni kuiga kutoka. 487 00:37:16,000 --> 00:37:18,000 Jinsi ka wengi hawana sisi wameondoka kunakili? >> [Mwanafunzi] 10. 488 00:37:18,000 --> 00:37:20,000 Haki. 489 00:37:20,000 --> 00:37:25,000 [Mwanafunzi] Je, tuna kuzidisha 5-10 ukubwa wa mara ka au kitu? 490 00:37:25,000 --> 00:37:30,000 Yeah, hivyo hii ni wapi-nini hasa ni sisi kuiga? 491 00:37:30,000 --> 00:37:32,000 [Mwanafunzi] [inaudible] 492 00:37:32,000 --> 00:37:34,000 Je, ni aina ya kitu sisi ni kuiga? 493 00:37:34,000 --> 00:37:36,000 [Mwanafunzi] [inaudible] 494 00:37:36,000 --> 00:37:41,000 Yeah, hivyo Char * Ni kwamba sisi ni kuiga, hatujui ambapo wale wanaotoka katika. 495 00:37:41,000 --> 00:37:47,000 Naam, uko wapi akizungumzia, kama masharti, sisi kuishia kusukuma ni kwenye foleni 496 00:37:47,000 --> 00:37:49,000 au enqueuing kwenye foleni. 497 00:37:49,000 --> 00:37:51,000 Ambapo wale wanaotoka katika, hatuna wazo. 498 00:37:51,000 --> 00:37:56,000 Sisi tu haja ya kuweka wimbo wa Char * s wenyewe. 499 00:37:56,000 --> 00:38:00,000 Hatutaki nakala kawaida - kichwa ka. 500 00:38:00,000 --> 00:38:03,000 Tunataka nakala kawaida - kichwa Char * s, 501 00:38:03,000 --> 00:38:11,000 hivyo tunakwenda kuzidisha hili kwa sizeof (Char *). 502 00:38:11,000 --> 00:38:17,000 Same chini hapa, kichwa * sizeof (Char *). 503 00:38:17,000 --> 00:38:24,000 >> [Mwanafunzi] Je kuhusu [inaudible]? 504 00:38:24,000 --> 00:38:26,000 Haki hii hapa? 505 00:38:26,000 --> 00:38:28,000 [Mwanafunzi] Hapana, chini ya kwamba, ukubwa - kichwa. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Haki hii hapa? 507 00:38:30,000 --> 00:38:32,000 Pointer hesabu. 508 00:38:32,000 --> 00:38:35,000 Jinsi pointer arithmetic ni kwenda kufanya kazi ni 509 00:38:35,000 --> 00:38:40,000 ni moja kwa moja humzidishia na ukubwa wa aina ya kwamba sisi ni kushughulika na. 510 00:38:40,000 --> 00:38:46,000 Tu kama zaidi ya hapa, mpya + (ukubwa - kichwa) 511 00:38:46,000 --> 00:38:56,000 ni hasa sawa na [size - kichwa] & mpya 512 00:38:56,000 --> 00:39:00,000 mpaka tunatarajia kwamba kwa kufanya kazi kwa usahihi, 513 00:39:00,000 --> 00:39:04,000 tangu kama sisi ni kushughulika na safu int, basi sisi si index na int- 514 00:39:04,000 --> 00:39:07,000 au kama ni ya ukubwa wa 5 na unataka kipengele 4, basi sisi katika index 515 00:39:07,000 --> 00:39:10,000 int safu [4]. 516 00:39:10,000 --> 00:39:14,000 Wewe don't-[4] * ukubwa wa int. 517 00:39:14,000 --> 00:39:21,000 Kwamba Hushughulikia ni moja kwa moja, na hii kesi 518 00:39:21,000 --> 00:39:29,000 ni literally sawa, hivyo syntax bracket 519 00:39:29,000 --> 00:39:34,000 ni kwenda tu kuwa waongofu kwa hii haraka kama wewe kukusanya. 520 00:39:34,000 --> 00:39:38,000 Hiyo ni kitu unahitaji kuwa makini ya kwamba 521 00:39:38,000 --> 00:39:42,000 wakati wewe ni kuongeza ukubwa - kichwa 522 00:39:42,000 --> 00:39:45,000 wewe ni akiongeza si moja Byte. 523 00:39:45,000 --> 00:39:53,000 Wewe ni kuongeza moja Char *, ambayo inaweza kuwa moja ka au chochote. 524 00:39:53,000 --> 00:39:56,000 >> Maswali mengine? 525 00:39:56,000 --> 00:40:04,000 Okay, dequeue ni kwenda kuwa rahisi zaidi. 526 00:40:04,000 --> 00:40:11,000 Mimi nitakupa dakika kutekeleza. 527 00:40:11,000 --> 00:40:18,000 Oh, na mimi nadhani hii ni hali kama hiyo ambapo 528 00:40:18,000 --> 00:40:21,000 nini kesi enqueue, kama sisi ni enqueuing null, 529 00:40:21,000 --> 00:40:24,000 labda tunataka kushughulikia hilo, labda sisi si. 530 00:40:24,000 --> 00:40:27,000 Sisi si kufanya tena hapa, lakini sawa stack kesi yetu. 531 00:40:27,000 --> 00:40:34,000 Kama sisi enqueue null, sisi kutaka kupuuza yake. 532 00:40:34,000 --> 00:40:40,000 Mtu yeyote kuwa baadhi ya kanuni siwezi kuvuta up? 533 00:40:40,000 --> 00:40:45,000 [Mwanafunzi] Mimi tu dequeue. 534 00:40:45,000 --> 00:40:56,000 Version 2 ni kwamba-sawa. 535 00:40:56,000 --> 00:40:59,000 Unataka kueleza? 536 00:40:59,000 --> 00:41:01,000 [Mwanafunzi] Kwanza, kuhakikisha kuna kitu katika foleni 537 00:41:01,000 --> 00:41:07,000 na kwamba ukubwa ni kwenda chini kwa 1. 538 00:41:07,000 --> 00:41:11,000 Unahitaji kufanya hivyo, na kisha kurudi kichwa 539 00:41:11,000 --> 00:41:13,000 na kisha kusonga kichwa up 1. 540 00:41:13,000 --> 00:41:19,000 Okay, kwa hivyo kuna kesi kona tuna kufikiria. Yeah. 541 00:41:19,000 --> 00:41:24,000 [Mwanafunzi] Kama kichwa yako ni katika kipengele mwisho, 542 00:41:24,000 --> 00:41:26,000 basi hutaki kichwa kwa kumweka nje ya safu. 543 00:41:26,000 --> 00:41:29,000 >> Yeah, hivyo kwa haraka kama kichwa hits mwisho wa safu yetu, 544 00:41:29,000 --> 00:41:35,000 wakati sisi dequeue, kichwa zetu zinapaswa modded nyuma 0. 545 00:41:35,000 --> 00:41:40,000 Kwa bahati mbaya, hatuwezi kufanya hivyo katika hatua moja. 546 00:41:40,000 --> 00:41:44,000 Nadhani njia ningependa pengine kurekebisha ni 547 00:41:44,000 --> 00:41:52,000 hii ni kwenda kuwa * Char, nini tuko kurudi, 548 00:41:52,000 --> 00:41:55,000 jina lolote yako variable anataka kuwa. 549 00:41:55,000 --> 00:42:02,000 Kisha tunataka Mod kichwa na uwezo wetu 550 00:42:02,000 --> 00:42:10,000 na kisha kurudi ret. 551 00:42:10,000 --> 00:42:14,000 mengi ya watu hapa wapate kufanya- 552 00:42:14,000 --> 00:42:19,000 hii ni kesi ya-you'll kuona watu kufanya kama kichwa 553 00:42:19,000 --> 00:42:29,000 ni mkubwa kuliko uwezo, kufanya kichwa - uwezo. 554 00:42:29,000 --> 00:42:36,000 Na hiyo tu kazi kuzunguka kile Mod ni. 555 00:42:36,000 --> 00:42:41,000 Mkuu Mod = uwezo ni safi zaidi 556 00:42:41,000 --> 00:42:51,000 ya wrapping karibu zaidi kuliko kama kichwa kubwa kuliko uwezo kichwa - uwezo. 557 00:42:51,000 --> 00:42:56,000 >> Maswali? 558 00:42:56,000 --> 00:43:02,000 Okay, jambo la mwisho tuna kushoto ni orodha yetu na uhusiano nao. 559 00:43:02,000 --> 00:43:07,000 Unaweza kutumika kwa baadhi ya tabia wanaohusishwa orodha kama alivyofanya 560 00:43:07,000 --> 00:43:11,000 wanaohusishwa orodha katika meza yako hash, kama alivyofanya meza hash. 561 00:43:11,000 --> 00:43:15,000 Ninawaasa kufanya meza hash. 562 00:43:15,000 --> 00:43:17,000 Unaweza kuwa tayari amefanya trie, 563 00:43:17,000 --> 00:43:23,000 lakini inajaribu ni magumu zaidi. 564 00:43:23,000 --> 00:43:27,000 Katika nadharia, wao uko asymptotically bora. 565 00:43:27,000 --> 00:43:30,000 Lakini tu kuangalia bodi kubwa, 566 00:43:30,000 --> 00:43:35,000 na inajaribu kamwe kufanya vizuri, na wao kuchukua kumbukumbu zaidi. 567 00:43:35,000 --> 00:43:43,000 Kila kitu kuhusu anajaribu kuishia kuwa mbaya zaidi kwa ajili ya kazi zaidi. 568 00:43:43,000 --> 00:43:49,000 Ni nini ufumbuzi Daudi Malan siku zote ni 569 00:43:49,000 --> 00:43:56,000 ni yeye daima posts ufumbuzi wake trie, na hebu angalia ambapo yeye sasa ni. 570 00:43:56,000 --> 00:44:00,000 Nini ilikuwa chini ya yeye, Daudi J? 571 00:44:00,000 --> 00:44:06,000 Yeye ni # 18, hivyo si kwamba sana mbaya, 572 00:44:06,000 --> 00:44:09,000 na kwamba kinaendelea kuwa moja ya bora inajaribu unaweza kufikiria 573 00:44:09,000 --> 00:44:17,000 au mojawapo ya bora ya anajaribu trie. 574 00:44:17,000 --> 00:44:23,000 Je, ni hata ufumbuzi wake wa awali? 575 00:44:23,000 --> 00:44:29,000 Najisikia kama trie ufumbuzi huwa na kuwa zaidi katika hili mbalimbali ya matumizi ya RAM. 576 00:44:29,000 --> 00:44:33,000 >> Kwenda chini hadi juu sana, na RAM ni matumizi katika tarakimu moja. 577 00:44:33,000 --> 00:44:36,000 Nenda chini kuelekea chini, na kisha wewe kuanza kuona anajaribu 578 00:44:36,000 --> 00:44:41,000 ambapo unaweza kupata kabisa mkubwa RAM matumizi, 579 00:44:41,000 --> 00:44:45,000 na inajaribu ni magumu zaidi. 580 00:44:45,000 --> 00:44:53,000 Si kabisa thamani yake lakini uzoefu wa elimu kama alivyofanya moja. 581 00:44:53,000 --> 00:44:56,000 Jambo la mwisho ni orodha yetu zilizounganishwa, 582 00:44:56,000 --> 00:45:04,000 na mambo haya matatu, mwingi, foleni, na orodha zilizounganishwa, 583 00:45:04,000 --> 00:45:09,000 kitu baadaye wewe milele kufanya katika sayansi ya kompyuta 584 00:45:09,000 --> 00:45:12,000 kudhani una uzoefu na mambo haya. 585 00:45:12,000 --> 00:45:19,000 Wao ni hivyo tu la msingi kwa kila kitu. 586 00:45:19,000 --> 00:45:25,000 >> Wanaohusishwa orodha, na hapa tuna orodha moja moja wanaohusishwa ni kwenda kuwa utekelezaji wetu. 587 00:45:25,000 --> 00:45:34,000 Nini maana ya moja moja wanaohusishwa kinyume na doubly wanaohusishwa? Ndiyo. 588 00:45:34,000 --> 00:45:37,000 [Mwanafunzi] Ni tu anaonyesha pointer ijayo kuliko kuyatumia, 589 00:45:37,000 --> 00:45:39,000 kama moja kabla yake na moja baada yake. 590 00:45:39,000 --> 00:45:44,000 Yeah, hivyo katika format picha, nini mimi tu kufanya? 591 00:45:44,000 --> 00:45:48,000 Nina mambo mawili. Nina picha na picha. 592 00:45:48,000 --> 00:45:51,000 Katika format picha, wanaohusishwa zetu moja moja orodha, 593 00:45:51,000 --> 00:45:57,000 inevitably, tuna baadhi ya aina ya pointer kwa mkuu wa orodha yetu, 594 00:45:57,000 --> 00:46:02,000 na kisha ndani ya orodha yetu, sisi tu kuyatumia, 595 00:46:02,000 --> 00:46:05,000 na labda hii pointi null. 596 00:46:05,000 --> 00:46:08,000 Ni kwenda kuwa kuchora yako mfano wa orodha moja moja wanaohusishwa. 597 00:46:08,000 --> 00:46:14,000 orodha doubly wanaohusishwa, unaweza kwenda nyuma. 598 00:46:14,000 --> 00:46:19,000 Kama mimi kukupa yoyote nodi katika orodha, basi unaweza lazima kupata 599 00:46:19,000 --> 00:46:23,000 yoyote nodi nyingine katika orodha ikiwa ni orodha doubly zinazoungwa. 600 00:46:23,000 --> 00:46:27,000 Lakini kama mimi kupata wewe nodi ya tatu katika orodha na ni orodha moja moja wanaohusishwa, 601 00:46:27,000 --> 00:46:30,000 hakuna njia wewe milele kwenda kupata nodes kwanza na pili. 602 00:46:30,000 --> 00:46:34,000 Na kuna faida na detriments, na moja dhahiri moja 603 00:46:34,000 --> 00:46:42,000 ni wewe kuchukua zaidi ukubwa, na una kuweka wimbo wa ambapo mambo haya ni akizungumzia sasa. 604 00:46:42,000 --> 00:46:49,000 Lakini sisi tu huduma ya juu moja moja wanaohusishwa. 605 00:46:49,000 --> 00:46:53,000 >> mambo machache sisi itawabidi kutekeleza. 606 00:46:53,000 --> 00:47:00,000 Struct yako typedef nodi, int i: struct nodi * ijayo; nodi. 607 00:47:00,000 --> 00:47:09,000 Typedef kwamba lazima kuchomwa ndani ya akili yako. 608 00:47:09,000 --> 00:47:14,000 Quiz 1 lazima kama kutoa typedef ya nodi wanaohusishwa orodha, 609 00:47:14,000 --> 00:47:18,000 na unapaswa kuwa na uwezo wa mara chorochoro kwamba chini 610 00:47:18,000 --> 00:47:22,000 bila hata kufikiria kuhusu hilo. 611 00:47:22,000 --> 00:47:27,000 Mimi nadhani maswali wanandoa, kwa nini tunahitaji struct hapa? 612 00:47:27,000 --> 00:47:32,000 Kwa nini hawawezi sisi kusema * nodi? 613 00:47:32,000 --> 00:47:35,000 [Mwanafunzi] [inaudible] 614 00:47:35,000 --> 00:47:38,000 Yeah. 615 00:47:38,000 --> 00:47:44,000 Kitu tu kwamba amefafanua nodi kama kitu 616 00:47:44,000 --> 00:47:47,000 ni typedef yenyewe. 617 00:47:47,000 --> 00:47:55,000 Lakini kama ya hatua hii, wakati tuko aina ya parsing kupitia ufafanuzi huu nodi struct, 618 00:47:55,000 --> 00:48:01,000 sisi si kumaliza typedef wetu bado, hivyo tangu typedef imekuwa si kumaliza, 619 00:48:01,000 --> 00:48:05,000 nodi haipo. 620 00:48:05,000 --> 00:48:12,000 Lakini struct nodi gani, na hii nodi katika hapa, 621 00:48:12,000 --> 00:48:14,000 hii inaweza pia kuitwa kitu kingine chochote. 622 00:48:14,000 --> 00:48:16,000 Hii inaweza kuitwa n. 623 00:48:16,000 --> 00:48:19,000 Ni inaweza kuitwa zilizounganishwa orodha nodi. 624 00:48:19,000 --> 00:48:21,000 Inaweza kuitwa kitu. 625 00:48:21,000 --> 00:48:26,000 Lakini hii nodi struct anahitaji kuitwa kitu sawa kama nodi hii struct. 626 00:48:26,000 --> 00:48:29,000 Nini wewe piga hii ina pia kuwa hapa, 627 00:48:29,000 --> 00:48:32,000 na hivyo kuwa pia unajibu hatua ya pili ya swali 628 00:48:32,000 --> 00:48:37,000 ambayo ni kwa nini-ya mara nyingi wakati unaweza kuona structs na typedefs ya structs, 629 00:48:37,000 --> 00:48:42,000 utaona structs bila majina ambapo utasikia tu kuona struct typedef, 630 00:48:42,000 --> 00:48:47,000 utekelezaji wa kamusi struct,, au chochote. 631 00:48:47,000 --> 00:48:51,000 >> Kwa nini hapa tunahitaji kusema nodi? 632 00:48:51,000 --> 00:48:54,000 Kwa nini hawawezi kuwa struct bila majina? 633 00:48:54,000 --> 00:48:56,000 Ni karibu jibu sawa. 634 00:48:56,000 --> 00:48:58,000 [Mwanafunzi] Unahitaji rejea ni ndani ya struct. 635 00:48:58,000 --> 00:49:04,000 Yeah, ndani ya struct, unahitaji kwa kutaja struct yenyewe. 636 00:49:04,000 --> 00:49:10,000 Kama wewe si kutoa struct jina, kama ni struct bila majina, huwezi kutaja hayo. 637 00:49:10,000 --> 00:49:17,000 Na mwisho lakini si angalau-haya lazima wote kuwa fulani moja kwa moja, 638 00:49:17,000 --> 00:49:20,000 na wao wanapaswa kukusaidia kutambua kama wewe kuandika hii chini 639 00:49:20,000 --> 00:49:24,000 kuwa wewe ni kufanya kitu kibaya kama hawa aina ya mambo hazina maana. 640 00:49:24,000 --> 00:49:28,000 Mwisho lakini si uchache, kwa nini hii kuwa struct nodi *? 641 00:49:28,000 --> 00:49:34,000 Kwa nini hawawezi tu kuwa struct nodi ijayo? 642 00:49:34,000 --> 00:49:37,000 [Mwanafunzi] Pointer kwa struct ijayo. 643 00:49:37,000 --> 00:49:39,000 Hiyo ni inevitably nini tunataka. 644 00:49:39,000 --> 00:49:42,000 Mbona hakuweza kamwe kuwa struct nodi ijayo? 645 00:49:42,000 --> 00:49:50,000 Kwa nini ni kuwa kwa kuwa struct nodi * ijayo? Yeah. 646 00:49:50,000 --> 00:49:53,000 [Mwanafunzi] Ni kama kitanzi usio. 647 00:49:53,000 --> 00:49:55,000 Yeah. 648 00:49:55,000 --> 00:49:57,000 [Mwanafunzi] Ingekuwa wote kuwa katika moja. 649 00:49:57,000 --> 00:50:02,000 Yeah, nadhani tu wa jinsi tunataka kufanya ukubwa wa au kitu. 650 00:50:02,000 --> 00:50:08,000 Ukubwa wa struct kimsingi ni + au - baadhi mfano hapa au pale. 651 00:50:08,000 --> 00:50:15,000 Ni kimsingi kwenda kuwa jumla ya ukubwa wa mambo katika struct. 652 00:50:15,000 --> 00:50:18,000 Haki hii hapa, bila ya kubadilisha kitu chochote, ukubwa ni kwenda kuwa rahisi. 653 00:50:18,000 --> 00:50:24,000 Ukubwa wa nodi struct ni kwenda kuwa ukubwa wa kawaida i + ya pili. 654 00:50:24,000 --> 00:50:27,000 Ukubwa wa i ni kwenda kuwa 4. Ukubwa wa pili ni kwenda kuwa 4. 655 00:50:27,000 --> 00:50:30,000 Ukubwa wa nodi struct ni kwenda kuwa 8. 656 00:50:30,000 --> 00:50:34,000 Kama hatuna *, kufikiri ya sizeof, 657 00:50:34,000 --> 00:50:37,000 kisha sizeof (i) ni kwenda kuwa 4. 658 00:50:37,000 --> 00:50:43,000 Ukubwa wa nodi struct ijayo itakuwa ni ya kawaida ya i + ukubwa wa nodi ijayo struct 659 00:50:43,000 --> 00:50:46,000 + Ukubwa wa kawaida i + ya struct nodi ijayo. 660 00:50:46,000 --> 00:50:55,000 Itakuwa recursion usio wa nodi. 661 00:50:55,000 --> 00:51:00,000 Hii ni kwa nini hii ni jinsi mambo kuwa. 662 00:51:00,000 --> 00:51:03,000 >> Tena, dhahiri kukariri kwamba, 663 00:51:03,000 --> 00:51:06,000 au angalau kuelewa kutosha kwamba unaweza kuwa na uwezo wa 664 00:51:06,000 --> 00:51:12,000 sababu kwa nini ni lazima kuangalia kama. 665 00:51:12,000 --> 00:51:14,000 mambo tunakwenda wanataka kutekeleza. 666 00:51:14,000 --> 00:51:18,000 Kama urefu wa orodha- 667 00:51:18,000 --> 00:51:21,000 unaweza kudanganya na kuweka karibu 668 00:51:21,000 --> 00:51:24,000 kimataifa urefu au kitu, lakini sisi siyo kwenda kufanya hiyo. 669 00:51:24,000 --> 00:51:28,000 Sisi ni kwenda kuhesabu urefu wa orodha. 670 00:51:28,000 --> 00:51:34,000 Sisi ina, hivyo ndiyo kimsingi kama kutafuta, 671 00:51:34,000 --> 00:51:41,000 hivyo tuna orodha ya wanaohusishwa integers kuona kama integer hii ni katika orodha zinazoungwa. 672 00:51:41,000 --> 00:51:44,000 Prepend ni kwenda Insert katika mwanzo wa orodha. 673 00:51:44,000 --> 00:51:46,000 Append ni kwenda Insert mwishoni. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted ni kwenda Insert katika nafasi sorted katika orodha. 675 00:51:53,000 --> 00:52:01,000 Insert_sorted aina ya akubali kwamba wewe kamwe kutumika prepend au append katika njia mbaya. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted wakati wewe ni kutekeleza insert_sorted- 677 00:52:09,000 --> 00:52:13,000 hebu sema tuna orodha yetu zinazoungwa. 678 00:52:13,000 --> 00:52:18,000 Hii ni nini sasa inaonekana kama, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Nataka Insert 3, hivyo muda mrefu kama orodha yenyewe tayari Iliyopangwa, 680 00:52:24,000 --> 00:52:27,000 ni rahisi kupata ambapo 3 ni mali. 681 00:52:27,000 --> 00:52:29,000 Mimi kuanza saa 2. 682 00:52:29,000 --> 00:52:32,000 Okay, 3, ni mkubwa kuliko 2, hivyo nataka kuendelea. 683 00:52:32,000 --> 00:52:35,000 Oh, 4 ni kubwa mno, hivyo najua 3 yataenda katika kati ya 2 na 4, 684 00:52:35,000 --> 00:52:39,000 na nina kurekebisha kuyatumia na mambo ambayo yote. 685 00:52:39,000 --> 00:52:43,000 Lakini kama sisi hawakuwa madhubuti kutumia insert_sorted, 686 00:52:43,000 --> 00:52:50,000 kama hebu sema tu mimi prepend 6, 687 00:52:50,000 --> 00:52:55,000 kisha orodha yangu zilizounganishwa inaenda kuwa hii. 688 00:52:55,000 --> 00:53:01,000 Ni sasa haina mantiki, hivyo kwa insert_sorted, unaweza kudhani tu 689 00:53:01,000 --> 00:53:04,000 kwamba orodha ni Iliyopangwa, ingawa shughuli zipo 690 00:53:04,000 --> 00:53:09,000 ambayo inaweza kusababisha kwa si sorted, na hiyo ni yake. 691 00:53:09,000 --> 00:53:20,000 Kupata msaada Insert-hivyo hayo ni mambo kuu utaenda kuwa na kutekeleza. 692 00:53:20,000 --> 00:53:24,000 >> Kwa sasa, kuchukua dakika kufanya urefu na ina, 693 00:53:24,000 --> 00:53:30,000 na wale lazima relativt haraka. 694 00:53:41,000 --> 00:53:48,000 Nearing kufunga wakati, hivyo mtu yeyote kuwa na kitu chochote au kwa urefu ina? 695 00:53:48,000 --> 00:53:50,000 Wao wanaenda kuwa karibu kufanana. 696 00:53:50,000 --> 00:53:57,000 [Mwanafunzi] Muda. 697 00:53:57,000 --> 00:54:01,000 Hebu angalia, marekebisho. 698 00:54:01,000 --> 00:54:04,000 Sawa. 699 00:54:12,000 --> 00:54:15,000 Unataka kueleza? 700 00:54:15,000 --> 00:54:21,000 [Mwanafunzi] mimi tu kujenga nodi pointer na initialize kwa kwanza, ambayo ni variable wetu kimataifa, 701 00:54:21,000 --> 00:54:27,000 na kisha mimi kuangalia kuona kama ni null hivyo mimi si kupata kosa seg na kurudi 0 kama kwamba ni kesi. 702 00:54:27,000 --> 00:54:34,000 Vinginevyo, mimi kitanzi kupitia, kuweka wimbo wa ndani integer 703 00:54:34,000 --> 00:54:38,000 mara ngapi nimekuwa accessed kipengele pili ya orodha 704 00:54:38,000 --> 00:54:43,000 na katika operesheni hiyo increment pia kupata kwamba kipengele halisi, 705 00:54:43,000 --> 00:54:47,000 na kisha mimi kuendelea kufanya hundi ya kuona kama ni null, 706 00:54:47,000 --> 00:54:56,000 na kama ni null, basi aborts na anarudi tu idadi ya vipengele nimekuwa kupatikana. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] Je, mtu yeyote kuwa na maoni yoyote juu ya kitu chochote? 708 00:55:01,000 --> 00:55:06,000 Hii inaonekana usahihi faini busara. 709 00:55:06,000 --> 00:55:10,000 [Mwanafunzi] sidhani unahitaji nodi == null. 710 00:55:10,000 --> 00:55:13,000 Yeah, hivyo kama nodi == null kurudi 0. 711 00:55:13,000 --> 00:55:18,000 Lakini kama nodi == null basi hii-oh, kuna suala usahihi. 712 00:55:18,000 --> 00:55:23,000 Ni mara tu wewe ni kurudi i, lakini siyo katika wigo hivi sasa. 713 00:55:23,000 --> 00:55:30,000 Wewe tu haja int i, hivyo i = 0. 714 00:55:30,000 --> 00:55:34,000 Lakini kama nodi ni null, basi i bado itakuwa 0, 715 00:55:34,000 --> 00:55:39,000 na sisi ni kwenda na kurudi 0, hivyo kesi hii ni kufanana. 716 00:55:39,000 --> 00:55:48,000 Jambo jingine ni ya kawaida kwa kuweka tangazo 717 00:55:48,000 --> 00:55:51,000 ya nodi ndani ya kwa kitanzi. 718 00:55:51,000 --> 00:55:54,000 Unaweza kusema-oh, hakuna. 719 00:55:54,000 --> 00:55:56,000 Hebu kuitunza kama hii. 720 00:55:56,000 --> 00:55:59,000 Mimi pengine ingekuwa kuweka int i = 0 hapa, 721 00:55:59,000 --> 00:56:05,000 kisha nodi * nodi = kwanza katika hapa. 722 00:56:05,000 --> 00:56:11,000 Na hii pengine ni jinsi-ya kuepuka kupata hii sasa. 723 00:56:11,000 --> 00:56:14,000 Hii pengine ni jinsi mimi ingekuwa imeandikwa yake. 724 00:56:14,000 --> 00:56:21,000 Unaweza pia-kuangalia ni kama hii. 725 00:56:21,000 --> 00:56:25,000 Hii kwa muundo kitanzi haki hapa 726 00:56:25,000 --> 00:56:30,000 wanapaswa kuwa karibu kama asili na wewe kama kwa int i = 0 727 00:56:30,000 --> 00:56:33,000 i ni chini ya urefu wa safu i + +. 728 00:56:33,000 --> 00:56:38,000 Kama kwamba ni jinsi gani wewe iterate juu ya safu, hii ni jinsi gani iterate juu ya orodha zinazoungwa. 729 00:56:38,000 --> 00:56:45,000 >> Hii inapaswa kuwa asili ya pili wakati fulani. 730 00:56:45,000 --> 00:56:50,000 Kwa kuwa katika akili, hii ni kwenda kuwa karibu kitu kimoja. 731 00:56:50,000 --> 00:56:57,000 Utaenda kutaka iterate juu ya orodha zilizounganishwa. 732 00:56:57,000 --> 00:57:02,000 Kama nodi-mimi sielewi nini thamani inaitwa. 733 00:57:02,000 --> 00:57:04,000 Node i. 734 00:57:04,000 --> 00:57:15,000 Kama thamani kwenye nodi kwamba = i kurudi kweli, na hiyo ni yake. 735 00:57:15,000 --> 00:57:18,000 Ona kwamba njia pekee ya sisi milele kurudi uongo 736 00:57:18,000 --> 00:57:23,000 ni kama sisi iterate juu ya orodha nzima wanaohusishwa na kamwe kurudi kweli, 737 00:57:23,000 --> 00:57:29,000 hivyo kwamba ni nini hii gani. 738 00:57:29,000 --> 00:57:36,000 Kama upande note-sisi pengine si kupata append au prepend. 739 00:57:36,000 --> 00:57:39,000 >> Quick mwisho note. 740 00:57:39,000 --> 00:57:52,000 Kama unaweza kuona Keyword tuli, hivyo hebu kusema tuli int kuhesabu = 0, 741 00:57:52,000 --> 00:57:56,000 kisha sisi kufanya kuhesabu + +, unaweza kimsingi kufikiria kama variable kimataifa, 742 00:57:56,000 --> 00:58:00,000 hata mimi tu alisema hii si jinsi sisi ni kwenda kutekeleza urefu. 743 00:58:00,000 --> 00:58:06,000 Mimi nina kufanya hii hapa, na kisha kuhesabu + +. 744 00:58:06,000 --> 00:58:11,000 Njia yoyote tunaweza kuingia ndani ya nodi orodha yetu zilizounganishwa sisi ni incrementing kuhesabu yetu. 745 00:58:11,000 --> 00:58:15,000 hatua ya hii ni nini maana ya Keyword tuli. 746 00:58:15,000 --> 00:58:20,000 Kama mimi tu alikuwa kuhesabu int = 0 kwamba itakuwa mara kwa mara zamani wa kimataifa kutofautiana. 747 00:58:20,000 --> 00:58:25,000 Nini tuli int kuhesabu njia ni kwamba ni variable kimataifa kwa ajili ya faili hii. 748 00:58:25,000 --> 00:58:28,000 Ni vigumu kwa baadhi ya faili nyingine, 749 00:58:28,000 --> 00:58:34,000 kama kufikiria pset 5, kama wewe kuanza. 750 00:58:34,000 --> 00:58:39,000 Kuwa wote speller.c, na una dictionary.c, 751 00:58:39,000 --> 00:58:42,000 na kama wewe tu kutangaza kitu kimataifa, basi chochote katika speller.c 752 00:58:42,000 --> 00:58:45,000 kulipata katika dictionary.c na kinyume chake. 753 00:58:45,000 --> 00:58:48,000 Vigezo Global ni kupatikana kwa faili yoyote c., 754 00:58:48,000 --> 00:58:54,000 lakini vigezo tuli kupatikana tu kutoka ndani ya faili yenyewe, 755 00:58:54,000 --> 00:59:01,000 hivyo ndani ya Spell kusahihisha au ndani ya dictionary.c, 756 00:59:01,000 --> 00:59:06,000 hii ni aina ya jinsi napenda kutangaza variable yangu kwa ukubwa wa safu yangu 757 00:59:06,000 --> 00:59:10,000 au ukubwa wa namba yangu ya maneno katika kamusi. 758 00:59:10,000 --> 00:59:15,000 Tangu Sitaki kutangaza variable kimataifa kwamba yupo mtu kupata, 759 00:59:15,000 --> 00:59:18,000 Mimi kwa kweli tu huduma ya juu ni kwa makusudi yangu mwenyewe. 760 00:59:18,000 --> 00:59:21,000 >> Jambo nzuri kuhusu hili ni pia jina zima mgongano stuff. 761 00:59:21,000 --> 00:59:27,000 Kama baadhi ya faili nyingine anajaribu kutumia variable kimataifa aitwaye kuhesabu, mambo kwenda sana, vibaya sana, 762 00:59:27,000 --> 00:59:33,000 hivyo hii nicely anaendelea mambo salama, na tu unaweza kupata hiyo, 763 00:59:33,000 --> 00:59:38,000 na hakuna mtu mwingine anaweza, na kama mtu mwingine anatangaza variable kimataifa aitwaye kuhesabu, 764 00:59:38,000 --> 00:59:43,000 basi itakuwa si kuingilia kati na variable yako tuli kuitwa kuhesabu. 765 00:59:43,000 --> 00:59:47,000 Hiyo ni nini tuli ni. Ni faili kimataifa kutofautiana. 766 00:59:47,000 --> 00:59:52,000 >> Maswali juu ya kitu chochote? 767 00:59:52,000 --> 00:59:59,000 Kuweka wote. Bye. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]