1 00:00:00,000 --> 00:00:01,000 [Powered by Google Translate] [Kafli 6] [öruggari] 2 00:00:01,000 --> 00:00:04,000 [Rob Bowden] [Harvard University] 3 00:00:04,000 --> 00:00:09,000 [Þetta er CS50.] [CS50.TV] 4 00:00:09,000 --> 00:00:11,000 >> Við getum höfuð kafla okkar spurningum. 5 00:00:11,000 --> 00:00:17,000 Ég sendi slóðina á rúm áður. 6 00:00:17,000 --> 00:00:22,000 Upphaf hluta spurninga segja- 7 00:00:22,000 --> 00:00:26,000 greinilega er ég ekki alveg heilbrigðra-er mjög auðvelt spurning 8 00:00:26,000 --> 00:00:28,000 um bara hvað er valgrind? 9 00:00:28,000 --> 00:00:30,000 Hvað gerir valgrind gera? 10 00:00:30,000 --> 00:00:34,000 Einhver vilja til að segja hvað valgrind gerir? 11 00:00:34,000 --> 00:00:36,000 [Nemandi] Eftirlit minni leka. 12 00:00:36,000 --> 00:00:41,000 Já, valgrind er almennt minni afgreiðslumaður. 13 00:00:41,000 --> 00:00:44,000 Það, að lokum, segir þér ef þú ert með minni lekur, 14 00:00:44,000 --> 00:00:49,000 sem er að mestu leyti það sem við erum að nota það fyrir því ef þú vilt að 15 00:00:49,000 --> 00:00:54,000 gera vel í vandamál setja eða ef þú vilt 16 00:00:54,000 --> 00:00:59,000 fá á stóru borð, þú þarft að hafa ekkert minni lekur alls, 17 00:00:59,000 --> 00:01:01,000 og ef þú ert með minni leka sem þú getur ekki fundið, 18 00:01:01,000 --> 00:01:04,000 einnig að hafa í huga að þegar þú opnar skrá 19 00:01:04,000 --> 00:01:07,000 og ef þú loka það ekki, það er minni leka. 20 00:01:07,000 --> 00:01:10,000 >> A einhver fjöldi af fólk ert útlit fyrir sumir hnút sem þeir eru ekki frjáls 21 00:01:10,000 --> 00:01:15,000 þegar í raun, gerðu þeir ekki loka orðabók í fyrsta skrefi. 22 00:01:15,000 --> 00:01:19,000 Hún segir þér einnig ef þú hefur einhverjar ógild les eða skrifar, 23 00:01:19,000 --> 00:01:22,000 sem þýðir að ef þú reynir og setja inn gildi 24 00:01:22,000 --> 00:01:26,000 það er út í lok hrúga og það gerist ekki að seg kenna 25 00:01:26,000 --> 00:01:30,000 en valgrind veiðir það, eins og þú ættir í raun ekki að vera að skrifa þar, 26 00:01:30,000 --> 00:01:33,000 og svo þú örugglega ætti ekki að hafa neitt af þeim heldur. 27 00:01:33,000 --> 00:01:38,000 Hvernig notar þú valgrind? 28 00:01:38,000 --> 00:01:42,000 Hvernig notar þú valgrind? 29 00:01:42,000 --> 00:01:45,000 >> Það er almenn spurning um 30 00:01:45,000 --> 00:01:49,000 konar keyra hana og líta á the framleiðsla. 31 00:01:49,000 --> 00:01:51,000 The framleiðsla er yfirþyrmandi mikið af sinnum. 32 00:01:51,000 --> 00:01:54,000 Það er líka gaman villur þar ef þið hafið einhverjar hræðilega rangur hlutur 33 00:01:54,000 --> 00:01:59,000 gerast í lykkju, þá mun það að lokum segja: "Allt of margar villur. 34 00:01:59,000 --> 00:02:03,000 Ég ætla að hætta að telja núna. " 35 00:02:03,000 --> 00:02:08,000 Það er í grundvallaratriðum texta framleiðsla sem þú þarft að flokka. 36 00:02:08,000 --> 00:02:13,000 Á endanum, það mun segja þér hvaða minni leka sem þú hefur, 37 00:02:13,000 --> 00:02:16,000 hversu margar blokkir sem getur verið gagnlegt vegna 38 00:02:16,000 --> 00:02:20,000 ef það er ein blokk unfreed, þá er það yfirleitt auðveldara að finna 39 00:02:20,000 --> 00:02:23,000 en 1.000 blokkir unfreed. 40 00:02:23,000 --> 00:02:26,000 1.000 blokkir unfreed þýðir líklega að þú ert ekki frjáls 41 00:02:26,000 --> 00:02:30,000 tengd listum viðeigandi eða eitthvað. 42 00:02:30,000 --> 00:02:32,000 Það er valgrind. 43 00:02:32,000 --> 00:02:35,000 >> Nú höfum við okkar hluti af spurningum, 44 00:02:35,000 --> 00:02:38,000 sem þú þarft ekki að sækja. 45 00:02:38,000 --> 00:02:41,000 Þú getur smellt á nafnið mitt og draga þá upp í rúm. 46 00:02:41,000 --> 00:02:44,000 Nú smellur á mig. 47 00:02:44,000 --> 00:02:46,000 Útgáfa 1 verður stakkur, sem við erum að gera fyrst. 48 00:02:46,000 --> 00:02:55,000 Revision 2 verður biðröð og Revision 3 verður eintengdum lista. 49 00:02:55,000 --> 00:02:58,000 Byrjun burt með stafla okkar. 50 00:02:58,000 --> 00:03:02,000 Eins og segir hér, stafla er einn af the undirstöðu, 51 00:03:02,000 --> 00:03:07,000 grundvallaratriði gögn uppbygging af tölvunarfræði. 52 00:03:07,000 --> 00:03:11,000 Mjög dæmigerðu dæmi er 53 00:03:11,000 --> 00:03:13,000 stafla af stæði í matsal. 54 00:03:13,000 --> 00:03:16,000 Það er í grundvallaratriðum þegar þú ert að kynna að stafla, 55 00:03:16,000 --> 00:03:20,000 einhver er að fara að segja, "Ó, eins og stafla af stæði." 56 00:03:20,000 --> 00:03:22,000 Þú stafla stæði upp. 57 00:03:22,000 --> 00:03:24,000 Svo þegar þú ferð að draga bakkanum, 58 00:03:24,000 --> 00:03:31,000 fyrsta bakki sem er að fá dreginn er sá síðasti sem var sett á mánudaginn. 59 00:03:31,000 --> 00:03:34,000 Stafla líka-eins og það segir hér- 60 00:03:34,000 --> 00:03:37,000 við höfum hluti af minni kallast stafla. 61 00:03:37,000 --> 00:03:40,000 Og hvers vegna er það kallað að stafla? 62 00:03:40,000 --> 00:03:42,000 >> Því eins og gögn stafla uppbyggingu, 63 00:03:42,000 --> 00:03:46,000 það ýtir og birtist stakkur ramma á mánudaginn, 64 00:03:46,000 --> 00:03:53,000 þar stafla rammar eru eins og tiltekið kalli virka. 65 00:03:53,000 --> 00:03:57,000 Og eins og stakkur, þú verður alltaf að snúa aftur 66 00:03:57,000 --> 00:04:03,000 frá virka símtalinu áður en þú getur fengið niður í lægri stafla ramma aftur. 67 00:04:03,000 --> 00:04:08,000 Þú getur ekki hafa helstu kalla foo kalla bar og bar aftur til helstu beint. 68 00:04:08,000 --> 00:04:14,000 Það er alltaf got að fylgja rétta stafla ýta og pabbi. 69 00:04:14,000 --> 00:04:18,000 Þessar tvær aðgerðir, eins og ég sagði, eru ýta og pop. 70 00:04:18,000 --> 00:04:20,000 Þeir eru algild hugtök. 71 00:04:20,000 --> 00:04:26,000 Þú ættir að vita ýta og skjóta á hvað stafla sama hvað. 72 00:04:26,000 --> 00:04:28,000 Við munum sjá biðraðir eru konar öðruvísi. 73 00:04:28,000 --> 00:04:32,000 Það skiptir í raun ekki hafa alhliða tíma, en ýta og pop eru alhliða fyrir stöflum. 74 00:04:32,000 --> 00:04:34,000 Push er bara sett á stafla. 75 00:04:34,000 --> 00:04:37,000 Pop er að taka af stafla. 76 00:04:37,000 --> 00:04:43,000 Og við sjáum hér höfum typedef strúktúr stafla okkar, 77 00:04:43,000 --> 00:04:46,000 þannig að við höfum bleikju ** strengi. 78 00:04:46,000 --> 00:04:51,000 Ekki fá ekki hrædd við allir. ** 79 00:04:51,000 --> 00:04:54,000 Þetta er að fara að enda að vera fylki af strengjum 80 00:04:54,000 --> 00:04:58,000 eða fylki af ábendingum til stafi, þar sem 81 00:04:58,000 --> 00:05:00,000 ábendingum til stafi hafa tilhneigingu til að vera strengir. 82 00:05:00,000 --> 00:05:05,000 Það þarf ekki að vera strengir, en hér, þeir eru að fara að vera strengir. 83 00:05:05,000 --> 00:05:08,000 >> Við höfum fjölda strengi. 84 00:05:08,000 --> 00:05:14,000 Við höfum stærð, sem sýnir hversu margir þættir eru nú á mánudaginn, 85 00:05:14,000 --> 00:05:19,000 og svo við höfum getu, sem er hversu margir þættir geta verið á mánudaginn. 86 00:05:19,000 --> 00:05:22,000 Getu ætti að byrja á sem eitthvað meira en 1, 87 00:05:22,000 --> 00:05:27,000 en stærð er að fara að byrja á eins og 0. 88 00:05:27,000 --> 00:05:36,000 Nú, það eru í grundvallaratriðum þrjár mismunandi leiðir sem þú getur hugsa um stafla. 89 00:05:36,000 --> 00:05:39,000 Jæja, það eru sennilega fleiri, en tveir helstu leiðir eru 90 00:05:39,000 --> 00:05:43,000 þú getur innleiða það með því að nota array, eða þú getur innleiða það með tengda listanum. 91 00:05:43,000 --> 00:05:48,000 Tengdir listar eru konar léttvæg til að stafla frá. 92 00:05:48,000 --> 00:05:51,000 Það er mjög auðvelt að gera stafla með tengd listum, 93 00:05:51,000 --> 00:05:55,000 svo hér erum við að fara að gera stafla með fylki, 94 00:05:55,000 --> 00:05:59,000 og nota fylki, það er líka tvær leiðir til að hugsa um það. 95 00:05:59,000 --> 00:06:01,000 Áður, þegar ég sagði að við höfum getu til að stafla, 96 00:06:01,000 --> 00:06:04,000 svo við getum að passa þáttur á mánudaginn. 97 00:06:04,000 --> 00:06:09,000 >> Eina leiðin sem það gæti gerst er eins fljótt og þú högg 10 þætti, þá þú ert að gera. 98 00:06:09,000 --> 00:06:13,000 Þú gætir vita að það er efri mörk 10 hlutum í heiminum 99 00:06:13,000 --> 00:06:16,000 að þú munt aldrei hafa fleiri en 10 hluti á stafla þinn, 100 00:06:16,000 --> 00:06:20,000 en í því tilviki er hægt að hafa efri bundið á stærð stafla þinn. 101 00:06:20,000 --> 00:06:23,000 Eða þú gætir hafa stafla þín takmarkalaus, 102 00:06:23,000 --> 00:06:27,000 en ef þú ert að gera óákveðinn greinir í ensku fylking, sem þýðir að í hvert einasta skipti sem þú högg 10 þætti, 103 00:06:27,000 --> 00:06:29,000 þá þú ert að fara að þurfa að vaxa til 20 þætti, og þegar þú högg 20 þætti, 104 00:06:29,000 --> 00:06:33,000 þú ert að fara að vaxa array til 30 þætti eða 40 atriði. 105 00:06:33,000 --> 00:06:37,000 Þú ert að fara að þurfa að auka getu, sem er það sem við erum að fara að gera hér. 106 00:06:37,000 --> 00:06:40,000 Hvert einasta skipti sem við ná hámarks stærð stafla okkar, 107 00:06:40,000 --> 00:06:46,000 þegar við ýta eitthvað annað á, við erum að fara að þurfa að auka getu. 108 00:06:46,000 --> 00:06:50,000 Hér höfum við ýta lýst sem bool ýta (char * STR). 109 00:06:50,000 --> 00:06:54,000 Char * STR er band sem við erum að þrýsta á mánudaginn, 110 00:06:54,000 --> 00:06:58,000 og bool segir bara hvort við tekist eða ekki. 111 00:06:58,000 --> 00:07:00,000 >> Hvernig getum við ekki? 112 00:07:00,000 --> 00:07:04,000 Hvað er eina aðstæður sem hægt er að hugsa um 113 00:07:04,000 --> 00:07:07,000 þar sem við þyrftum að skila falskur? 114 00:07:07,000 --> 00:07:09,000 Já. 115 00:07:09,000 --> 00:07:12,000 [Nemandi] Ef það er fullt og við erum með takmarkað framkvæmd. 116 00:07:12,000 --> 00:07:17,000 Já, hvernig skilgreina-hann við svarað 117 00:07:17,000 --> 00:07:23,000 Ef það er fullt og við erum með takmarkað framkvæmd. 118 00:07:23,000 --> 00:07:26,000 Þá munum við örugglega aftur rangar. 119 00:07:26,000 --> 00:07:31,000 Um leið og við högg 10 hluti í fylking, getum við ekki passa 11, svo við aftur rangt. 120 00:07:31,000 --> 00:07:32,000 Hvað ef það er takmarkalaus? Já. 121 00:07:32,000 --> 00:07:38,000 Ef þú getur ekki auka úrval fyrir sumir ástæða. 122 00:07:38,000 --> 00:07:43,000 Já, þannig að minni er takmörkuð auðlind, 123 00:07:43,000 --> 00:07:51,000 og að lokum, ef við halda að ýta hlutum á mánudaginn aftur og aftur, 124 00:07:51,000 --> 00:07:54,000 við erum að fara að reyna að úthluta stærri array til að passa 125 00:07:54,000 --> 00:07:59,000 stærri getu og malloc eða hvað við erum að nota er að fara að skila falskur. 126 00:07:59,000 --> 00:08:02,000 Jæja, malloc aftur null. 127 00:08:02,000 --> 00:08:05,000 >> Mundu, hvert einasta skipti sem þú hringir alltaf malloc, ættir þú að athuga að sjá hvort það 128 00:08:05,000 --> 00:08:12,000 skilar null eða annað það er réttmæti frádráttar. 129 00:08:12,000 --> 00:08:17,000 Þar sem við viljum hafa takmarkalaus stafla, 130 00:08:17,000 --> 00:08:21,000 eina málið sem við erum að fara að vera aftur rangt er ef við reynum að 131 00:08:21,000 --> 00:08:26,000 auka getu og malloc eða hvað skilar falskur. 132 00:08:26,000 --> 00:08:30,000 Þá tekur pop engin rök, 133 00:08:30,000 --> 00:08:37,000 og það skilar streng sem er efst á mánudaginn. 134 00:08:37,000 --> 00:08:41,000 Hvað var síðast ýtt á mánudaginn er það pop er aftur, 135 00:08:41,000 --> 00:08:44,000 og það fjarlægir einnig það úr stafla. 136 00:08:44,000 --> 00:08:50,000 Og eftir að það skilar null ef það er ekkert á mánudaginn. 137 00:08:50,000 --> 00:08:53,000 Það er alltaf hægt að stafla er tóm. 138 00:08:53,000 --> 00:08:55,000 Í Java, ef þú ert að nota til að, eða öðrum tungumálum, 139 00:08:55,000 --> 00:09:01,000 reyna að skjóta úr tóma stakkur gæti valdið undanþágu eða eitthvað. 140 00:09:01,000 --> 00:09:09,000 >> En C, null er góður af a einhver fjöldi af þeim tilvikum hvernig við tökum á þessum vandamálum. 141 00:09:09,000 --> 00:09:13,000 Reglulegur null er hvernig við ætlum að signify að stafla var tóm. 142 00:09:13,000 --> 00:09:16,000 Við höfum veitt kóða sem vilja prófa virkni stafla þíns, 143 00:09:16,000 --> 00:09:19,000 framkvæma ýta og skjóta. 144 00:09:19,000 --> 00:09:23,000 Þetta mun ekki vera mikið af kóða. 145 00:09:23,000 --> 00:09:40,000 Ég mun-raun, en við gerum það, vísbending, vísbending- 146 00:09:40,000 --> 00:09:44,000 Ef þú hefur ekki séð það, malloc er ekki eina virka 147 00:09:44,000 --> 00:09:47,000 sem úthlutar minni í hrúga fyrir þig. 148 00:09:47,000 --> 00:09:51,000 Það eru fjölskyldu virka alloc. 149 00:09:51,000 --> 00:09:53,000 Í fyrsta lagi er malloc, sem þú átt að venjast. 150 00:09:53,000 --> 00:09:56,000 Þá er það calloc, sem gerir það sama og malloc, 151 00:09:56,000 --> 00:09:59,000 en það verður núll allt út fyrir þig. 152 00:09:59,000 --> 00:10:04,000 Ef þú hefur einhvern tíma langað til að setja allt að null eftir mallocing eitthvað 153 00:10:04,000 --> 00:10:06,000 þú ættir að hafa bara notað calloc í fyrsta sæti í stað þess að skrifa 154 00:10:06,000 --> 00:10:09,000 a for lykkju til núll út alla blokk minni. 155 00:10:09,000 --> 00:10:15,000 >> Realloc er eins malloc og hefur a einhver fjöldi af sérstökum tilvikum, 156 00:10:15,000 --> 00:10:19,000 en í grundvallaratriðum hvað realloc gerir er 157 00:10:19,000 --> 00:10:24,000 það tekur músina sem hafði þegar verið úthlutað. 158 00:10:24,000 --> 00:10:27,000 Realloc er aðgerð sem þú vilt að borga eftirtekt til hér. 159 00:10:27,000 --> 00:10:31,000 Það tekur bendi sem hafði þegar verið skilað frá malloc. 160 00:10:31,000 --> 00:10:35,000 Segjum að þú krafið malloc bendi á 10 bæti. 161 00:10:35,000 --> 00:10:38,000 Þá síðar þér grein fyrir að þú vildir 20 bæti, 162 00:10:38,000 --> 00:10:42,000 svo þú kalla realloc á þessi músina með 20 bæti, 163 00:10:42,000 --> 00:10:47,000 og realloc sjálfkrafa afrita yfir allt fyrir þig. 164 00:10:47,000 --> 00:10:51,000 Ef þú heitir bara malloc aftur, eins og ég hef blokk af 10 bæti. 165 00:10:51,000 --> 00:10:53,000 Nú þarf ég að loka á 20 bæti, 166 00:10:53,000 --> 00:10:58,000 þannig að ef ég malloc 20 bæti, þá hef ég til með höndunum afrita yfir 10 bæti úr fyrsta sem 167 00:10:58,000 --> 00:11:01,000 í seinni hlutur og síðan frjáls það fyrsta. 168 00:11:01,000 --> 00:11:04,000 Realloc mun annast það fyrir þig. 169 00:11:04,000 --> 00:11:11,000 >> Tilkynning undirskrift er að fara að vera ógilt *, 170 00:11:11,000 --> 00:11:15,000 sem er bara að skila bendi á blokkinni minni, 171 00:11:15,000 --> 00:11:17,000 þá ógilt * PTR. 172 00:11:17,000 --> 00:11:22,000 Þú getur held * void sem almenna músina. 173 00:11:22,000 --> 00:11:27,000 Almennt, ert þú aldrei með * ógilt, 174 00:11:27,000 --> 00:11:30,000 en malloc er skila void *, og þá er það bara notað eins og 175 00:11:30,000 --> 00:11:34,000 þetta er í raun að fara að vera char *. 176 00:11:34,000 --> 00:11:37,000 Fyrri ógilt * sem hafði verið skilað með malloc 177 00:11:37,000 --> 00:11:41,000 er nú að fara til að fara framhjá til realloc, og þá stærð 178 00:11:41,000 --> 00:11:49,000 er nýr fjöldi bæti þú vilt úthluta, svo nýja getu þína. 179 00:11:49,000 --> 00:11:57,000 Ég skal gefa þér nokkrar mínútur, og gera það í rúm okkar. 180 00:11:57,000 --> 00:12:02,000 Byrjaðu revision 1. 181 00:12:16,000 --> 00:12:21,000 Ég stoppa þig eftir vonandi um nægan tíma til að framkvæma ýta, 182 00:12:21,000 --> 00:12:24,000 og þá ég gefa þér annað brot að gera popp. 183 00:12:24,000 --> 00:12:27,000 En það er í raun ekki það mikið kóða yfirleitt. 184 00:12:27,000 --> 00:12:35,000 The merkjamál er líklega vaxandi efni, auka getu. 185 00:12:35,000 --> 00:12:39,000 Jæja, enginn þrýstingur til að vera fullkomlega lokið, 186 00:12:39,000 --> 00:12:47,000 en svo lengi sem þér finnst eins og þú ert á réttri leið, það er gott. 187 00:12:47,000 --> 00:12:53,000 >> Hefur einhver hafa allir kóða þeir líða vel með mig draga upp? 188 00:12:53,000 --> 00:12:59,000 Já, mun ég, en er einhver hafa allir kóðann ég get draga upp? 189 00:12:59,000 --> 00:13:05,000 Jæja, þú getur byrjað, vista það, hvað sem það er? 190 00:13:05,000 --> 00:13:09,000 Ég gleymi alltaf að stíga. 191 00:13:09,000 --> 00:13:15,000 Jæja, horfa á ýta, 192 00:13:15,000 --> 00:13:18,000 viltu útskýra kóðann þinn? 193 00:13:18,000 --> 00:13:24,000 [Nemandi] Fyrst af öllu, aukin ég stærð. 194 00:13:24,000 --> 00:13:28,000 Ég held kannski að ég ætti að hafa að-engu að síður, aukið ég stærð, 195 00:13:28,000 --> 00:13:31,000 og ég sé ef það er minna en getu. 196 00:13:31,000 --> 00:13:36,000 Og ef það er minna en getu, bæti ég við fjölda sem við höfum nú þegar. 197 00:13:36,000 --> 00:13:42,000 Og ef það er ekki að margfalda ég getu um 2, 198 00:13:42,000 --> 00:13:50,000 og ég reallocate strengi array við eitthvað með stærri getu stærð núna. 199 00:13:50,000 --> 00:13:55,000 Og svo ef það tekst ekki, ég segi notanda og aftur rangt, 200 00:13:55,000 --> 00:14:04,000 og ef það er allt í lagi, svo ég setti band í nýja staðnum. 201 00:14:04,000 --> 00:14:07,000 >> [Rob B.] Einnig eftir að við notuðum góðan Bita rekstraraðila hér 202 00:14:07,000 --> 00:14:09,000 að margfalda með 2. 203 00:14:09,000 --> 00:14:11,000 Mundu vinstri vakt er alltaf að fara að margfalda með 2. 204 00:14:11,000 --> 00:14:15,000 Hægri vakt er deilt með 2 svo lengi sem þú manst að það þýðir 205 00:14:15,000 --> 00:14:18,000 deila með 2 eins og í heiltölu deilt með 2. 206 00:14:18,000 --> 00:14:20,000 Það gæti HÃ a 1 hér eða þar. 207 00:14:20,000 --> 00:14:26,000 En vakt vinstri við 1 er alltaf að fara að margfalda með 2, 208 00:14:26,000 --> 00:14:32,000 nema þú flæða mörk tölunnar, og þá mun það ekki vera. 209 00:14:32,000 --> 00:14:34,000 A hlið ummæli. 210 00:14:34,000 --> 00:14:39,000 Ég vil gera-þetta er ekki að fara að breyta kóðun hvaða hátt sem er, 211 00:14:39,000 --> 00:14:48,000 en ég eins og til að gera eitthvað eins og this. 212 00:14:48,000 --> 00:14:51,000 Það raunverulega er að fara að gera það lengur heldur. 213 00:15:04,000 --> 00:15:08,000 Kannski er þetta ekki hið fullkomna mál að sýna þetta, 214 00:15:08,000 --> 00:15:14,000 en ég eins og til hluti það í þessar blokkir- 215 00:15:14,000 --> 00:15:17,000 allt í lagi, ef þetta ef gerist, svo ég ætla að gera eitthvað, 216 00:15:17,000 --> 00:15:19,000 og þá aðgerð er lokið. 217 00:15:19,000 --> 00:15:22,000 Ég þarf ekki að þá fletta augunum alla leið niður virka 218 00:15:22,000 --> 00:15:25,000 til að sjá hvað gerist eftir annað. 219 00:15:25,000 --> 00:15:27,000 Það er ef þetta ef gerist, þá er ég aftur bara. 220 00:15:27,000 --> 00:15:30,000 Það hefur einnig ágætur bætt hag af öllu umfram það 221 00:15:30,000 --> 00:15:33,000 er nú færst til vinstri þegar. 222 00:15:33,000 --> 00:15:40,000 Ég þarf ekki lengur að, ef þú nær alltaf hlægilegur langur línur, 223 00:15:40,000 --> 00:15:45,000 þá þessir 4 bytes geta hjálpað, og einnig er meira til vinstri eitthvað, 224 00:15:45,000 --> 00:15:48,000 minna óvart þér líða ef eins-lagi, ég þarf að muna 225 00:15:48,000 --> 00:15:53,000 Ég er nú í while lykkju innan um annað inni í for lykkju. 226 00:15:53,000 --> 00:15:58,000 Einhvers staðar er hægt að gera þetta aftur strax, ég svona eins. 227 00:15:58,000 --> 00:16:05,000 Það er algerlega valfrjáls og ekki gert ráð fyrir á neinn hátt. 228 00:16:05,000 --> 00:16:12,000 >> [Nemandi] Verði stærð - í Mistakast ástandi? 229 00:16:12,000 --> 00:16:19,000 The mistakast ástand hér er að við ekki að realloc, svo já. 230 00:16:19,000 --> 00:16:22,000 Takið eftir hvernig í mistakast ástandi, væntanlega, 231 00:16:22,000 --> 00:16:26,000 nema við frjáls efni síðar, við erum alltaf að fara að mistakast 232 00:16:26,000 --> 00:16:29,000 sama hversu oft við að reyna að ýta eitthvað. 233 00:16:29,000 --> 00:16:32,000 Ef við höldum að ýta, halda við incrementing stærð, 234 00:16:32,000 --> 00:16:36,000 jafnvel þótt við séum ekki að setja neitt inn á mánudaginn. 235 00:16:36,000 --> 00:16:39,000 Venjulega við hækka ekki stærð fyrr 236 00:16:39,000 --> 00:16:43,000 eftir að við höfum sett tekist það á mánudaginn. 237 00:16:43,000 --> 00:16:50,000 Við viljum gera það, segja, hvort hér og hér. 238 00:16:50,000 --> 00:16:56,000 Og þá í stað þess að segja s.size ≤ getu, það er minna en getu, 239 00:16:56,000 --> 00:17:01,000 aðeins vegna þess að við fluttum þar sem allt var. 240 00:17:01,000 --> 00:17:07,000 >> Og munið, að eini staðurinn sem við gátum hugsanlega aftur falskur 241 00:17:07,000 --> 00:17:14,000 er hér, þar sem realloc aftur null, 242 00:17:14,000 --> 00:17:19,000 og ef þú skyldir til að muna staðalvillu, 243 00:17:19,000 --> 00:17:22,000 kannski þú might íhuga þetta mál þar sem þú vilt prenta staðall villa, 244 00:17:22,000 --> 00:17:26,000 svo fprintf stderr staðinn af réttlátur prenta beint til staðlaða út. 245 00:17:26,000 --> 00:17:31,000 Aftur, það er ekki von, en ef það er villa, 246 00:17:31,000 --> 00:17:41,000 tegund printf, þá þú might vilja til að gera það að prenta út staðlað villu úttak stað venjulegu út. 247 00:17:41,000 --> 00:17:44,000 >> Einhver hafa neitt annað til að hafa í huga? Já. 248 00:17:44,000 --> 00:17:47,000 [Nemandi] er hægt að fara yfir [inaudible]? 249 00:17:47,000 --> 00:17:55,000 [Rob B.] Já, í raun binariness um það eða bara hvað það er? 250 00:17:55,000 --> 00:17:57,000 [Nemandi] Svo þú margfalda það með 2? 251 00:17:57,000 --> 00:17:59,000 [Rob B.] Já, í grundvallaratriðum. 252 00:17:59,000 --> 00:18:11,000 Í tvöfaldur landi, höfum við alltaf sett okkar af tölustöfum. 253 00:18:11,000 --> 00:18:22,000 Bragðvísi þessa vinstri eftir 1 grundvallaratriðum setur það hér á hægri hlið. 254 00:18:22,000 --> 00:18:25,000 Aftur að þessu, bara að muna að allt í tvöfaldur 255 00:18:25,000 --> 00:18:28,000 er máttur af 2, þannig að þetta táknar 2 til 0, 256 00:18:28,000 --> 00:18:30,000 þetta 2 til 1, þetta 2 til 2. 257 00:18:30,000 --> 00:18:33,000 Með því að setja 0 á hægri hlið nú, breyting við bara allt yfir. 258 00:18:33,000 --> 00:18:38,000 Hvað er notað til að vera 2 til 0 er nú 2 til 1, er 2 til 2. 259 00:18:38,000 --> 00:18:41,000 Hægri hlið sem við bætist 260 00:18:41,000 --> 00:18:44,000 er víst að fara að vera 0, 261 00:18:44,000 --> 00:18:46,000 sem vit. 262 00:18:46,000 --> 00:18:49,000 Ef þú margfaldar alltaf tala um 2, það er ekki að fara að enda skrýtið, 263 00:18:49,000 --> 00:18:54,000 þannig að 2 til 0 stað ætti að vera 0, 264 00:18:54,000 --> 00:18:59,000 og þetta er það sem ég varaði helmingur um áður er ef þú skyldir skipta 265 00:18:59,000 --> 00:19:01,000 út fjölda bita í heiltölu, 266 00:19:01,000 --> 00:19:04,000 þá er þetta 1 er að fara að enda að fara burt. 267 00:19:04,000 --> 00:19:10,000 Það er aðeins hafa áhyggjur ef þú skyldir til að takast á við mjög stór getu. 268 00:19:10,000 --> 00:19:15,000 En á þeim tímapunkti, þá þú ert að takast á við fjölda milljarða af hlutum, 269 00:19:15,000 --> 00:19:25,000 sem gætu ekki passa inn í minni samt. 270 00:19:25,000 --> 00:19:31,000 >> Nú getum við fengið að skjóta, sem er jafnvel auðveldara. 271 00:19:31,000 --> 00:19:36,000 Þú getur gert það eins og ef þú skyldir til að skjóta a heild búnt, 272 00:19:36,000 --> 00:19:38,000 og nú þú ert á hálfar aftur. 273 00:19:38,000 --> 00:19:42,000 Þú getur realloc að minnka magn af minni sem þú hefur, 274 00:19:42,000 --> 00:19:47,000 en þú þarft ekki að hafa áhyggjur af því, svo eina realloc málið sé að fara að 275 00:19:47,000 --> 00:19:50,000 vaxandi minni, aldrei minnkandi minni, 276 00:19:50,000 --> 00:19:59,000 sem er að fara að gera popp frábær auðvelt. 277 00:19:59,000 --> 00:20:02,000 Nú biðraðir, sem eru að fara að vera eins og stafla, 278 00:20:02,000 --> 00:20:06,000 en til þess að taka það út er snúið. 279 00:20:06,000 --> 00:20:10,000 Dæmigerðu dæmi um biðröð er lína, 280 00:20:10,000 --> 00:20:12,000 svo ég giska á ef þú værir ensku, hefði ég sagt 281 00:20:12,000 --> 00:20:17,000 a dæmigerðu dæmi um biðröð er biðröð. 282 00:20:17,000 --> 00:20:22,000 Svo eins og línu, ef þú ert fyrsta manneskjan í línu, 283 00:20:22,000 --> 00:20:24,000 þú búist við að vera fyrsta manneskjan úr línu. 284 00:20:24,000 --> 00:20:31,000 Ef þú ert síðasta manneskja í línu, þú ert að fara að vera síðasta manneskja þjónustaðar. 285 00:20:31,000 --> 00:20:35,000 Við köllum það FIFO mynstur, en stafla var LIFO mynstur. 286 00:20:35,000 --> 00:20:40,000 Þessi orð eru mjög alhliða. 287 00:20:40,000 --> 00:20:46,000 >> Eins stafla og ólíkt fylki, biðraðir yfirleitt leyfa ekki aðgang að þáttum í miðjunni. 288 00:20:46,000 --> 00:20:50,000 Hér stafla, höfum við ýta og POP. 289 00:20:50,000 --> 00:20:54,000 Hér gerast við að hafa kallað þá e, og dequeue. 290 00:20:54,000 --> 00:20:58,000 Ég hef líka heyrt þá kallað vakt og unshift. 291 00:20:58,000 --> 00:21:02,000 Ég hef heyrt fólk segja að ýta og skjóta til að gilda einnig um biðraðir. 292 00:21:02,000 --> 00:21:05,000 Ég hef heyrt setja, eyða, 293 00:21:05,000 --> 00:21:11,000 svo ýta og skjóta, ef þú ert að tala um stafla, þú ert að þrýsta og pabbi. 294 00:21:11,000 --> 00:21:16,000 Ef þú ert að tala um biðraðir, þú gætir valið orð sem þú vilt nota 295 00:21:16,000 --> 00:21:23,000 fyrir ísetningu og flutningur, og það er engin samstaða um hvað það ætti að kallast. 296 00:21:23,000 --> 00:21:27,000 En hér höfum við e, og dequeue. 297 00:21:27,000 --> 00:21:37,000 Nú er struct lítur nánast eins og stafla strúktúr. 298 00:21:37,000 --> 00:21:40,000 En við verðum að halda utan um höfuð. 299 00:21:40,000 --> 00:21:44,000 Ég held að það segir hérna, en afhverju þurfum við höfuðið? 300 00:21:53,000 --> 00:21:57,000 Frummyndirnar eru í grundvallaratriðum eins og ýta og skjóta. 301 00:21:57,000 --> 00:21:59,000 Þú getur hugsað um það sem ýta og popp. 302 00:21:59,000 --> 00:22:08,000 Eini munurinn er pop er aftur-stað síðast, það er aftur fyrsta. 303 00:22:08,000 --> 00:22:12,000 2, 1, 3, 4, eða eitthvað. 304 00:22:12,000 --> 00:22:14,000 Og hér er að byrja. 305 00:22:14,000 --> 00:22:17,000 Biðröð okkar er alveg fullt, þannig að það er fjórir þættir í henni. 306 00:22:17,000 --> 00:22:21,000 Endalok biðröð okkar er nú 2, 307 00:22:21,000 --> 00:22:24,000 og nú erum við að fara að setja eitthvað annað. 308 00:22:24,000 --> 00:22:29,000 >> Þegar við viljum setja það eitthvað annað, það sem við gerðum að stafla útgáfa 309 00:22:29,000 --> 00:22:36,000 er við langan blokk okkar minni. 310 00:22:36,000 --> 00:22:40,000 Hvað er vandamálið við þetta? 311 00:22:40,000 --> 00:22:45,000 [Nemandi] Þú færa 2. 312 00:22:45,000 --> 00:22:51,000 Það sem ég sagði áður um lok biðröð, 313 00:22:51,000 --> 00:22:57,000 þetta er ekki skynsamleg að við byrja á 1, 314 00:22:57,000 --> 00:23:01,000 þá viljum við dequeue 1, þá dequeue 3, þá dequeue 4, 315 00:23:01,000 --> 00:23:05,000 þá dequeue 2, þá dequeue þessa. 316 00:23:05,000 --> 00:23:08,000 Við getum ekki notað realloc nú, 317 00:23:08,000 --> 00:23:11,000 eða minnsta kosti, þú þarft að nota realloc á annan hátt. 318 00:23:11,000 --> 00:23:15,000 En þú líklega ætti ekki bara að nota realloc. 319 00:23:15,000 --> 00:23:18,000 Þú ert að fara að þurfa að höndunum afrita minni. 320 00:23:18,000 --> 00:23:21,000 >> Það eru tvær aðgerðir til að afrita minni. 321 00:23:21,000 --> 00:23:25,000 Það er memcopy og memmove. 322 00:23:25,000 --> 00:23:29,000 Ég er nú að lesa maður síður að sjá hver þú ert að fara til að vilja nota. 323 00:23:29,000 --> 00:23:35,000 Jæja, memcopy, munurinn er 324 00:23:35,000 --> 00:23:38,000 að memcopy og memmove, einn sér um málið rétt 325 00:23:38,000 --> 00:23:41,000 þar sem þú ert að copying í svæðinu sem gerist að skarast á svæðinu 326 00:23:41,000 --> 00:23:46,000 þú ert Afrita frá. 327 00:23:46,000 --> 00:23:50,000 Memcopy ekki höndla það. Memmove gerir. 328 00:23:50,000 --> 00:23:59,000 Þú getur hugsa um vandamál sem- 329 00:23:59,000 --> 00:24:09,000 við skulum segja að ég vil að afrita þennan mann, 330 00:24:09,000 --> 00:24:13,000 Þessir fjórir að þetta strákur yfir. 331 00:24:13,000 --> 00:24:16,000 Að lokum, hvað array ætti að líta út 332 00:24:16,000 --> 00:24:26,000 eftir að afrit er 2, 1, 2, 1, 3, 4, og svo smá dót í lok. 333 00:24:26,000 --> 00:24:29,000 En þetta er háð þeirri röð sem við afrita í raun, 334 00:24:29,000 --> 00:24:32,000 því ef við gerum telja ekki þá staðreynd að svæðið sem við erum að copying í 335 00:24:32,000 --> 00:24:35,000 skörun sá sem við erum Afrita frá, 336 00:24:35,000 --> 00:24:46,000 þá við gætum gert eins og að byrja hér, afrita 2 í stað við viljum fara, 337 00:24:46,000 --> 00:24:52,000 þá færa ábendingum okkar áfram. 338 00:24:52,000 --> 00:24:56,000 >> Nú ætlum við að vera hér og hér, og nú viljum við að afrita 339 00:24:56,000 --> 00:25:04,000 þessi strákur yfir þennan mann og færa ábendingum okkar áfram. 340 00:25:04,000 --> 00:25:07,000 Það sem við erum að fara að enda að fá er 2, 1, 2, 1, 2, 1 341 00:25:07,000 --> 00:25:10,000 stað viðeigandi 2, 1, 2, 1, 3, 4 vegna þess 342 00:25:10,000 --> 00:25:15,000 2, 1 overrode upprunalega 3, 4. 343 00:25:15,000 --> 00:25:19,000 Memmove annast það rétt. 344 00:25:19,000 --> 00:25:23,000 Í þessu tilviki, í grundvallaratriðum bara alltaf nota memmove 345 00:25:23,000 --> 00:25:26,000 vegna þess að það sér það á réttan hátt. 346 00:25:26,000 --> 00:25:29,000 Það yfirleitt ekki framkvæma allir verri. 347 00:25:29,000 --> 00:25:32,000 Hugmyndin er í stað þess að byrja frá byrjun og afrita þessa leið 348 00:25:32,000 --> 00:25:35,000 eins og við gerðum hérna, byrjar það frá enda og eintök í, 349 00:25:35,000 --> 00:25:38,000 og í því tilviki getur þú aldrei átt í vandræðum. 350 00:25:38,000 --> 00:25:40,000 Það er enginn árangur glataður. 351 00:25:40,000 --> 00:25:47,000 Alltaf nota memmove. Aldrei hafa áhyggjur óður memcopy. 352 00:25:47,000 --> 00:25:51,000 Og það er þar sem þú ert að fara að þurfa að sérstaklega memmove 353 00:25:51,000 --> 00:26:01,000 á umbúðir-um hluta af biðröð þinn. 354 00:26:01,000 --> 00:26:04,000 Engar áhyggjur ef ekki alveg gert. 355 00:26:04,000 --> 00:26:10,000 Þetta er erfiðara en stafla, ýta, og popp. 356 00:26:10,000 --> 00:26:15,000 >> Einhver hafa allir kóða við gætum vinna með? 357 00:26:15,000 --> 00:26:21,000 Jafnvel þótt alveg ófullnægjandi? 358 00:26:21,000 --> 00:26:23,000 [Nemandi] Já, það er alveg ófullnægjandi, þó. 359 00:26:23,000 --> 00:26:27,000 Alveg ófullnægjandi er fínn svo lengi sem við-er hægt að vista endurskoðun? 360 00:26:27,000 --> 00:26:32,000 Ég gleymi því hvert einasta skipti. 361 00:26:32,000 --> 00:26:39,000 Jæja, hunsa hvað gerist þegar við þurfum að búa það. 362 00:26:39,000 --> 00:26:42,000 Alveg hunsa Resize. 363 00:26:42,000 --> 00:26:49,000 Útskýrðu þennan kóða. 364 00:26:49,000 --> 00:26:54,000 Ég er að athuga fyrst af öllu, ef stærð er minna en eintak Fyrst af öllu 365 00:26:54,000 --> 00:27:01,000 og þá á eftir að setja-ég að taka höfuðið + stærð, 366 00:27:01,000 --> 00:27:05,000 og ég tryggja það hula um getu fylkisins, 367 00:27:05,000 --> 00:27:08,000 og ég set inn nýja strenginn á þá stöðu. 368 00:27:08,000 --> 00:27:12,000 Og ég stækka og aftur satt. 369 00:27:12,000 --> 00:27:22,000 >> [Rob B.] Þetta er örugglega einn af þeim tilvikum þar sem þú ert að fara að vilja að vera með unga fólkið. 370 00:27:22,000 --> 00:27:25,000 Hvers konar tilfelli þar sem þú hefur umbúðir í kring, ef þú heldur að umbúðir í kring, 371 00:27:25,000 --> 00:27:29,000 strax hugsun ætti að vera unga fólkið. 372 00:27:29,000 --> 00:27:36,000 Eins og a fljótur hagræðingu / gera númerið þitt einn lína styttri, 373 00:27:36,000 --> 00:27:42,000 þú tekur eftir að línan strax eftir þetta eina 374 00:27:42,000 --> 00:27:53,000 er bara stærð + +, svo þú fellir að í þessari línu, stærð + +. 375 00:27:53,000 --> 00:27:58,000 Nú hérna, höfum við málið 376 00:27:58,000 --> 00:28:01,000 þar sem við höfum ekki nóg minni, 377 00:28:01,000 --> 00:28:05,000 þannig að við erum að auka við 2. 378 00:28:05,000 --> 00:28:09,000 Ég giska á að þú gætir hafa sama vandamál hér, en við getum hundsað það núna, 379 00:28:09,000 --> 00:28:13,000 þar sem ef þú tókst ekki að auka getu þína, 380 00:28:13,000 --> 00:28:18,000 þá þú ert að fara að vilja til að minnka getu með 2 aftur. 381 00:28:18,000 --> 00:28:24,000 Annar stutt huga er bara eins og þú getur gert + =, 382 00:28:24,000 --> 00:28:30,000 þú getur líka gert << =. 383 00:28:30,000 --> 00:28:43,000 Næstum allt er hægt að fara áður en jafningjar, + =, | =, & =, << =. 384 00:28:43,000 --> 00:28:52,000 Char * nýtt er ný blokk okkar minni. 385 00:28:52,000 --> 00:28:55,000 Ó, hérna. 386 00:28:55,000 --> 00:29:02,000 >> Hvað finnst fólki um gerð nýrra blokk okkar af minni? 387 00:29:02,000 --> 00:29:06,000 [Nemandi] Það ætti að vera bleikju **. 388 00:29:06,000 --> 00:29:12,000 Hugsun aftur til strúktúr okkar upp hér, 389 00:29:12,000 --> 00:29:14,000 strengir er það sem við erum að reallocating. 390 00:29:14,000 --> 00:29:21,000 Við erum að gera allt nýja dynamic geymslu fyrir þætti í biðröð. 391 00:29:21,000 --> 00:29:25,000 Það sem við erum að fara að framselja á strengi er það sem við erum að mallocing núna, 392 00:29:25,000 --> 00:29:30,000 og svo nýtt er að fara að vera bleikju **. 393 00:29:30,000 --> 00:29:34,000 Það er að fara að vera fylki af strengjum. 394 00:29:34,000 --> 00:29:38,000 Þá er það mál þar sem við erum að fara að skila falskur? 395 00:29:38,000 --> 00:29:41,000 [Nemandi] Ættum við að gera char *? 396 00:29:41,000 --> 00:29:44,000 [Rob B.] Já, gott símtal. 397 00:29:44,000 --> 00:29:46,000 [Nemandi] Hvað var það? 398 00:29:46,000 --> 00:29:49,000 [Rob B.] Okkur langaði til að gera stærð char * vegna þess að við erum ekki lengur- 399 00:29:49,000 --> 00:29:53,000 þetta væri í raun verið mjög stór vandamál vegna sizeof (char) væri 1. 400 00:29:53,000 --> 00:29:55,000 Sizeof char * er að fara að vera 4, 401 00:29:55,000 --> 00:29:58,000 svo a einhver fjöldi af sinnum þegar þú ert að takast á við ints, 402 00:29:58,000 --> 00:30:01,000 þú hættir að komast upp með það vegna þess að stærð int og stærð int * 403 00:30:01,000 --> 00:30:04,000 á 32-bita kerfi eru að fara til vera the sami hlutur. 404 00:30:04,000 --> 00:30:09,000 En hér, sizeof (char) og sizeof (char *) eru nú að fara að vera það sama. 405 00:30:09,000 --> 00:30:15,000 >> Hvað er aðstæður þar sem við aftur rangar? 406 00:30:15,000 --> 00:30:17,000 [Nemandi] Ný er null. 407 00:30:17,000 --> 00:30:23,000 Já, ef nýr er núll, aftur við rangar, 408 00:30:23,000 --> 00:30:34,000 og ég ætla að henda hérna- 409 00:30:34,000 --> 00:30:37,000 [Nemandi] [inaudible] 410 00:30:37,000 --> 00:30:39,000 [Rob B.] Já, þetta er fínt. 411 00:30:39,000 --> 00:30:46,000 Þú getur annað hvort gert 2 sinnum getu eða getu Shift 1 og þá bara sett það niður hér eða hvað. 412 00:30:46,000 --> 00:30:52,000 Við munum gera það sem við áttum það. 413 00:30:52,000 --> 00:30:56,000 Stærð >> = 1. 414 00:30:56,000 --> 00:31:08,000 Og þú ert aldrei að fara að hafa áhyggjur af að tapa setja 1 er 415 00:31:08,000 --> 00:31:12,000 vegna þess að þú vinstri færst um 1, svo er setja 1 er endilega 0, 416 00:31:12,000 --> 00:31:16,000 svo rétt að færa um 1, þú ert enn að fara að vera fínn. 417 00:31:16,000 --> 00:31:19,000 [Nemandi] Ert þú þarft að gera það áður en aftur? 418 00:31:19,000 --> 00:31:29,000 [Rob B.] Já, þetta gerir alls ekkert vit. 419 00:31:29,000 --> 00:31:36,000 >> Nú tekur við ætlum að enda aftur rétt til enda. 420 00:31:36,000 --> 00:31:39,000 Leiðin sem við erum að fara að gera þessar memmoves, 421 00:31:39,000 --> 00:31:45,000 við þurfum að fara varlega með það hvernig við gerum þá. 422 00:31:45,000 --> 00:31:50,000 Hefur einhver hefur einhverjar uppástungur um hvernig við gerum þá? 423 00:32:17,000 --> 00:32:21,000 Hér er byrjun okkar. 424 00:32:21,000 --> 00:32:28,000 Óhjákvæmilega, við viljum byrja á byrjun aftur 425 00:32:28,000 --> 00:32:35,000 og afrita hluti á þaðan, 1, 3, 4, 2. 426 00:32:35,000 --> 00:32:41,000 Hvernig gerir þú það? 427 00:32:41,000 --> 00:32:52,000 Fyrst verð ég að líta á manninn síðu til memmove aftur. 428 00:32:52,000 --> 00:32:57,000 Memmove, röð rökum er alltaf mikilvægt. 429 00:32:57,000 --> 00:33:01,000 Við viljum áfangastað okkar fyrst, uppspretta annað, stærð þriðja. 430 00:33:01,000 --> 00:33:06,000 There ert a einhver fjöldi af aðgerðum sem snúast uppspretta og áfangastað. 431 00:33:06,000 --> 00:33:11,000 Áfangastað, uppspretta tilhneigingu til að vera í samræmi nokkuð. 432 00:33:17,000 --> 00:33:21,000 Færa, hvað er það aftur? 433 00:33:21,000 --> 00:33:27,000 Það skilar bendi á áfangastað, hver sem ástæðan er að þú vilt kannski að. 434 00:33:27,000 --> 00:33:32,000 Ég get mynd lesið það, en við viljum að flytja inn áfangastað okkar. 435 00:33:32,000 --> 00:33:35,000 >> Hvað er áfangastaður okkar að fara að vera? 436 00:33:35,000 --> 00:33:37,000 [Nemandi] New. 437 00:33:37,000 --> 00:33:39,000 [Rob B.] Já, og hvar erum við Afrita frá? 438 00:33:39,000 --> 00:33:43,000 The fyrstur hlutur sem við erum að afritun er þetta 1, 3, 4. 439 00:33:43,000 --> 00:33:50,000 Hvað er-þetta 1, 3, 4. 440 00:33:50,000 --> 00:33:55,000 Hvað er heimilisfang þessarar 1? 441 00:33:55,000 --> 00:33:58,000 Hvað er heimilisfang að 1? 442 00:33:58,000 --> 00:34:01,000 [Nemandi] [inaudible] 443 00:34:01,000 --> 00:34:03,000 [Rob B.] Head + heimilisfang fyrstu frumefni. 444 00:34:03,000 --> 00:34:05,000 Hvernig fáum við fyrsta þáttur í fylki? 445 00:34:05,000 --> 00:34:10,000 [Nemandi] biðröð. 446 00:34:10,000 --> 00:34:15,000 [Rob B.] Já, q.strings. 447 00:34:15,000 --> 00:34:20,000 Mundu hér, yfirmaður okkar er 1. 448 00:34:20,000 --> 00:34:24,000 Darn það. Ég held bara að það er dularfullur- 449 00:34:24,000 --> 00:34:29,000 Hér, yfirmaður okkar er 1. Ég ætla að breyta lit mitt líka. 450 00:34:29,000 --> 00:34:36,000 Og hér er strengir. 451 00:34:36,000 --> 00:34:41,000 Þetta getum við annaðhvort skrifa það eins og við gerðum hérna 452 00:34:41,000 --> 00:34:43,000 með höfuð + q.strings. 453 00:34:43,000 --> 00:34:51,000 A einhver fjöldi af fólk líka skrifa það & q.strings [höfuð]. 454 00:34:51,000 --> 00:34:55,000 Þetta er í raun ekki allir minna duglegur. 455 00:34:55,000 --> 00:34:58,000 Þú might hugsa um það sem þú ert að dereferencing það og þá fá heimilisfang, 456 00:34:58,000 --> 00:35:04,000 en þýðandinn er að fara að þýða það að það sem við höfðum áður en engu að síður, q.strings + höfuð. 457 00:35:04,000 --> 00:35:06,000 Hvort heldur sem þú vilt að hugsa um það. 458 00:35:06,000 --> 00:35:11,000 >> Og hversu mörg bæti viljum afrita? 459 00:35:11,000 --> 00:35:15,000 [Námsmaður] Stærð - höfuð. 460 00:35:15,000 --> 00:35:18,000 Stærð - höfuð. 461 00:35:18,000 --> 00:35:21,000 Og þá gætir þú alltaf skrifa út dæmi 462 00:35:21,000 --> 00:35:23,000 að reikna út ef það er rétt. 463 00:35:23,000 --> 00:35:26,000 [Nemandi] Það þarf að skipta um 2 þá. 464 00:35:26,000 --> 00:35:30,000 Já, svo ég held að við gætum notað stærð. 465 00:35:30,000 --> 00:35:35,000 Við höfum enn stærð being- 466 00:35:35,000 --> 00:35:39,000 með stærð, við höfum stærð jafngildir 4. 467 00:35:39,000 --> 00:35:42,000 Stærð okkar er 4. Höfuð okkar er 1. 468 00:35:42,000 --> 00:35:46,000 Við viljum að afrita þessar 3 einingar. 469 00:35:46,000 --> 00:35:54,000 Það er andleg heilbrigði stöðva þessi stærð - höfuð er rétt 3. 470 00:35:54,000 --> 00:35:58,000 Og koma aftur hingað, eins og ég sagði áður, 471 00:35:58,000 --> 00:36:00,000 Ef við notuðum getu, þá við myndum þurfa að skipta um 2 472 00:36:00,000 --> 00:36:04,000 vegna þess að við höfum nú þegar vaxið getu okkar, svo í staðinn, við erum að fara að nota stærð. 473 00:36:11,000 --> 00:36:13,000 Sem eintök sem hluta. 474 00:36:13,000 --> 00:36:18,000 Nú þurfum við að afrita aðra hluti, sá hluti sem er vinstra megin við byrjun. 475 00:36:18,000 --> 00:36:28,000 >> Það er að fara að memmove í hvaða stöðu? 476 00:36:28,000 --> 00:36:32,000 [Nemandi] Plus stærð - höfuð. 477 00:36:32,000 --> 00:36:38,000 Já, þannig að við höfum nú þegar afritað í stærð - höfuð bæti, 478 00:36:38,000 --> 00:36:43,000 og svo þar sem við viljum afrita sem eftir bæti er nýtt 479 00:36:43,000 --> 00:36:48,000 og þá stærð mínus-vel, fjöldi bæti við höfum nú þegar afritað inn 480 00:36:48,000 --> 00:36:52,000 Og þá hvar erum við Afrita frá? 481 00:36:52,000 --> 00:36:54,000 [Nemandi] Q.strings [0]. 482 00:36:54,000 --> 00:36:56,000 [Rob B.] Já, q.strings. 483 00:36:56,000 --> 00:37:02,000 Við gætum annað hvort gert & q.strings [0]. 484 00:37:02,000 --> 00:37:05,000 Þetta er talsvert sjaldgæfari en þetta. 485 00:37:05,000 --> 00:37:14,000 Ef það er bara að fara að vera 0, þá munt þú hafa tilhneigingu til að sjá q.strings. 486 00:37:14,000 --> 00:37:16,000 Það er þar sem við erum Afrita frá. 487 00:37:16,000 --> 00:37:18,000 Hversu margir bytes Eigum við eftir að afrita? >> [Nemandi] 10. 488 00:37:18,000 --> 00:37:20,000 Hægri. 489 00:37:20,000 --> 00:37:25,000 [Nemandi] höfum við að margfalda 5-10 sinnum stærð bæti eða eitthvað? 490 00:37:25,000 --> 00:37:30,000 Já, svo þetta er þar-hvað nákvæmlega erum við að afrita? 491 00:37:30,000 --> 00:37:32,000 [Nemandi] [inaudible] 492 00:37:32,000 --> 00:37:34,000 Hvað er tegund af hlutur sem við erum að afrita? 493 00:37:34,000 --> 00:37:36,000 [Nemandi] [inaudible] 494 00:37:36,000 --> 00:37:41,000 Já, þannig að char * s sem við erum að afrita, við vitum ekki hvar þeir koma frá. 495 00:37:41,000 --> 00:37:47,000 Jæja, þar sem þeir eru að benda á, eins og strengi, enda við upp að þrýsta henni á biðröð 496 00:37:47,000 --> 00:37:49,000 eða enqueuing á biðröð. 497 00:37:49,000 --> 00:37:51,000 Ef þeir eru að koma frá, höfum við ekki hugmynd. 498 00:37:51,000 --> 00:37:56,000 Við þurfum bara að halda utan um char * s sig. 499 00:37:56,000 --> 00:38:00,000 Við viljum ekki að afrita stærð - höfuð bæti. 500 00:38:00,000 --> 00:38:03,000 Við viljum að afrita stærð - höfuð char * s, 501 00:38:03,000 --> 00:38:11,000 þannig að við erum að fara að margfalda þetta með sizeof (char *). 502 00:38:11,000 --> 00:38:17,000 Sama hérna, höfuð * sizeof (char *). 503 00:38:17,000 --> 00:38:24,000 >> [Nemandi] Hvað [inaudible]? 504 00:38:24,000 --> 00:38:26,000 Þetta hér ekki satt? 505 00:38:26,000 --> 00:38:28,000 [Nemandi] Nei, hér að stærð - höfuð. 506 00:38:28,000 --> 00:38:30,000 [Rob B.] Þetta hérna? 507 00:38:30,000 --> 00:38:32,000 Pointer tölur. 508 00:38:32,000 --> 00:38:35,000 Hvernig bendillinn tölur er að fara að vinna er 509 00:38:35,000 --> 00:38:40,000 það margfaldar sjálfkrafa af stærð letursins sem við erum að fást við. 510 00:38:40,000 --> 00:38:46,000 Rétt eins og hérna, nýr + (stærð - höfuð) 511 00:38:46,000 --> 00:38:56,000 er einmitt jafngild og nýja [size - Höfuð] 512 00:38:56,000 --> 00:39:00,000 fyrr en við búumst við að vinna rétt, 513 00:39:00,000 --> 00:39:04,000 síðan ef við erum að takast á við int array, þá erum við ekki vísitölu með int- 514 00:39:04,000 --> 00:39:07,000 eða ef það er í stærð 5 og þú vilt 4. frumefni, þá erum við vísitölu inn í 515 00:39:07,000 --> 00:39:10,000 int array [4]. 516 00:39:10,000 --> 00:39:14,000 Þú áttina-[4] * stærð int. 517 00:39:14,000 --> 00:39:21,000 Sem annast það sjálfkrafa, og þetta mál 518 00:39:21,000 --> 00:39:29,000 er bókstaflega jafngildir, svo krappi setningafræði 519 00:39:29,000 --> 00:39:34,000 er bara að fara að vera breytt í þetta eins fljótt og þú safna. 520 00:39:34,000 --> 00:39:38,000 Það er eitthvað sem þú þarft að vera varkár um það 521 00:39:38,000 --> 00:39:42,000 þegar þú ert að bæta við stærð - höfuð 522 00:39:42,000 --> 00:39:45,000 þú ert að bæta ekki einn bæti. 523 00:39:45,000 --> 00:39:53,000 Þú ert að bæta einn char *, sem getur verið einn bæti eða hvað. 524 00:39:53,000 --> 00:39:56,000 >> Aðrar spurningar? 525 00:39:56,000 --> 00:40:04,000 Jæja, dequeue er að fara að vera auðveldara. 526 00:40:04,000 --> 00:40:11,000 Ég skal gefa þér eina mínútu til að framkvæma. 527 00:40:11,000 --> 00:40:18,000 Ó, og ég held að þetta sé sama staða þar 528 00:40:18,000 --> 00:40:21,000 hvað e, mál, ef við erum að enqueuing null, 529 00:40:21,000 --> 00:40:24,000 kannski viljum við höndla það, kannski ekki. 530 00:40:24,000 --> 00:40:27,000 Við munum ekki gera það aftur hér, en eins og ef stafla okkar. 531 00:40:27,000 --> 00:40:34,000 Ef við e, null, gætum við viljum að troða það. 532 00:40:34,000 --> 00:40:40,000 Einhver hafa sumir merkjamál ég get draga upp? 533 00:40:40,000 --> 00:40:45,000 [Nemandi] Ég hef bara dequeue. 534 00:40:45,000 --> 00:40:56,000 Útgáfa 2 er að-lagi. 535 00:40:56,000 --> 00:40:59,000 Þú vilt útskýra? 536 00:40:59,000 --> 00:41:01,000 [Nemandi] Fyrst, þú gerir viss um að það er eitthvað í biðröð 537 00:41:01,000 --> 00:41:07,000 og að stærð er að fara niður um 1. 538 00:41:07,000 --> 00:41:11,000 Þú þarft að gera það, og þá aftur í höfuðið 539 00:41:11,000 --> 00:41:13,000 og fara svo í höfuðið upp 1. 540 00:41:13,000 --> 00:41:19,000 Jæja, svo er það horn ef við eigum að hafa í huga. Já. 541 00:41:19,000 --> 00:41:24,000 [Nemandi] Ef höfuðið er í síðasta frumefni, 542 00:41:24,000 --> 00:41:26,000 þá þú vilt ekki höfuð að benda utan fylkisins. 543 00:41:26,000 --> 00:41:29,000 >> Já, svo smellir um leið og höfuð enda fylking okkar, 544 00:41:29,000 --> 00:41:35,000 þegar við dequeue, að höfuð okkar er modded aftur til 0. 545 00:41:35,000 --> 00:41:40,000 Því miður getum við ekki gert það í einu skrefi. 546 00:41:40,000 --> 00:41:44,000 Ég held eins og ég myndi sennilega laga það 547 00:41:44,000 --> 00:41:52,000 þetta er að fara til vera a char *, hvað við erum að koma aftur, 548 00:41:52,000 --> 00:41:55,000 hvað breytu nafn þitt vill vera. 549 00:41:55,000 --> 00:42:02,000 Þá viljum við að unga fólkið höfuð við getu okkar 550 00:42:02,000 --> 00:42:10,000 og síðan aftur REt. 551 00:42:10,000 --> 00:42:14,000 A einhver fjöldi af fólki hér að þeir gætu gert- 552 00:42:14,000 --> 00:42:19,000 þetta er raunin af-you'll sjá fólk gera ef höfuðið 553 00:42:19,000 --> 00:42:29,000 er meiri en getu, gera höfuð - getu. 554 00:42:29,000 --> 00:42:36,000 Og það er bara að vinna í kringum það sem unga fólkið er. 555 00:42:36,000 --> 00:42:41,000 Head unga fólkið = getu er miklu hreinni 556 00:42:41,000 --> 00:42:51,000 á umbúðir um en ef meiri höfuð en höfuð getu - rúmtak. 557 00:42:51,000 --> 00:42:56,000 >> Spurningar? 558 00:42:56,000 --> 00:43:02,000 Allt í lagi, það síðasta sem við höfum skilið eftir tengist lista okkar. 559 00:43:02,000 --> 00:43:07,000 Þú gætir verið notuð til að sumir af tengda lista hegðun ef þú gerðir 560 00:43:07,000 --> 00:43:11,000 tengd listum í hash töflur, ef þú did a kjötkássa borð. 561 00:43:11,000 --> 00:43:15,000 Ég mæli eindregið með að gera kjötkássa borð. 562 00:43:15,000 --> 00:43:17,000 Þú gætir hafa þegar gert trie, 563 00:43:17,000 --> 00:43:23,000 en arlega er erfiðara. 564 00:43:23,000 --> 00:43:27,000 Fræðilega séð, þá eru þeir aðfellu betur. 565 00:43:27,000 --> 00:43:30,000 En bara líta á the stór borð, 566 00:43:30,000 --> 00:43:35,000 og reynir aldrei að gera betur, og þeir taka meira minni. 567 00:43:35,000 --> 00:43:43,000 Allt reynir um endar að vera verra fyrir meiri vinnu. 568 00:43:43,000 --> 00:43:49,000 Það er það sem lausn David Malan er alltaf er 569 00:43:49,000 --> 00:43:56,000 Er hann innlegg alltaf trie Lausn hans, og við skulum sjá hvar hann er nú. 570 00:43:56,000 --> 00:44:00,000 Hvað var hann undir, David J? 571 00:44:00,000 --> 00:44:06,000 Hann er # 18, svo það er ekki hræðilega slæmt, 572 00:44:06,000 --> 00:44:09,000 og það er að fara að vera einn af the bestur reynir þú að hugsa um 573 00:44:09,000 --> 00:44:17,000 eða einn af the bestur reynir af trie. 574 00:44:17,000 --> 00:44:23,000 Er það ekki enn upprunalega lausn hans? 575 00:44:23,000 --> 00:44:29,000 Mér líður eins trie lausnir hafa tilhneigingu til að vera meira í þessu svið af RAM notkun. 576 00:44:29,000 --> 00:44:33,000 >> Fara niður á the mjög toppur, og RAM notkun er í einum tölustafir. 577 00:44:33,000 --> 00:44:36,000 Fara niður að botni, og þá getur þú byrjað að sjá reynir 578 00:44:36,000 --> 00:44:41,000 þar sem þú færð algerlega gegnheill RAM notkun, 579 00:44:41,000 --> 00:44:45,000 og reynir eru erfiðari. 580 00:44:45,000 --> 00:44:53,000 Ekki alveg þess virði en mennta reynslu ef þú gerðir eitt. 581 00:44:53,000 --> 00:44:56,000 Það síðasta er tengda listanum okkar, 582 00:44:56,000 --> 00:45:04,000 og þessir þrír hlutir, stafla, biðraðir, og tengist listum, 583 00:45:04,000 --> 00:45:09,000 hvaða framtíð sem þú gerir alltaf í tölvunarfræði 584 00:45:09,000 --> 00:45:12,000 verður ráð fyrir að þú hefur þekkingu með þessum hlutum. 585 00:45:12,000 --> 00:45:19,000 Þeir eru bara svo grundvallaratriði í öllu. 586 00:45:19,000 --> 00:45:25,000 >> Tengd listum, og hér höfum við eintengdum lista er að fara að vera framkvæmd okkar. 587 00:45:25,000 --> 00:45:34,000 Hvað þýðir eintengdum meina öfugt við tvöfalt tengd? Já. 588 00:45:34,000 --> 00:45:37,000 [Nemandi] Það bendir bara á næsta músina frekar en við ábendingum, 589 00:45:37,000 --> 00:45:39,000 eins og sá á undan henni og einn eftir það. 590 00:45:39,000 --> 00:45:44,000 Já, svo í formi mynd, hvað gerði ég bara? 591 00:45:44,000 --> 00:45:48,000 Ég hef tvennt. Ég hef mynd og mynd. 592 00:45:48,000 --> 00:45:51,000 Í formi mynd, eintengdum okkar listum, 593 00:45:51,000 --> 00:45:57,000 Óhjákvæmilega höfum við einhvers konar bendi á höfuð af listanum okkar, 594 00:45:57,000 --> 00:46:02,000 og þá í lista okkar, höfum við bara ábendingar, 595 00:46:02,000 --> 00:46:05,000 og kannski þetta atriði sem null. 596 00:46:05,000 --> 00:46:08,000 Það er að fara að vera dæmigert teikning þinn eintengdum lista. 597 00:46:08,000 --> 00:46:14,000 A tvöfalt tengist lista, getur þú farið aftur á bak. 598 00:46:14,000 --> 00:46:19,000 Ef ég gefa þér einhverjar hnútur í listanum, þá getur þú endilega fá að 599 00:46:19,000 --> 00:46:23,000 önnur hnút í listanum ef það er tvöfalt tengda listanum. 600 00:46:23,000 --> 00:46:27,000 En ef ég fæ þér þriðja hnút á listanum og það er eintengdum lista, 601 00:46:27,000 --> 00:46:30,000 engin leið að þú ert alltaf að fara að fá til fyrstu og annarri hnúður. 602 00:46:30,000 --> 00:46:34,000 Og það er kostir og detriments og ein augljós einn 603 00:46:34,000 --> 00:46:42,000 er að taka upp meiri stærð, og þú verður að halda utan um hvar þessir hlutir vísi nú. 604 00:46:42,000 --> 00:46:49,000 En við umönnun aðeins um eintengdum. 605 00:46:49,000 --> 00:46:53,000 >> Nokkur atriði sem við ætlum að hafa til að hrinda í framkvæmd. 606 00:46:53,000 --> 00:47:00,000 Typedef struct hnút þín, int i: struct hnút * næsta, hnútur. 607 00:47:00,000 --> 00:47:09,000 Það typedef skal brenna í huga þínum. 608 00:47:09,000 --> 00:47:14,000 Quiz 1 ætti að vera eins og gefa typedef í tengda listanum hnút, 609 00:47:14,000 --> 00:47:18,000 og þú ættir að vera fær um að strax Scribble að niður 610 00:47:18,000 --> 00:47:22,000 án þess þó að hugsa um það. 611 00:47:22,000 --> 00:47:27,000 Ætli nokkrar spurningar, hvers vegna þurfum við strúktúr hér? 612 00:47:27,000 --> 00:47:32,000 Hvers vegna getur ekki við að segja hnút *? 613 00:47:32,000 --> 00:47:35,000 [Nemandi] [inaudible] 614 00:47:35,000 --> 00:47:38,000 Já. 615 00:47:38,000 --> 00:47:44,000 Það eina sem skilgreinir hnút sem hlutur 616 00:47:44,000 --> 00:47:47,000 er typedef sjálft. 617 00:47:47,000 --> 00:47:55,000 En eins og á þessum tímapunkti, þegar við erum konar þáttun með þennan hnút strúktúrinn skilgreiningu, 618 00:47:55,000 --> 00:48:01,000 við höfum ekki lokið typedef okkar enn, svo þar sem typedef hefur ekki lokið, 619 00:48:01,000 --> 00:48:05,000 hnút er ekki til. 620 00:48:05,000 --> 00:48:12,000 En struct hnút gerir, og þessi hnútur í hér, 621 00:48:12,000 --> 00:48:14,000 þetta gæti líka verið kölluð neitt annað. 622 00:48:14,000 --> 00:48:16,000 Þetta mætti ​​kalla n. 623 00:48:16,000 --> 00:48:19,000 Það mætti ​​nefna tengda listanum hnút. 624 00:48:19,000 --> 00:48:21,000 Það mætti ​​nefna neitt. 625 00:48:21,000 --> 00:48:26,000 En þetta struct hnút þarf að vera kallaður það sama sem þessi strúktúrinn hnút. 626 00:48:26,000 --> 00:48:29,000 Það sem þú kallar þetta hefur einnig að vera hér, 627 00:48:29,000 --> 00:48:32,000 og svo svarar það líka annað lið í spurningu 628 00:48:32,000 --> 00:48:37,000 sem er ástæðan fyrir-a einhver fjöldi af sinnum þegar þú sérð structs og typedefs af structs, 629 00:48:37,000 --> 00:48:42,000 þú munt sjá nafnlaus structs þar sem þú munt bara sjá typedef strúktúr, 630 00:48:42,000 --> 00:48:47,000 framkvæmd strúktúrinn, orðabók, eða hvað sem er. 631 00:48:47,000 --> 00:48:51,000 >> Hvers vegna hér þurfum við að segja hnút? 632 00:48:51,000 --> 00:48:54,000 Hvers vegna getur það ekki verið nafnlaus strúktúr? 633 00:48:54,000 --> 00:48:56,000 Það er næstum því sama svar. 634 00:48:56,000 --> 00:48:58,000 [Nemandi] Þú þarft að vísa til þess í strúktúr. 635 00:48:58,000 --> 00:49:04,000 Já, innan struct, þú þarft að vísa til strúktúr sig. 636 00:49:04,000 --> 00:49:10,000 Ef þú ekki gefa struct nafn, ef það er óákveðinn greinir í ensku nafnlaus strúktúr, er ekki hægt að vísa til þess. 637 00:49:10,000 --> 00:49:17,000 Og síðast en ekki síst, þau ættu öll að vera nokkuð augljóst, 638 00:49:17,000 --> 00:49:20,000 og þeir ættu að hjálpa þér grein fyrir ef þú ert að skrifa þetta niður 639 00:49:20,000 --> 00:49:24,000 sem þú ert að gera eitthvað rangt ef þessi tegund af hlutur ekki gera skilningarvit. 640 00:49:24,000 --> 00:49:28,000 Síðast en ekki síst, hvers vegna er þetta að vera struct hnút *? 641 00:49:28,000 --> 00:49:34,000 Af hverju getur það ekki bara verið strúktúr hnút næst? 642 00:49:34,000 --> 00:49:37,000 [Námsmaður] Pointer á næsta strúktúr. 643 00:49:37,000 --> 00:49:39,000 Það er óhjákvæmilega það sem við viljum. 644 00:49:39,000 --> 00:49:42,000 Af hverju gat það aldrei vera struct hnút næst? 645 00:49:42,000 --> 00:49:50,000 Hvers vegna er það að vera struct hnút * næst? Já. 646 00:49:50,000 --> 00:49:53,000 [Nemandi] Það er eins og óendanlega lykkju. 647 00:49:53,000 --> 00:49:55,000 Já. 648 00:49:55,000 --> 00:49:57,000 [Nemandi] Það myndi allt vera í einu. 649 00:49:57,000 --> 00:50:02,000 Já, hugsa bara um það hvernig við myndum gera stærð eða eitthvað. 650 00:50:02,000 --> 00:50:08,000 Stærð á strúktúr er í grundvallaratriðum + eða - nokkur mynstur hér eða þar. 651 00:50:08,000 --> 00:50:15,000 Það er í grundvallaratriðum að fara að vera summa stærðir því í strúktúr. 652 00:50:15,000 --> 00:50:18,000 Þessi hérna, án þess að breyta neitt, stærð er að fara að vera auðvelt. 653 00:50:18,000 --> 00:50:24,000 Stærð hnút strúktúrinn er að fara að vera stærð i + stærð næst. 654 00:50:24,000 --> 00:50:27,000 Stærð ég er að fara að vera 4. Stærð næst er að fara að vera 4. 655 00:50:27,000 --> 00:50:30,000 Stærð hnút strúktúrinn er að fara að vera 8. 656 00:50:30,000 --> 00:50:34,000 Ef við höfum ekki *, að hugsa um sizeof, 657 00:50:34,000 --> 00:50:37,000 þá sizeof (i) er að fara að vera 4. 658 00:50:37,000 --> 00:50:43,000 Stærð hnút strúktúrinn næsta er að fara að vera stærð i + stærð hnút strúktúrinn næsta 659 00:50:43,000 --> 00:50:46,000 + Stærð i + stærð hnút strúktúrinn næsta. 660 00:50:46,000 --> 00:50:55,000 Það væri óendanlega endurkvæmni hnúta. 661 00:50:55,000 --> 00:51:00,000 Þetta er ástæðan fyrir þessu er hvernig hlutirnir þurfa að vera. 662 00:51:00,000 --> 00:51:03,000 >> Aftur, örugglega minnið að 663 00:51:03,000 --> 00:51:06,000 eða að minnsta kosti skilja það nóg að þú getur verið fær um að 664 00:51:06,000 --> 00:51:12,000 Ástæðan gegnum hvað það ætti að líta út. 665 00:51:12,000 --> 00:51:14,000 Það sem við erum að fara til að vilja framkvæma. 666 00:51:14,000 --> 00:51:18,000 Ef lengd lista- 667 00:51:18,000 --> 00:51:21,000 þú gætir svindl og halda kringum 668 00:51:21,000 --> 00:51:24,000 alþjóðlegt lengd eða eitthvað, en við erum ekki að fara að gera það. 669 00:51:24,000 --> 00:51:28,000 Við ætlum að telja lengd listanum. 670 00:51:28,000 --> 00:51:34,000 Við höfum inniheldur, svo það er í grundvallaratriðum eins og leit, 671 00:51:34,000 --> 00:51:41,000 þannig að við höfum tengd lista yfir heilar að sjá hvort þetta heiltala er í tengda listanum. 672 00:51:41,000 --> 00:51:44,000 Prepend er að fara að setja í upphafi listanum. 673 00:51:44,000 --> 00:51:46,000 Setja er að fara að setja inn í lokin. 674 00:51:46,000 --> 00:51:53,000 Insert_sorted er að fara að setja inn í raðaða stöðu á listanum. 675 00:51:53,000 --> 00:52:01,000 Insert_sorted konar gert ráð fyrir að þú hefur aldrei notað prepend eða bæta í slæmum hætti. 676 00:52:01,000 --> 00:52:09,000 >> Insert_sorted þegar þú ert að innleiða insert_sorted- 677 00:52:09,000 --> 00:52:13,000 skulum segja að við höfum tengda listanum okkar. 678 00:52:13,000 --> 00:52:18,000 Þetta er það sem það lítur nú út, 2, 4, 5. 679 00:52:18,000 --> 00:52:24,000 Mig langar að setja inn 3, svo lengi sem listinn sjálfur er þegar raðað, 680 00:52:24,000 --> 00:52:27,000 það er auðvelt að finna þar sem 3 tilheyrir. 681 00:52:27,000 --> 00:52:29,000 Ég byrja á 2. 682 00:52:29,000 --> 00:52:32,000 Jæja, 3 er meira en 2, svo ég vil halda áfram. 683 00:52:32,000 --> 00:52:35,000 Ó, 4 er of stór, þannig að ég veit 3 ​​er að fara að fara á milli 2 og 4, 684 00:52:35,000 --> 00:52:39,000 og ég þarf að laga ábendingum og öll þessi efni. 685 00:52:39,000 --> 00:52:43,000 En ef við ekki stranglega nota insert_sorted, 686 00:52:43,000 --> 00:52:50,000 eins og við skulum bara segja að ég prepend 6, 687 00:52:50,000 --> 00:52:55,000 síðan tengd listinn minn er að fara að verða það. 688 00:52:55,000 --> 00:53:01,000 Það gerir nú ekkert vit, þannig að insert_sorted, getur þú bara gera ráð fyrir 689 00:53:01,000 --> 00:53:04,000 að listinn er raðað, jafnvel þótt aðgerðir til 690 00:53:04,000 --> 00:53:09,000 sem getur valdið því að ekki að vera flokkaður, og það er það. 691 00:53:09,000 --> 00:53:20,000 Finna gagnlegt Insert-þannig að þeir eru helstu hlutir sem þú ert að fara að framkvæma. 692 00:53:20,000 --> 00:53:24,000 >> Fyrir nú, taka eina mínútu til að gera lengd og inniheldur, 693 00:53:24,000 --> 00:53:30,000 og þá ætti að vera tiltölulega fljótur. 694 00:53:41,000 --> 00:53:48,000 Nálgast lokun svo einhver hafa nokkuð fyrir lengd eða inniheldur? 695 00:53:48,000 --> 00:53:50,000 Hann ætlar að vera næstum eins. 696 00:53:50,000 --> 00:53:57,000 [Nemandi] Lengd. 697 00:53:57,000 --> 00:54:01,000 Við skulum sjá, endurskoðun. 698 00:54:01,000 --> 00:54:04,000 Allt í lagi. 699 00:54:12,000 --> 00:54:15,000 Þú vilt útskýra? 700 00:54:15,000 --> 00:54:21,000 [Nemandi] Ég skapa bara músina hnút og frumstilla hana fyrst, sem er alþjóðlegt breytu okkar, 701 00:54:21,000 --> 00:54:27,000 og þá skal ég athuga hvort það er null þannig að ég fæ ekki að seg galli og aftur 0 ef það er málið. 702 00:54:27,000 --> 00:54:34,000 Annars, ég lykkja í gegnum, halda utan um innan heiltölu 703 00:54:34,000 --> 00:54:38,000 hversu oft ég hef farið inn á næsta þátt af listanum 704 00:54:38,000 --> 00:54:43,000 og í sömu aukningu starfsemi einnig aðgang að raunverulegur þáttur, 705 00:54:43,000 --> 00:54:47,000 og þá vil ég gera stöðugt að athuga hvort það er null, 706 00:54:47,000 --> 00:54:56,000 og ef það er núll, þá aborts það og bara skilar fjölda staka sem ég hef aðgang að. 707 00:54:56,000 --> 00:55:01,000 >> [Rob B.] Hefur einhver hefur einhverjar athugasemdir um neitt? 708 00:55:01,000 --> 00:55:06,000 Þetta lítur fínt nákvæmni vitur. 709 00:55:06,000 --> 00:55:10,000 [Nemandi] Ég held ekki að þú þarft að hnúturinn == null. 710 00:55:10,000 --> 00:55:13,000 Já, þannig að ef hnút == null áreturn 0. 711 00:55:13,000 --> 00:55:18,000 En ef hnút == null þá þetta-ó, það er réttmæti mál. 712 00:55:18,000 --> 00:55:23,000 Það var bara að þú ert að koma aftur i, en það er ekki að umfangi núna. 713 00:55:23,000 --> 00:55:30,000 Þú þarft bara int i, svo i = 0. 714 00:55:30,000 --> 00:55:34,000 En ef hnútur er núll, þá er ég er enn að fara að vera 0, 715 00:55:34,000 --> 00:55:39,000 og við erum að fara að skila 0, þannig að þetta mál er eins. 716 00:55:39,000 --> 00:55:48,000 Annar sameiginlegur hlutur er að halda yfirlýsingu 717 00:55:48,000 --> 00:55:51,000 Inside hnút í for lykkju. 718 00:55:51,000 --> 00:55:54,000 Það má segja að-ó, nei. 719 00:55:54,000 --> 00:55:56,000 Við skulum halda því sem þetta. 720 00:55:56,000 --> 00:55:59,000 Ég myndi líklega setja int i = 0 hér, 721 00:55:59,000 --> 00:56:05,000 þá hnútur * hnútur = fyrst hér. 722 00:56:05,000 --> 00:56:11,000 Og þetta er líklega hvernig-losna við þetta núna. 723 00:56:11,000 --> 00:56:14,000 Þetta er líklega hvernig ég hefði skrifað það. 724 00:56:14,000 --> 00:56:21,000 Þú gætir líka-að horfa á hana svona. 725 00:56:21,000 --> 00:56:25,000 Þetta fyrir uppbyggingu lykkju hérna 726 00:56:25,000 --> 00:56:30,000 ætti að vera næstum eins eðlilegt að þú sem að int i = 0 727 00:56:30,000 --> 00:56:33,000 i er minna en lengd fylkisins i + +. 728 00:56:33,000 --> 00:56:38,000 Ef það er hvernig þú iterate yfir fjölda, þetta er hvernig þú iterate yfir tengda listanum. 729 00:56:38,000 --> 00:56:45,000 >> Þetta ætti að vera annað eðlis á einhverjum tímapunkti. 730 00:56:45,000 --> 00:56:50,000 Með það í huga, þetta er að fara að vera nánast það sama. 731 00:56:50,000 --> 00:56:57,000 Þú ert að fara til að vilja iterate yfir tengda listanum. 732 00:56:57,000 --> 00:57:02,000 Ef hnúturinn-Ég hef ekki hugmynd um hvaða gildi er kallað. 733 00:57:02,000 --> 00:57:04,000 Hnútur i. 734 00:57:04,000 --> 00:57:15,000 Ef gildið á þeim hnút = i aftur satt, og það er það. 735 00:57:15,000 --> 00:57:18,000 Takið eftir því að eina leiðin sem við aftur alltaf falskur 736 00:57:18,000 --> 00:57:23,000 er ef við iterate yfir öllu sem tengist listanum og aldrei aftur satt, 737 00:57:23,000 --> 00:57:29,000 Svo það er það sem þetta gerir. 738 00:57:29,000 --> 00:57:36,000 Eins og a hlið minnispunktur-við að öllum líkindum ekki fá að auka eða prepend. 739 00:57:36,000 --> 00:57:39,000 >> Quick síðasta verkefni. 740 00:57:39,000 --> 00:57:52,000 Ef þú sérð truflanir leitarorð, þannig að við skulum segja að truflanir int telja = 0, 741 00:57:52,000 --> 00:57:56,000 þá gerum telja + +, þú getur í rauninni að hugsa um það sem alþjóðlegt breytu, 742 00:57:56,000 --> 00:58:00,000 jafnvel þó að ég sagði bara þetta er ekki hvernig við ætlum að innleiða lengd. 743 00:58:00,000 --> 00:58:06,000 Ég er að gera þetta hér, og þá telja + +. 744 00:58:06,000 --> 00:58:11,000 Hvaða leið sem við getum inn hnút í tengda listanum okkar við erum incrementing telja okkar. 745 00:58:11,000 --> 00:58:15,000 Aðalatriðið er það sem truflanir leitarorð þýðir. 746 00:58:15,000 --> 00:58:20,000 Ef ég hefði bara int telja = 0 það væri venjulegur gamall alþjóðlegt breytu. 747 00:58:20,000 --> 00:58:25,000 Hvað truflanir int telja þýðir er að það er alþjóðlegt breytu fyrir þessa skrá. 748 00:58:25,000 --> 00:58:28,000 Það er ómögulegt fyrir einhverja aðra skrá, 749 00:58:28,000 --> 00:58:34,000 eins hugsa um pset 5, ef þú hefur byrjað. 750 00:58:34,000 --> 00:58:39,000 Þú hefur bæði speller.c, og þú hefur dictionary.c, 751 00:58:39,000 --> 00:58:42,000 og ef þú lýsa bara hlutur heimsvísu, þá neitt í speller.c 752 00:58:42,000 --> 00:58:45,000 er hægt að nálgast í dictionary.c og öfugt. 753 00:58:45,000 --> 00:58:48,000 Global breytur eru aðgengileg öllum. C skrá, 754 00:58:48,000 --> 00:58:54,000 en truflanir breytur eru aðeins aðgengileg innan skrá sig, 755 00:58:54,000 --> 00:59:01,000 svo inni afgreiðslumaður stafa eða inni í dictionary.c, 756 00:59:01,000 --> 00:59:06,000 þetta er góður af því hvernig ég myndi lýsa yfir breytu minn fyrir stærð fylkisins míns 757 00:59:06,000 --> 00:59:10,000 eða stærð fjölda minn af orðum í orðabók. 758 00:59:10,000 --> 00:59:15,000 Þar sem ég vil ekki að lýsa yfir alþjóðlegt breytu sem einhver hefur aðgang að, 759 00:59:15,000 --> 00:59:18,000 Ég hugsa í raun aðeins um það til eigin nota minn. 760 00:59:18,000 --> 00:59:21,000 >> The góður hlutur óður í this er líka allt nafnið árekstur efni. 761 00:59:21,000 --> 00:59:27,000 Ef einhver annar skrá reynir að nota alþjóðlegt breytu sem heitir telja, fara hlutirnir mjög, mjög rangt, 762 00:59:27,000 --> 00:59:33,000 svo heldur þetta fallega hluti örugg, og aðeins þú geta aðgangur það, 763 00:59:33,000 --> 00:59:38,000 og enginn annar getur, og ef einhver annar segir alþjóðlegt breytu sem heitir telja, 764 00:59:38,000 --> 00:59:43,000 þá mun það ekki trufla truflanir breytu sem heitir telja. 765 00:59:43,000 --> 00:59:47,000 Það er það sem truflanir er. Það er skrá alþjóðlegt breytu. 766 00:59:47,000 --> 00:59:52,000 >> Spurningar um neitt? 767 00:59:52,000 --> 00:59:59,000 Allt sett. Bless. 768 00:59:59,000 --> 01:00:03,000 [CS50.TV]