1 00:00:00,000 --> 00:00:00,500 2 00:00:00,500 --> 00:00:11,137 [Muusika mÃĊngimine] 3 00:00:11,137 --> 00:00:12,220 DAVID J. Humala: Olgu. 4 00:00:12,220 --> 00:00:13,950 See on CS50. 5 00:00:13,950 --> 00:00:18,560 See on nÃĊdala viie jÃĊtkus ning me on hÃĊid uudiseid ja halbu uudiseid. 6 00:00:18,560 --> 00:00:21,140 Nii hea uudis on see, et CS50 kÃĊivitab sel reedel. 7 00:00:21,140 --> 00:00:24,430 Kui soovid meiega liituda, pea tavaline URL siia. 8 00:00:24,430 --> 00:00:28,670 Veelgi parem uudis, ei loeng tuleval esmaspÃĊeval 13.. 9 00:00:28,670 --> 00:00:31,970 Veidi vÃĊhem parem uudis, viktoriin null on jÃĊrgmisel kolmapÃĊeval. 10 00:00:31,970 --> 00:00:33,840 Rohkem infot saab leida see URL siia. 11 00:00:33,840 --> 00:00:36,340 Ja jÃĊrgmise paari pÃĊeva jooksul saadame tÃĊites toorikud 12 00:00:36,340 --> 00:00:39,234 seoses tuba et me oleme kaitstud. 13 00:00:39,234 --> 00:00:41,400 Parem uudis on see, et saad on muidugi hÃṁlmavast 14 00:00:41,400 --> 00:00:43,570 istungil tuleval EsmaspÃĊev Ãṁhtul. 15 00:00:43,570 --> 00:00:46,270 JÃĊlgige kursuse veebisait asukoha ja detailid. 16 00:00:46,270 --> 00:00:49,290 Sektsioonid, kuigi see on puhkus, kohtub ka samuti. 17 00:00:49,290 --> 00:00:50,490 18 00:00:50,490 --> 00:00:52,940 Parim uudis, loeng jÃĊrgmisel reedel. 19 00:00:52,940 --> 00:00:56,220 Nii et see on traditsioon, et me on, kui Ãỳhe Ãṁppekava. 20 00:00:56,220 --> 00:00:58,100 Lihtsalt-- see saab olema hÃĊmmastav. 21 00:00:58,100 --> 00:01:02,510 Sa nÃĊed asju konstantse ajaga andmestruktuurid 22 00:01:02,510 --> 00:01:04,730 ja hash tabeleid ja puud ja proovib. 23 00:01:04,730 --> 00:01:07,150 Ja me rÃĊÃĊgime sÃỳnnipÃĊev probleeme. 24 00:01:07,150 --> 00:01:09,440 Terve hunnik kraami ootab jÃĊrgmisel reedel. 25 00:01:09,440 --> 00:01:11,212 26 00:01:11,212 --> 00:01:12,200 OK. 27 00:01:12,200 --> 00:01:13,190 Igatahes. 28 00:01:13,190 --> 00:01:17,080 >> Nii et meelde tuletada, et me oleme olnud keskendub see pilt, mis on 29 00:01:17,080 --> 00:01:18,980 sees meie arvuti mÃĊllu. 30 00:01:18,980 --> 00:01:22,875 Nii et mÃĊlu vÃṁi muutmÃĊlu on koht, kus programmid olemas, kui sa kasutad neid. 31 00:01:22,875 --> 00:01:25,215 Kui te topeltklÃṁps ikooni, et kÃĊivitada mÃṁned programmi 32 00:01:25,215 --> 00:01:27,520 vÃṁi topeltklÃṁpsake ikooni, et avada mÃṁnda faili, 33 00:01:27,520 --> 00:01:30,430 see on koormatud kÃṁvakettalt autot vÃṁi tahkes olekus autot 34 00:01:30,430 --> 00:01:34,190 RAM, muutmÃĊlu, kus ta elab kuni toide vÃĊlja lÃỳlitub, 35 00:01:34,190 --> 00:01:36,700 sÃỳlearvuti kaas sulgub, vÃṁi sa vÃĊljud rakendusest. 36 00:01:36,700 --> 00:01:38,960 >> NÃỳÃỳd, kui mÃĊlu on mis siis ilmselt on 37 00:01:38,960 --> 00:01:41,950 1 GB nendel pÃĊevadel, 2 gigabaiti vÃṁi isegi palju rohkem, 38 00:01:41,950 --> 00:01:44,420 Üldiselt on sÃĊtestatud antud programmi 39 00:01:44,420 --> 00:01:47,170 Selles omamoodi ristkÃỳlikukujuline kontseptuaalse mudeli 40 00:01:47,170 --> 00:01:50,860 kusjuures meil stack allosas ja hunnik muid asju Ãỳlaosas. 41 00:01:50,860 --> 00:01:53,140 Asi tipus Me oleme nÃĊinud seda pilti 42 00:01:53,140 --> 00:01:55,670 Enne aga ei rÃĊÃĊkinud on nn tekstiosa. 43 00:01:55,670 --> 00:01:58,419 Tekst segment on lihtsalt fancy viis öelda nullid ja need, mis 44 00:01:58,419 --> 00:02:01,150 kirjutada oma tegelik koostatud programmi. 45 00:02:01,150 --> 00:02:03,910 >> Nii et kui te topeltklÃṁps Microsoft Word Mac vÃṁi PC, 46 00:02:03,910 --> 00:02:08,030 vÃṁi kui sa jooksed dot kaldkriips Mario kohta Linuxi arvuti oma terminali aknas 47 00:02:08,030 --> 00:02:12,460 nullid ja need, mis moodustavad Word vÃṁi Mario ladustatakse ajutiselt 48 00:02:12,460 --> 00:02:16,610 Teie arvuti muutmÃĊlu nn teksti segment konkreetse programmi. 49 00:02:16,610 --> 00:02:19,080 Allpool mis lÃĊheb vormindatud ja uninitialized andmed. 50 00:02:19,080 --> 00:02:22,655 See on midagi sellist globaalsed muutujad, et me ei kasuta paljud, 51 00:02:22,655 --> 00:02:24,910 kuid mÃṁnikord me oleme oli globaalsete muutujate 52 00:02:24,910 --> 00:02:28,819 vÃṁi staatiliselt mÃĊÃĊratud stringe, mis on kÃṁva kodeeritud sÃṁnu nagu "tere" 53 00:02:28,819 --> 00:02:31,860 mis ei ole tehtud kasutaja mis on kodeeritud oma programmi. 54 00:02:31,860 --> 00:02:34,230 >> NÃỳÃỳd alumises otsas me on nn pinu. 55 00:02:34,230 --> 00:02:37,665 Ja virna, seni oleme olnud kasutades milliseid eesmÃĊrgil? 56 00:02:37,665 --> 00:02:39,706 57 00:02:39,706 --> 00:02:40,997 Mis stack on kasutatud? 58 00:02:40,997 --> 00:02:41,160 Jah? 59 00:02:41,160 --> 00:02:42,070 >> SihtrÃỳhm: funktsioonid. 60 00:02:42,070 --> 00:02:43,320 >> DAVID J. Humala: Funktsioonide? 61 00:02:43,320 --> 00:02:44,980 Mis mÃṁttes funktsioonide? 62 00:02:44,980 --> 00:02:48,660 >> SihtrÃỳhm: Kui te helistate funktsiooni argumendid kopeeritakse pinu. 63 00:02:48,660 --> 00:02:49,660 >> DAVID J. Humala: TÃĊpselt. 64 00:02:49,660 --> 00:02:52,650 Kui te helistate funktsiooni oma argumendid kopeeritakse pinu. 65 00:02:52,650 --> 00:02:56,330 Nii et iga X vÃṁi Y vÃṁi A vÃṁi B et sa pÃĊÃĊsemist funktsioon 66 00:02:56,330 --> 00:02:58,680 ajutiselt panna nn korstna 67 00:02:58,680 --> 00:03:02,000 nagu Ãỳks Annenberg söögisaal plaate ja ka asjad 68 00:03:02,000 --> 00:03:03,190 nagu kohalikud muutujad. 69 00:03:03,190 --> 00:03:06,290 Kui teie foo funktsiooni vÃṁi oma swap funktsioon on kohalikud muutujad, 70 00:03:06,290 --> 00:03:08,602 nagu temp, need kaks lÃṁpuks on virnas. 71 00:03:08,602 --> 00:03:11,560 NÃỳÃỳd me ei rÃĊÃĊgi liiga palju neid, kuid need keskkonnamuutujateta 72 00:03:11,560 --> 00:03:15,690 allosas nÃĊgime aega tagasi, kui Olin futzing klaviatuuri Ãỳks pÃĊev 73 00:03:15,690 --> 00:03:20,050 ja hakkasin pÃĊÃĊseb asju nagu argv 100 vÃṁi argv 1000, 74 00:03:20,050 --> 00:03:22,320 lihtsalt elements-- ma unustan numbers-- kuid 75 00:03:22,320 --> 00:03:24,330 ei pidanud juurde mind. 76 00:03:24,330 --> 00:03:26,581 Me hakkasime nÃĊgema mÃṁned funky sÃỳmbolid ekraanil. 77 00:03:26,581 --> 00:03:28,330 Need olid nn keskkonnamuutujateta 78 00:03:28,330 --> 00:03:32,390 nagu globaalne seadeid minu programmi vÃṁi minu arvuti, ei 79 00:03:32,390 --> 00:03:37,090 mitteseotud viimastel viga, mis me arutasime, 80 00:03:37,090 --> 00:03:39,670 Shellshock, mis on olnud kannatavad Ãỳsna vÃĊhe arvuteid. 81 00:03:39,670 --> 00:03:42,960 >> NÃỳÃỳd lÃṁpuks, tÃĊnapÃĊeva fookus me lÃṁpuks hunnik. 82 00:03:42,960 --> 00:03:44,864 See on veel Ãỳks patakas mÃĊlu. 83 00:03:44,864 --> 00:03:47,030 Ja pÃṁhimÃṁtteliselt kÃṁik see mÃĊlu on sama vÃĊrk. 84 00:03:47,030 --> 00:03:48,040 See on sama riistvara. 85 00:03:48,040 --> 00:03:49,956 Oleme vaid omamoodi ravides erinevaid klastrite 86 00:03:49,956 --> 00:03:51,460 baitide erinevatel eesmÃĊrkidel. 87 00:03:51,460 --> 00:03:56,540 Hunnik on ka saab olema, kui muutujad ja mÃĊlu, et teil paluda 88 00:03:56,540 --> 00:03:58,810 alates operatsioonisÃỳsteemi ajutiselt hoitakse. 89 00:03:58,810 --> 00:04:01,890 >> Aga seal on mingi probleem siin, nagu pilt tÃĊhendab. 90 00:04:01,890 --> 00:04:05,261 Meil on justkui kaks laevade kohta pÃṁrkuvad. 91 00:04:05,261 --> 00:04:08,010 Sest kui te kasutate rohkem virna ja nagu me tÃĊna nÃĊeme 92 00:04:08,010 --> 00:04:11,800 aastast, kui te kasutate rohkem ja rohkem hunnik, kindlasti halbu asju vÃṁib juhtuda. 93 00:04:11,800 --> 00:04:15,054 Ja tÃṁepoolest, saame esile, et tahtlikult vÃṁi tahtmatult. 94 00:04:15,054 --> 00:04:16,970 Nii et pinge viimase aega oli see programm, 95 00:04:16,970 --> 00:04:20,570 mis ei teeni Ãỳhtegi funktsionaalne muul eesmÃĊrgil kui nÃĊidata 96 00:04:20,570 --> 00:04:24,750 kuidas sa nii halb, vÃṁib tegelikult vÃṁtta ÃĊra vead kellegi programmi 97 00:04:24,750 --> 00:04:28,460 ja Ãỳle vÃṁtta programmi vÃṁi isegi Kogu arvutisÃỳsteemi vÃṁi server. 98 00:04:28,460 --> 00:04:31,660 Nii lihtsalt pilgu korraks, siis mÃĊrgata, et peamine allosas 99 00:04:31,660 --> 00:04:34,510 vÃṁtab kÃĊsurea argumentide kohta argv. 100 00:04:34,510 --> 00:04:38,480 Ja see on kÃṁne funktsioon f, sisuliselt nimetu funktsiooni nimetatakse 101 00:04:38,480 --> 00:04:40,250 f, ja see kulgeb argv [1]. 102 00:04:40,250 --> 00:04:43,960 >> Nii et mis iganes sÃṁna kasutaja liigid juures kiiret pÃĊrast selle programmi nime, 103 00:04:43,960 --> 00:04:49,310 ja siis see suvalise funktsiooni Ãỳles top, f, vÃṁtab string, AKA char * 104 00:04:49,310 --> 00:04:51,720 sest me oleme hakanud arutama, ja see lihtsalt kutsub seda "bar". 105 00:04:51,720 --> 00:04:53,310 Aga me vÃṁime seda kutsuda midagi. 106 00:04:53,310 --> 00:04:57,470 Ja siis ta teatab, sees f array tÃĊhemÃĊrki 107 00:04:57,470 --> 00:04:59,930 nimetatakse c-- 12 sellist mÃĊrki. 108 00:04:59,930 --> 00:05:03,580 >> NÃỳÃỳd, aasta lugu ma Ãỳtlen Hetk tagasi, kui mÃĊlu 109 00:05:03,580 --> 00:05:06,720 on c, vÃṁi on need 12 tÃĊhemÃĊrki lÃĊheb lÃṁpuks? 110 00:05:06,720 --> 00:05:07,570 Lihtsalt olla kindel. 111 00:05:07,570 --> 00:05:08,070 Jah? 112 00:05:08,070 --> 00:05:08,590 >> SihtrÃỳhm: korstnat. 113 00:05:08,590 --> 00:05:09,420 >> DAVID J. Humala: korstnat. 114 00:05:09,420 --> 00:05:10,720 Nii on c kohaliku muutuja. 115 00:05:10,720 --> 00:05:14,079 Me palume 12 tÃĊhemÃĊrki vÃṁi 12 baiti. 116 00:05:14,079 --> 00:05:16,120 Need hakkavad lÃṁpuks aasta nn pinu. 117 00:05:16,120 --> 00:05:18,530 NÃỳÃỳd lÃṁpuks on see teine ​​funktsioon see on tegelikult pÃĊris kasulik, 118 00:05:18,530 --> 00:05:20,571 aga meil ei ole tegelikult kasutatud ta ise strncopy. 119 00:05:20,571 --> 00:05:21,550 120 00:05:21,550 --> 00:05:25,200 See tÃĊhendab string koopia, kuid ainult n tÃĊhed, n tÃĊhemÃĊrki. 121 00:05:25,200 --> 00:05:31,990 Nii n mÃĊrgid kopeeritud baar arvesse c. 122 00:05:31,990 --> 00:05:32,980 Ja kui palju? 123 00:05:32,980 --> 00:05:34,110 Pikkus baari. 124 00:05:34,110 --> 00:05:36,330 Nii teisisÃṁnu, et Ãỳks liin, strncopy, 125 00:05:36,330 --> 00:05:39,500 lÃĊheb kopeerida tÃṁhusalt baar c. 126 00:05:39,500 --> 00:05:42,340 >> NÃỳÃỳd, lihtsalt selline ennetada Moraal sellest loost, 127 00:05:42,340 --> 00:05:44,750 mis on potentsiaalselt probleemne siin? 128 00:05:44,750 --> 00:05:49,710 Kuigi me kontrollime pikkus baar ja kulgeb see strncopy, 129 00:05:49,710 --> 00:05:53,145 Mis on su soole Ãỳtlen sulle ei ikka katki selle programmi? 130 00:05:53,145 --> 00:05:54,410 131 00:05:54,410 --> 00:05:55,220 Jah? 132 00:05:55,220 --> 00:05:57,491 >> SihtrÃỳhm: Ei sisalda ruumi null iseloomu. 133 00:05:57,491 --> 00:05:59,990 DAVID J. Humala: Ei sisalda ruumi null iseloomu. 134 00:05:59,990 --> 00:06:02,073 Potentsiaalselt erinevalt varasem praktika me isegi ei 135 00:06:02,073 --> 00:06:04,810 on nii palju kui pluss 1 kuni mahutada, et null iseloomu. 136 00:06:04,810 --> 00:06:06,649 Aga see on veel hullem kui see. 137 00:06:06,649 --> 00:06:07,940 Mida muud me ei suuda teha? 138 00:06:07,940 --> 00:06:08,432 Jah? 139 00:06:08,432 --> 00:06:09,307 >> SihtrÃỳhm: [kuuldamatu] 140 00:06:09,307 --> 00:06:15,440 141 00:06:15,440 --> 00:06:16,440 DAVID J. Humala: Perfect. 142 00:06:16,440 --> 00:06:18,490 Me oleme kÃṁvasti kodeeritud 12 pÃĊris suvaliselt. 143 00:06:18,490 --> 00:06:19,497 144 00:06:19,497 --> 00:06:21,330 See ei ole nii palju probleem, vaid asjaolu 145 00:06:21,330 --> 00:06:25,630 et me ei ole isegi kontrollida, kas pikkusega riba on vÃĊiksem kui 12, 146 00:06:25,630 --> 00:06:28,530 sellisel juhul saab olema ohutu panna see mÃĊllu 147 00:06:28,530 --> 00:06:30,260 nimetatakse c, et oleme eraldatud. 148 00:06:30,260 --> 00:06:32,960 TÃṁepoolest, kui riba on nagu 20 tÃĊhemÃĊrki pikk, 149 00:06:32,960 --> 00:06:39,010 Selle funktsiooni nÃĊib kopeerides 20 mÃĊrki baar arvesse c, mis 150 00:06:39,010 --> 00:06:41,310 vÃṁttes vÃĊhemalt 8 baiti et see ei tohiks olla. 151 00:06:41,310 --> 00:06:42,690 See tÃĊhendas siin. 152 00:06:42,690 --> 00:06:44,347 >> LÃỳhidalt öeldes katki programmi. 153 00:06:44,347 --> 00:06:45,180 Mitte nii suur asi. 154 00:06:45,180 --> 00:06:46,360 Äkki saad killustatust sÃỳÃỳ. 155 00:06:46,360 --> 00:06:47,651 Me kÃṁik oleme olnud vead programmides. 156 00:06:47,651 --> 00:06:50,196 Me kÃṁik vÃṁib olla vigu programmides kohe. 157 00:06:50,196 --> 00:06:51,320 Aga mis on kaudselt? 158 00:06:51,320 --> 00:06:54,390 Noh, siin on suumitud-in versioon et pilt minu arvuti mÃĊllu. 159 00:06:54,390 --> 00:06:56,230 See on alt mu virna. 160 00:06:56,230 --> 00:06:59,644 Ja tÃṁepoolest, vÃĊga pÃṁhjas on see, mis kutsus vanem rutiinne stack, fancy viis 161 00:06:59,644 --> 00:07:00,560 öelda, et see on peamine. 162 00:07:00,560 --> 00:07:03,772 Nii et kes nimetatakse funktsiooni f, mis me rÃĊÃĊgime. 163 00:07:03,772 --> 00:07:05,230 Nii et see on pÃṁhja pinu. 164 00:07:05,230 --> 00:07:06,640 Tagasi aadress on midagi uut. 165 00:07:06,640 --> 00:07:08,810 See on alati olemas olnud, alati olnud, et pilt. 166 00:07:08,810 --> 00:07:10,440 Me lihtsalt ei helistanud tÃĊhelepanu. 167 00:07:10,440 --> 00:07:15,290 Sest selgub, kuidas c töötab, on et kui Ãỳks funktsioon nÃṁuab teise 168 00:07:15,290 --> 00:07:18,780 mitte ainult teha argumente, mis funktsioon saada surunud peale virna, 169 00:07:18,780 --> 00:07:22,470 mitte ainult ei funktsiooni kohaliku muutujad saada surunud peale virna, 170 00:07:22,470 --> 00:07:26,820 midagi, mida nimetatakse saatja aadress Samuti saab panna peale virna. 171 00:07:26,820 --> 00:07:33,330 TÃĊpsemalt, kui peamised kÃṁned foo, peamised on oma aadress mÃĊllu, hÃĊrg midagi, 172 00:07:33,330 --> 00:07:38,240 tegelikult saab panna peale virna nii, et kui f on tehtud kÃĊivitamata 173 00:07:38,240 --> 00:07:43,630 teab, kuhu hÃỳpata tagasi tekstis segment, et jÃĊtkuvalt tÃĊidetakse. 174 00:07:43,630 --> 00:07:47,760 >> Nii et kui me siin oleme kontseptuaalselt aastal peamine, siis f saab nn. 175 00:07:47,760 --> 00:07:50,200 Kuidas f tea, kes et kÃĊsitsi kontrolli tagasi? 176 00:07:50,200 --> 00:07:52,020 Noh, see vÃĊike riivsai punaselt siin 177 00:07:52,020 --> 00:07:54,978 nimetatakse saatja aadress, see lihtsalt kontrolli, mis seisneb selles, et saatja aadress? 178 00:07:54,978 --> 00:07:57,039 Oh, andke mulle tagasi hÃỳpata Otse siin. 179 00:07:57,039 --> 00:07:59,080 Ja see on natuke Ãỳlelihtsustatuna, 180 00:07:59,080 --> 00:08:00,750 sest nulli ja need jaoks peamine on tehniliselt 181 00:08:00,750 --> 00:08:01,967 siia Ãỳles tech segment. 182 00:08:01,967 --> 00:08:03,800 Aga see mÃṁte. f lihtsalt peab teadma, mida 183 00:08:03,800 --> 00:08:06,680 kus kontroll lÃṁpuks lÃĊheb tagasi. 184 00:08:06,680 --> 00:08:09,790 >> Aga kuidas arvutid on ammu sÃĊtestatud asjad 185 00:08:09,790 --> 00:08:12,320 nagu kohalikud muutujad ja argumendid on niimoodi. 186 00:08:12,320 --> 00:08:17,180 Nii peal see pilt sinine on freimi jaoks f, nii et kÃṁik 187 00:08:17,180 --> 00:08:19,630 ning mÃĊlu, et f konkreetselt ei kasuta. 188 00:08:19,630 --> 00:08:22,990 Nii et jÃĊrelikult mÃĊrgata, et baar on siin pildil. 189 00:08:22,990 --> 00:08:23,980 Baar oli tema argument. 190 00:08:23,980 --> 00:08:27,240 Ja me vÃĊita, et argumendid funktsioonid vajutata peale virna. 191 00:08:27,240 --> 00:08:29,910 Ja c, on muidugi see, ka seda pilti. 192 00:08:29,910 --> 00:08:33,520 >> Ja just TÃĊhistused eesmÃĊrkidel, teate Ãỳlaosas vasakul nurgas 193 00:08:33,520 --> 00:08:37,020 on see, mis oleks c sulg 0 ja siis veidi alla paremale 194 00:08:37,020 --> 00:08:38,220 on c sulg 11. 195 00:08:38,220 --> 00:08:41,240 Nii teisisÃṁnu, te vÃṁite ette kujutada et seal on ruudustik baiti 196 00:08:41,240 --> 00:08:44,380 seal, esimene on Üleval vasakul on pÃṁhjas, mis 197 00:08:44,380 --> 00:08:48,360 on viimase nendest 12 baiti. 198 00:08:48,360 --> 00:08:49,930 >> Aga nÃỳÃỳd proovida kiiresti edasi. 199 00:08:49,930 --> 00:08:55,580 Mis hakkab juhtuma siis, kui vÃṁtame string riba, mis on enam kui c? 200 00:08:55,580 --> 00:08:59,130 Ja me ei ole kontrollida, kas see on tÃṁesti enam kui 12. 201 00:08:59,130 --> 00:09:03,146 Milline osa sellest pilt lÃĊheb saada kirjutatakse baiti 0, 1, 2, 3, 202 00:09:03,146 --> 00:09:07,890 dot dot dot, 11 ja seejÃĊrel halb, 12, 13 kuni 19? 203 00:09:07,890 --> 00:09:11,820 Mis juhtub siin, Kui te jÃĊreldada tellimine 204 00:09:11,820 --> 00:09:14,790 et c sulg 0 on peal ja c sulg 11 on justkui maha 205 00:09:14,790 --> 00:09:15,812 paremale? 206 00:09:15,812 --> 00:09:16,796 Jah? 207 00:09:16,796 --> 00:09:19,260 >> SihtrÃỳhm: Noh, see lÃĊheb kirjutada char * baar. 208 00:09:19,260 --> 00:09:22,260 >> DAVID J. Humala: Jah, see nÃĊeb vÃĊlja nagu sa lÃĊhed kirjutada char * baar. 209 00:09:22,260 --> 00:09:26,245 Ja mis veel hullem, kui saadate tÃṁesti pikk string, siis vÃṁib isegi kirjutada, mida? 210 00:09:26,245 --> 00:09:27,460 211 00:09:27,460 --> 00:09:28,570 Saatja aadress. 212 00:09:28,570 --> 00:09:31,380 Mis jÃĊllegi on nagu riivsai öelda programmi, kus 213 00:09:31,380 --> 00:09:34,060 tagasi minna, kui f tehakse kutsutakse. 214 00:09:34,060 --> 00:09:37,140 >> Mida pahad tavaliselt teha on see, kui nad kohanud programmi 215 00:09:37,140 --> 00:09:41,290 et nad on uudishimulik, kas on kasutatavust, lollakas viisil 216 00:09:41,290 --> 00:09:43,550 et ta vÃṁib vÃṁtta ÃĊra, mis viga, 217 00:09:43,550 --> 00:09:45,720 Üldiselt nad ei saa Selle Ãṁiguse esmakordselt. 218 00:09:45,720 --> 00:09:48,590 Nad lihtsalt saatma hakata, nÃĊiteks juhuslikult koostatud stringe oma programmi 219 00:09:48,590 --> 00:09:50,260 kas klaviatuuri, vÃṁi ausalt öeldes nad ilmselt 220 00:09:50,260 --> 00:09:52,740 kirjutada vÃĊike programm lihtsalt automaatselt genereerida stringid, 221 00:09:52,740 --> 00:09:55,430 ja hakata peksma oma programmi saates palju erinevaid sisendeid 222 00:09:55,430 --> 00:09:56,340 erineva pikkusega. 223 00:09:56,340 --> 00:09:58,990 >> Niipea, kui teie programm jookseb kokku, see on hÃĊmmastav asi. 224 00:09:58,990 --> 00:10:01,020 Sest see tÃĊhendab, et ta vÃṁi ta on avastanud 225 00:10:01,020 --> 00:10:02,660 mis on ilmselt tÃṁepoolest viga. 226 00:10:02,660 --> 00:10:05,830 Ja siis nad saavad rohkem targad ja alustada keskendudes kitsamalt 227 00:10:05,830 --> 00:10:07,420 kuidas kasutada, et viga. 228 00:10:07,420 --> 00:10:11,480 EelkÃṁige, milline ta vÃṁib tegema, on saata, parimal juhul, tere. 229 00:10:11,480 --> 00:10:12,210 Ei midagi erilist. 230 00:10:12,210 --> 00:10:14,750 See on string, mis on piisavalt lÃỳhike. 231 00:10:14,750 --> 00:10:18,100 Aga mis siis, kui ta saadab, ja me Ãỳldistada seda, 232 00:10:18,100 --> 00:10:20,890 rÃỳnnak code-- nii nulli ja need, kes teevad asju 233 00:10:20,890 --> 00:10:25,150 nagu rm-rf, et eemaldada kÃṁik kÃṁvakettale vÃṁi saata rÃĊmpsposti 234 00:10:25,150 --> 00:10:27,000 vÃṁi kuidagi rÃỳnnata masin? 235 00:10:27,000 --> 00:10:29,570 >> Seega, kui kÃṁik need tÃĊhed lihtsalt on, 236 00:10:29,570 --> 00:10:32,380 kontseptuaalselt, rÃỳnnak, rÃỳnnak, rÃỳnnak, rÃỳnnak, halbu kood 237 00:10:32,380 --> 00:10:36,410 et keegi kirjutas, kuid kui see inimene on piisavalt tark, 238 00:10:36,410 --> 00:10:40,790 mitte ainult hÃṁlmama kÃṁiki Nende rm-RFS, vaid ka 239 00:10:40,790 --> 00:10:46,100 on tema viimastel baiti olla number, mis vastab 240 00:10:46,100 --> 00:10:50,540 Lisa aadress tema vÃṁi tema enda rÃỳnnak kood 241 00:10:50,540 --> 00:10:53,820 et ta möödunud aastal vaid esitades kÃỳsimuse jÃĊrel 242 00:10:53,820 --> 00:10:58,760 saate tÃṁhusalt trikk arvuti arvesse mÃĊrganud, kui f on teinud tÃĊidesaatva, 243 00:10:58,760 --> 00:11:02,400 Oh, see on minu jaoks aega hÃỳpata tagasi punane saatja aadress. 244 00:11:02,400 --> 00:11:06,070 Aga kuna ta on kuidagi kattusid et saatja aadress 245 00:11:06,070 --> 00:11:09,602 oma number, ja nad on piisavalt targad, 246 00:11:09,602 --> 00:11:11,560 et on konfigureeritud, et number viidata, kui 247 00:11:11,560 --> 00:11:13,740 nÃĊed super top vasakus nurgas, 248 00:11:13,740 --> 00:11:18,020 tegeliku aadressi arvuti mÃĊlestuseks mÃṁned nende rÃỳnnaku kood, 249 00:11:18,020 --> 00:11:21,740 paha poiss saab trikk arvuti arvesse tÃĊidesaatva enda kood. 250 00:11:21,740 --> 00:11:23,700 >> Ja see kood uuesti, vÃṁib olla mis iganes. 251 00:11:23,700 --> 00:11:26,120 See on tavaliselt nimetatakse shell kood, mis on lihtsalt 252 00:11:26,120 --> 00:11:29,030 viis öelda, et see ei ole Ãỳldiselt midagi nii lihtne rm-rf. 253 00:11:29,030 --> 00:11:32,340 See on tegelikult midagi Bash, vÃṁi tegelik programm, mis annab talle 254 00:11:32,340 --> 00:11:37,230 vÃṁi tema programmilisi kontrolli teostada midagi muud, mis nad tahavad. 255 00:11:37,230 --> 00:11:40,210 LÃỳhidalt öeldes, see kÃṁik tuleneb tÃṁsiasjast, 256 00:11:40,210 --> 00:11:44,490 et see viga on seotud mitte kontrollida piire oma valikut. 257 00:11:44,490 --> 00:11:47,250 Ja kuna teed arvutite tööd on, et nad 258 00:11:47,250 --> 00:11:49,430 kasuta virna tÃṁhusalt, kontseptuaalselt 259 00:11:49,430 --> 00:11:54,830 alt Ãỳlesse, kuid siis elemendid surute peale virna kasvab Ãỳlevalt alla, 260 00:11:54,830 --> 00:11:56,624 see on uskumatult problemaatiline. 261 00:11:56,624 --> 00:11:58,290 NÃỳÃỳd on vÃṁimalusi töötada selle Ãỳmber. 262 00:11:58,290 --> 00:12:00,800 Ja ausalt öeldes, on keeled kellega töötada selle Ãỳmber. 263 00:12:00,800 --> 00:12:03,100 Java on immuunsÃỳsteemi, nÃĊiteks selles konkreetses kÃỳsimuses. 264 00:12:03,100 --> 00:12:04,110 Sest nad ei anna teile vihjeid. 265 00:12:04,110 --> 00:12:05,943 Nad ei anna teile otsene mÃĊlu aadressid. 266 00:12:05,943 --> 00:12:08,560 Nii et see vÃĊgi, mis meil on puudutada midagi mÃĊlestuseks 267 00:12:08,560 --> 00:12:11,580 soovime tuleb kÃỳll suur risk. 268 00:12:11,580 --> 00:12:12,430 >> Nii et hoidke silmad lahti. 269 00:12:12,430 --> 00:12:14,596 Kui aus olla, siis on kuu vÃṁi aastaid, millal 270 00:12:14,596 --> 00:12:17,740 lugesid mÃṁned ÃĊrakasutamise programmi vÃṁi server, 271 00:12:17,740 --> 00:12:22,370 kui sa kunagi nÃĊha vihjet midagi nagu buffer overflow rÃỳnnak, 272 00:12:22,370 --> 00:12:25,390 vÃṁi stack overflow on teist tÃỳÃỳpi rÃỳnnak, sarnase sisuga, 273 00:12:25,390 --> 00:12:28,770 palju inspireerib veebisaidi nimi, kui sa tead seda, 274 00:12:28,770 --> 00:12:33,170 see on kÃṁik rÃĊÃĊgime lihtsalt tÃĊis suurust mÃṁned iseloomu 275 00:12:33,170 --> 00:12:36,200 massiiv vÃṁi mÃṁni massiivi Ãỳldisemalt. 276 00:12:36,200 --> 00:12:38,822 KÃṁik kÃỳsimused, siis selles kÃỳsimuses? 277 00:12:38,822 --> 00:12:39,780 Ärge proovige seda kodus. 278 00:12:39,780 --> 00:12:41,620 279 00:12:41,620 --> 00:12:42,300 >> Olgu. 280 00:12:42,300 --> 00:12:47,270 Nii malloc Seni on meie uus sÃṁber, et saame eraldada mÃĊlu 281 00:12:47,270 --> 00:12:50,540 et me ei pruugi teada, ette, et me tahame, et meil ei ole 282 00:12:50,540 --> 00:12:52,920 kÃṁva kood meie Programmi numbrid nagu 12. 283 00:12:52,920 --> 00:12:55,550 Kui kasutaja Ãỳtleb meile, kui palju Andmete ta tahab sisend, 284 00:12:55,550 --> 00:12:58,000 saame malloc et palju mÃĊlu. 285 00:12:58,000 --> 00:13:01,484 >> Nii malloc selgub, et mÃĊÃĊral oleme seda kasutanud, 286 00:13:01,484 --> 00:13:03,900 sÃṁnaselgelt viimast korda, ja siis Te olete seda kasutanud 287 00:13:03,900 --> 00:13:08,160 jaoks getString teadmatult eest mitu nÃĊdalat, kÃṁik malloc mÃĊllu 288 00:13:08,160 --> 00:13:09,820 pÃĊrineb nn hunnik. 289 00:13:09,820 --> 00:13:13,852 Ja see on pÃṁhjus, miks getString nÃĊiteks vÃṁib eraldada mÃĊlu dÃỳnaamiliselt 290 00:13:13,852 --> 00:13:16,060 teadmata, mida sa oled lÃĊheb kirjuta ette, 291 00:13:16,060 --> 00:13:21,520 kÃĊe tagasi pointer, et mÃĊlu ja et mÃĊlu on ikka sinu hoida, 292 00:13:21,520 --> 00:13:24,080 isegi pÃĊrast getString tulu. 293 00:13:24,080 --> 00:13:27,450 Sest tagasivÃṁtmine ju, et stack on pidevalt lÃĊheb Ãỳles ja alla, 294 00:13:27,450 --> 00:13:27,950 Ãỳles ja alla. 295 00:13:27,950 --> 00:13:30,230 Ja niipea, kui see lÃĊheb sÃĊtestatakse, et mis tahes mÃĊlu 296 00:13:30,230 --> 00:13:33,030 seda funktsiooni kasutada tuleks ei tohi kasutada keegi teine. 297 00:13:33,030 --> 00:13:34,570 See prÃỳgi vÃĊÃĊrtused nÃỳÃỳd. 298 00:13:34,570 --> 00:13:36,120 >> Aga hunnik on siin. 299 00:13:36,120 --> 00:13:39,360 Ja mis on tore malloc on see, et kui malloc eraldab mÃĊlu siin, 300 00:13:39,360 --> 00:13:42,070 see ei mÃṁjutanud, sest pÃṁhiliselt virna. 301 00:13:42,070 --> 00:13:46,000 Ja nii iga funktsiooni saab kasutada mÃĊlu, mis on malloc'd, 302 00:13:46,000 --> 00:13:49,120 isegi funktsioon nagu getString, isegi pÃĊrast seda tagasi. 303 00:13:49,120 --> 00:13:51,700 >> NÃỳÃỳd vastupidist malloc on tasuta. 304 00:13:51,700 --> 00:13:53,900 Ja tÃṁepoolest, Ãṁigusriigi sa vaja alustada vastuvÃṁtmist 305 00:13:53,900 --> 00:13:58,950 on midagi, mis tahes, iga kord, kui kasutate malloc peate ise kasutada tasuta lÃṁpuks 306 00:13:58,950 --> 00:14:00,280 aasta sama pointer. 307 00:14:00,280 --> 00:14:03,289 Kogu selle aja oleme olnud kirjalikult lollakas, lollakas kood, mitmel pÃṁhjusel. 308 00:14:03,289 --> 00:14:05,580 Kuid Ãỳks, mis on olnud kasutades CS50 raamatukogu, mis 309 00:14:05,580 --> 00:14:09,010 iseenesest on sihilikult lollakas, see lekib mÃĊlu. 310 00:14:09,010 --> 00:14:11,410 Iga kord, kui sa oled kutsutud getString Viimase paari nÃĊdala jooksul 311 00:14:11,410 --> 00:14:13,870 Me palume operatsioonisÃỳsteemi sÃỳsteemi, Linux, mÃĊlu. 312 00:14:13,870 --> 00:14:15,780 Ja sa ei ole kunagi kunagi andnud seda tagasi. 313 00:14:15,780 --> 00:14:17,730 Ja see ei ole a harjutada, hea asi. 314 00:14:17,730 --> 00:14:20,330 >> Ja Valgrind Ãỳks vahendeid kasutusele pset 4, 315 00:14:20,330 --> 00:14:22,900 on kÃṁike, mis aitab teil nÃỳÃỳd leida vigu niimoodi. 316 00:14:22,900 --> 00:14:27,060 Aga Ãṁnneks pset 4 sa ei pea kasutada CS50 raamatukogu vÃṁi getString. 317 00:14:27,060 --> 00:14:31,220 Nii tahes vigu, mis on seotud mÃĊlu on lÃṁpuks saab olema oma. 318 00:14:31,220 --> 00:14:34,060 >> Nii malloc on rohkem kui lihtsalt mugav selleks. 319 00:14:34,060 --> 00:14:37,420 Me ei saa tegelikult nÃỳÃỳd lahendada pÃṁhimÃṁtteliselt erinevad probleemid, 320 00:14:37,420 --> 00:14:41,640 ja pÃṁhimÃṁtteliselt lahendada probleeme rohkem tÃṁhusalt nÃĊdalas null lubadust. 321 00:14:41,640 --> 00:14:44,720 Senini on see seksikaim andmestruktuur oleme olnud. 322 00:14:44,720 --> 00:14:47,804 Ja andmestruktuur ma tÃĊhenda ainult viis kontseptualiseerimiseks mÃĊlu 323 00:14:47,804 --> 00:14:50,720 viisil, mis lÃĊheb kaugemale lihtsalt öeldes see on int, see on paalia. 324 00:14:50,720 --> 00:14:52,930 Me ei saa hakata klastri asju koos. 325 00:14:52,930 --> 00:14:54,460 >> Nii massiivi nÃĊgi vÃĊlja selline. 326 00:14:54,460 --> 00:14:57,270 Ja mis oli vÃṁti kohta massiiv on, et see annab sulle 327 00:14:57,270 --> 00:14:59,724 back-to-back tÃỳkkideks mÃĊlu, millest igaÃỳks 328 00:14:59,724 --> 00:15:02,765 saab olema sama tÃỳÃỳpi, int, int, int, int vÃṁi char, char, char, 329 00:15:02,765 --> 00:15:03,330 char. 330 00:15:03,330 --> 00:15:04,496 Aga seal on mÃṁned varjukÃỳljed. 331 00:15:04,496 --> 00:15:06,570 See on nÃĊiteks massiivi suurus kuus. 332 00:15:06,570 --> 00:15:10,650 Oletame, et tÃĊita seda massiivi kuus numbrid ja siis mingil pÃṁhjusel, 333 00:15:10,650 --> 00:15:13,187 Sinu kasutaja tahab anda sa seitsmes number. 334 00:15:13,187 --> 00:15:14,020 Kust sa seda? 335 00:15:14,020 --> 00:15:15,490 336 00:15:15,490 --> 00:15:18,990 >> Mis on lahendus, kui teil on loodud massiivi korstnat 337 00:15:18,990 --> 00:15:22,030 nÃĊiteks lihtsalt koos nÃĊdalal kaks mÃĊrke, et oleme kasutusele 338 00:15:22,030 --> 00:15:23,730 ruudu sulgudes number sees? 339 00:15:23,730 --> 00:15:25,160 340 00:15:25,160 --> 00:15:27,260 Noh, sul on kuus numbrid need kastid. 341 00:15:27,260 --> 00:15:28,530 Mida su instinktid olema? 342 00:15:28,530 --> 00:15:29,973 Kuhu sa tahad seda? 343 00:15:29,973 --> 00:15:30,860 >> SihtrÃỳhm: [kuuldamatu] 344 00:15:30,860 --> 00:15:31,315 >> DAVID J. Humala: Vabandust? 345 00:15:31,315 --> 00:15:32,380 >> SihtrÃỳhm: Pane see lÃṁpuni. 346 00:15:32,380 --> 00:15:33,796 >> DAVID J. Humala: Pane see lÃṁpuni. 347 00:15:33,796 --> 00:15:35,880 Nii lihtsalt Ãỳle paremale, vÃĊljaspool seda kasti. 348 00:15:35,880 --> 00:15:38,710 Milline oleks tore, kuid see Selgub, sa ei saa seda teha. 349 00:15:38,710 --> 00:15:41,350 Sest kui sa ei kÃỳsita Selle patakas mÃĊlu, 350 00:15:41,350 --> 00:15:44,490 see vÃṁib olla juhus, et see kasutatakse mÃṁne muu muutuja 351 00:15:44,490 --> 00:15:45,030 kokku. 352 00:15:45,030 --> 00:15:49,210 MÃṁtle tagasi nÃĊdala vÃṁi nii, kui me ette vÃĊlja Zamyla ja Davin ja Gabe nimed 353 00:15:49,210 --> 00:15:49,930 mÃĊllu. 354 00:15:49,930 --> 00:15:51,638 Nad olid sÃṁna otseses mÃṁttes tagasi tagasi tagasi. 355 00:15:51,638 --> 00:15:53,550 Nii et me ei saa alati usun, et kÃṁike, mis on 356 00:15:53,550 --> 00:15:55,800 siin on olemas minu jaoks kasutada. 357 00:15:55,800 --> 00:15:56,990 >> Mida veel vÃṁiks teha? 358 00:15:56,990 --> 00:16:00,282 Noh, Ãỳks kord aru, sa vajame massiivi suurus seitse, 359 00:16:00,282 --> 00:16:02,490 vÃṁid lihtsalt luua massiivi suurus seitse, siis kasuta 360 00:16:02,490 --> 00:16:05,950 loop vÃṁi samas loop, kopeerige see uue massiivi, 361 00:16:05,950 --> 00:16:09,680 ja siis kuidagi lihtsalt vabaneda Selle massiivi vÃṁi lihtsalt kasutamise lÃṁpetamiseks. 362 00:16:09,680 --> 00:16:12,130 Aga see ei ole eriti tÃṁhus. 363 00:16:12,130 --> 00:16:15,340 ÜhesÃṁnaga, massiivid ei lase sa dÃỳnaamiliselt suurust. 364 00:16:15,340 --> 00:16:17,900 >> Nii et Ãỳhest kÃỳljest saad muutmÃĊlu, mis on hÃĊmmastav. 365 00:16:17,900 --> 00:16:20,108 Sest see vÃṁimaldab meil teha asju nagu lÃṁhe ja vallutada, 366 00:16:20,108 --> 00:16:23,100 binaarne otsing, mis kÃṁik me oleme rÃĊÃĊkis ekraanil siin. 367 00:16:23,100 --> 00:16:24,950 Aga sa vÃĊrvi ise nurka. 368 00:16:24,950 --> 00:16:27,810 Niipea kui sa tabanud lÃṁpuks oma valikut, 369 00:16:27,810 --> 00:16:29,980 mida sa pead tegema vÃĊga kallis operatsioon 370 00:16:29,980 --> 00:16:33,910 vÃṁi kirjutada terve hunnik koodi nÃỳÃỳd tegeleda selle probleemiga. 371 00:16:33,910 --> 00:16:36,680 >> Mis siis, kui selle asemel oli meil midagi, mida nimetatakse nimekiri, 372 00:16:36,680 --> 00:16:38,820 vÃṁi ahelloend eriti? 373 00:16:38,820 --> 00:16:41,930 Mis siis, kui selle asemel, et ristkÃỳlikud seljad tagasi, 374 00:16:41,930 --> 00:16:45,730 meil on ristkÃỳlikud, mis jÃĊtavad vÃĊhe natuke kÃṁigutama ruumi nende vahel? 375 00:16:45,730 --> 00:16:49,670 Ja kuigi ma olen koostanud kÃĊesoleva pilt vÃṁi kohandatud seda pilti 376 00:16:49,670 --> 00:16:54,696 Ãỳhest tekste siin tuleb tagasi seljad vÃĊga korrapÃĊrane, tegelikult, 377 00:16:54,696 --> 00:16:56,820 Ãỳks neist ristkÃỳlikud vÃṁiks olla siin mÃĊlu. 378 00:16:56,820 --> 00:16:58,028 Üks neist vÃṁiks olla siin Ãỳleval. 379 00:16:58,028 --> 00:17:00,420 Üks neist vÃṁiks olla siin Ãỳleval, siin, ja nii edasi. 380 00:17:00,420 --> 00:17:02,910 >> Aga mis siis, kui me joonistasin, sel juhul nooled 381 00:17:02,910 --> 00:17:05,650 et kuidagi seostada neid ristkÃỳlikuid koos? 382 00:17:05,650 --> 00:17:08,170 TÃṁepoolest, me oleme nÃĊinud tehniline kehastus nool. 383 00:17:08,170 --> 00:17:09,839 384 00:17:09,839 --> 00:17:13,710 Mida oleme kasutatud viimastel pÃĊeva, et all kapuuts, 385 00:17:13,710 --> 00:17:15,210 esindaks nool? 386 00:17:15,210 --> 00:17:16,290 387 00:17:16,290 --> 00:17:17,349 Pointer, eks? 388 00:17:17,349 --> 00:17:19,780 >> Mis siis, kui selle asemel, et lihtsalt ladustamiseks numbrid, 389 00:17:19,780 --> 00:17:23,130 nagu 9, 17, 22, 26, 34, Mis siis, kui me ei salvestata mitte 390 00:17:23,130 --> 00:17:27,079 ainult number, kuid osuti kÃṁrvuti sellise arvu? 391 00:17:27,079 --> 00:17:30,690 Nii et palju nagu sa oleks niit nÃṁel lÃĊbi terve hunnik kangast, 392 00:17:30,690 --> 00:17:32,950 kuidagi sidumine asjad koos, samamoodi ei saa 393 00:17:32,950 --> 00:17:35,550 me koos suunanÃĊitajaks, kui kehastunud nooltega siin 394 00:17:35,550 --> 00:17:38,550 liiki jutustama koos individuaalsete ristkÃỳlikud 395 00:17:38,550 --> 00:17:41,780 tÃṁhusalt kasutades pointer kÃṁrvuti number, et 396 00:17:41,780 --> 00:17:46,065 mÃĊrgib, et mÃṁned jÃĊrgmine number, et osutab omakorda mÃṁned jÃĊrgmine number? 397 00:17:46,065 --> 00:17:47,940 Nii teisisÃṁnu, mida kui me tegelikult tahtsime 398 00:17:47,940 --> 00:17:49,820 rakendada midagi sellist? 399 00:17:49,820 --> 00:17:53,610 Noh kahjuks need ristkÃỳlikud, vÃĊhemalt Ãỳks 9, 17, 22, 400 00:17:53,610 --> 00:17:57,040 ja nii edasi, need ei ole enam kena ruudud Ãỳhte numbrid. 401 00:17:57,040 --> 00:17:59,960 Alt, ristkÃỳlik Allpool 9, nÃĊiteks 402 00:17:59,960 --> 00:18:04,330 nÃĊitab, mida peaksid olema pointer, 32 bitti. 403 00:18:04,330 --> 00:18:09,460 NÃỳÃỳd, ma ei ole veel teadlik mis tahes andmete tÃỳÃỳp C, mis annab teile mitte ainult int 404 00:18:09,460 --> 00:18:11,630 kuid pointer tÃĊielikult. 405 00:18:11,630 --> 00:18:15,020 >> Mis siis lahendus, kui tahame leiutada oma vastus sellele? 406 00:18:15,020 --> 00:18:15,760 Jah? 407 00:18:15,760 --> 00:18:16,640 >> SihtrÃỳhm: [kuuldamatu] 408 00:18:16,640 --> 00:18:17,360 >> DAVID J. Humala: Mis see on? 409 00:18:17,360 --> 00:18:17,880 >> SihtrÃỳhm: Uus struktuur. 410 00:18:17,880 --> 00:18:19,590 >> DAVID J. Humala: Jah, miks ei me luua uus struktuur, 411 00:18:19,590 --> 00:18:20,920 vÃṁi C, struct? 412 00:18:20,920 --> 00:18:25,990 Me oleme nÃĊinud structs enne, kui lÃỳhidalt, kus tegelesime Ãṁpilane struktuur 413 00:18:25,990 --> 00:18:27,780 nagu see, kellel oli nimi ja maja. 414 00:18:27,780 --> 00:18:31,980 In pset 3 Breakout sa kasutada kogu hunnik structs-- GRect ja GOvals 415 00:18:31,980 --> 00:18:34,810 et Stanford loodud klastri info koos. 416 00:18:34,810 --> 00:18:38,580 Mis siis, kui me vÃṁtame selle sama idee mÃĊrksÃṁnad "typedef" ja "struct" 417 00:18:38,580 --> 00:18:42,890 ja siis mÃṁned ÃỳliÃṁpilane spetsiifilised asjad, ja arenema seda arvesse jÃĊrgmised: 418 00:18:42,890 --> 00:18:46,210 typedef struktuure node-- ja sÃṁlm lihtsalt vÃĊga generic arvutiteadus 419 00:18:46,210 --> 00:18:49,980 perspektiivis midagi andmestruktuur, konteinerit andmestruktuur. 420 00:18:49,980 --> 00:18:53,900 SÃṁlme VÃĊidan lÃĊheb on int n, tÃĊiesti arusaadav, 421 00:18:53,900 --> 00:18:58,810 ja siis veidi salapÃĊraselt, see teine ​​joon, struct node * kÃṁrval. 422 00:18:58,810 --> 00:19:01,300 Aga vÃĊhem tehnilisi termineid, Mis on see, et teine ​​rida 423 00:19:01,300 --> 00:19:02,980 koodi sees looksulg? 424 00:19:02,980 --> 00:19:03,737 Jah? 425 00:19:03,737 --> 00:19:04,851 >> SihtrÃỳhm: [kuuldamatu] 426 00:19:04,851 --> 00:19:06,600 DAVID J. Humala: kursor teise sÃṁlme. 427 00:19:06,600 --> 00:19:09,910 Nii tÃṁsi, sÃỳntaks veidi segasena. 428 00:19:09,910 --> 00:19:13,250 Aga kui sa loed seda sÃṁna otseses mÃṁttes, JÃĊrgmine on nime muutuja. 429 00:19:13,250 --> 00:19:14,410 Mis on selle andmetÃỳÃỳbi? 430 00:19:14,410 --> 00:19:18,206 See on veidi verbaalselt, seekord aga see tÃỳÃỳp struct node *. 431 00:19:18,206 --> 00:19:22,960 Iga kord, kui me oleme nÃĊinud midagi star, et tÃĊhendab, et see kursor andmete tÃỳÃỳp. 432 00:19:22,960 --> 00:19:26,810 Nii et jÃĊrgmine on ilmselt kursor struct node. 433 00:19:26,810 --> 00:19:28,310 >> NÃỳÃỳd, mis on struct node? 434 00:19:28,310 --> 00:19:31,044 Noh, teate te nÃĊete neid samad sÃṁnad Ãỳlevalt paremalt. 435 00:19:31,044 --> 00:19:33,960 Ja tÃṁepoolest, te vaadake ka sÃṁna "SÃṁlm" siin all vasakul. 436 00:19:33,960 --> 00:19:35,640 Ja see on tegelikult lihtsalt mugavuse. 437 00:19:35,640 --> 00:19:39,930 Pange tÃĊhele, et meie Ãṁpilane mÃĊÃĊratlus seal on sÃṁna "Ãṁpilane" ainult Ãỳks kord. 438 00:19:39,930 --> 00:19:42,510 Ja see on sellepÃĊrast, et ÃỳliÃṁpilane objekti ei eneseleosutavad. 439 00:19:42,510 --> 00:19:45,340 Seal ei ole midagi sees Ãṁpilane mis vajab punktist teise ÃỳliÃṁpilase, 440 00:19:45,340 --> 00:19:45,610 persay. 441 00:19:45,610 --> 00:19:47,630 See oleks omamoodi imelik reaalses maailmas. 442 00:19:47,630 --> 00:19:50,880 >> Kuid sÃṁlmega seotud nimekiri, me ei taha sÃṁlme 443 00:19:50,880 --> 00:19:53,970 olema referentsiaalse sarnase objekti. 444 00:19:53,970 --> 00:19:57,900 Ja nii mÃĊrkate muutusi siin ei ole lihtsalt, mis seal sees looksulg. 445 00:19:57,900 --> 00:20:00,800 Aga me lisada sÃṁna "sÃṁlm" Ãỳlaosas, samuti 446 00:20:00,800 --> 00:20:02,930 lisades selle alt asemel "Ãṁpilane". 447 00:20:02,930 --> 00:20:06,000 Ja see on vaid tehniline detail nii et jÃĊlle oma andmestruktuur 448 00:20:06,000 --> 00:20:11,380 saab eneseleosutavad, nii et sÃṁlm vÃṁib juhtida ka teise sellise sÃṁlme. 449 00:20:11,380 --> 00:20:13,840 >> Nii et mis see on lÃṁppkokkuvÃṁttes lÃĊheb meie jaoks tÃĊhendab? 450 00:20:13,840 --> 00:20:17,560 Noh, Ãỳks, seda kraami sees on sisu meie sÃṁlme. 451 00:20:17,560 --> 00:20:19,360 See asi siin, Paremal Ãỳlal on lihtsalt nii 452 00:20:19,360 --> 00:20:20,860 veel kord, et me ei viita endale. 453 00:20:20,860 --> 00:20:23,401 Ja siis ÃĊÃĊrepoolseimate kraami kuigi sÃṁlm on uus mÃṁiste, 454 00:20:23,401 --> 00:20:25,500 vÃṁib-olla, et see on ikka sama Ãṁpilane ja mida 455 00:20:25,500 --> 00:20:27,520 oli all kapuuts SPL. 456 00:20:27,520 --> 00:20:31,095 >> Nii et kui me nÃỳÃỳd tahtis alustada rakendamisel seotud nimekirja, 457 00:20:31,095 --> 00:20:33,220 kuidas vÃṁiks tÃṁlkida midagi sellist koodi? 458 00:20:33,220 --> 00:20:35,350 Noh, lihtsalt vaata nÃĊide programm, mis 459 00:20:35,350 --> 00:20:36,840 tegelikult kasutab seotud nimekirja. 460 00:20:36,840 --> 00:20:40,870 Seas tÃĊnapÃĊeva jaotus kood on programm nimega Eesti Zero. 461 00:20:40,870 --> 00:20:44,980 Ja kui ma saan seda ma loodud super lihtne GUI, graafiline kasutajaliides, 462 00:20:44,980 --> 00:20:46,460 aga see on tÃṁesti lihtsalt printf. 463 00:20:46,460 --> 00:20:50,930 Ja nÃỳÃỳd ma olen andnud ennast mÃṁne menÃỳÃỳ options-- Kustuta, Lisa, otsing, 464 00:20:50,930 --> 00:20:51,750 ja Traverse. 465 00:20:51,750 --> 00:20:52,630 Ja lÃṁpetan. 466 00:20:52,630 --> 00:20:55,970 Need on vaid Ãỳhised toimingud andmestruktuur tuntud lingi nimekirja. 467 00:20:55,970 --> 00:20:58,409 >> NÃỳÃỳd Kustuta lÃĊheb Numbri kustutamine nimekirjast. 468 00:20:58,409 --> 00:21:00,200 Sisesta lÃĊheb lisada number nimekirjas. 469 00:21:00,200 --> 00:21:02,181 Otsi lÃĊheb otsima jaoks number nimekirjas. 470 00:21:02,181 --> 00:21:04,930 Ja Traverse on lihtsalt fancy viis öelda, kÃṁndida lÃĊbi nimekirja 471 00:21:04,930 --> 00:21:06,245 prindi see vÃĊlja, kuid see on kÃṁik. 472 00:21:06,245 --> 00:21:07,720 Ära muuda see kuidagi. 473 00:21:07,720 --> 00:21:08,570 >> Nii et proovime seda. 474 00:21:08,570 --> 00:21:10,160 LÃĊhme edasi ja 2. tÃỳÃỳpi. 475 00:21:10,160 --> 00:21:12,710 Ja siis ma lÃĊhen sisestada, Ãỳtleme 9. 476 00:21:12,710 --> 00:21:13,620 Sisesta. 477 00:21:13,620 --> 00:21:17,480 Ja nÃỳÃỳd mu programm on lihtsalt programmeeritud öelda, nimekiri on nÃỳÃỳd 9. 478 00:21:17,480 --> 00:21:20,190 NÃỳÃỳd, kui ma edasi minna ja ei Paigaldage uuesti, lase 479 00:21:20,190 --> 00:21:23,680 mul minna ja vÃĊlja suumida ja kirjuta 17. 480 00:21:23,680 --> 00:21:25,770 NÃỳÃỳd on mu nimekirjas on 9, siis 17. 481 00:21:25,770 --> 00:21:27,750 Kui ma sisestada uuesti, lÃĊhme vahele Ãỳks. 482 00:21:27,750 --> 00:21:32,400 Selle asemel, et 22, kui Ãỳhe pildi me oleme otsinud siin, las ma sinna hÃỳpata 483 00:21:32,400 --> 00:21:34,630 ja lisada 26 jÃĊrgmine. 484 00:21:34,630 --> 00:21:36,230 Nii et ma lÃĊhen kirjuta 26. 485 00:21:36,230 --> 00:21:37,755 Nimekiri on mul oodata. 486 00:21:37,755 --> 00:21:40,630 Aga nÃỳÃỳd, lihtsalt et nÃĊha, kas see kood saab olema paindlik, andke mulle nÃỳÃỳd 487 00:21:40,630 --> 00:21:43,520 tÃỳÃỳp 22, milles vÃĊhemalt kontseptuaalselt, kui me oleme 488 00:21:43,520 --> 00:21:46,520 Hoides seda sorteerida, mis on tÃṁepoolest saab veel Ãỳhe vÃĊrava kohe, 489 00:21:46,520 --> 00:21:48,690 peaks minema vahemikus 17 ja 26. 490 00:21:48,690 --> 00:21:50,270 Nii et ma Enter. 491 00:21:50,270 --> 00:21:51,380 TÃṁepoolest, mis töötab. 492 00:21:51,380 --> 00:21:54,950 Ja nÃỳÃỳd lubage mul lisada Viimase kohta pilt, 34. 493 00:21:54,950 --> 00:21:55,450 >> Olgu. 494 00:21:55,450 --> 00:21:58,980 Nii et nÃỳÃỳd las ma ette nÃĊha, et Kustuta ja Traverse ja otsing teha, 495 00:21:58,980 --> 00:21:59,760 tegelikult töötavad. 496 00:21:59,760 --> 00:22:04,180 Tegelikult, kui ma joosta Search, olgem otsida number 22, Enter. 497 00:22:04,180 --> 00:22:05,010 Ta leidis 22. 498 00:22:05,010 --> 00:22:07,580 Nii et on, mida see Programmi Eesti Zero teeb. 499 00:22:07,580 --> 00:22:10,230 >> Aga mis tegelikult toimub kohta, mis rakendab seda? 500 00:22:10,230 --> 00:22:14,530 Noh, esiteks ma vÃṁib-olla, ja tÃṁepoolest Ma ei ole, fail nimega list0.h. 501 00:22:14,530 --> 00:22:16,540 502 00:22:16,540 --> 00:22:20,690 Ja kusagil on see line, typedef, struct node, 503 00:22:20,690 --> 00:22:24,850 siis on mul looksulg, int n, ja siis struct-- mis oli mÃṁiste? 504 00:22:24,850 --> 00:22:26,530 505 00:22:26,530 --> 00:22:28,545 Struct node kÃṁrval. 506 00:22:28,545 --> 00:22:29,920 507 00:22:29,920 --> 00:22:31,045 Seega peame star. 508 00:22:31,045 --> 00:22:33,420 NÃỳÃỳd tehniliselt kui me sattuda harjumus joonistus siin. 509 00:22:33,420 --> 00:22:35,670 VÃṁite nÃĊha Ãṁpikute ja Internetis viited seda seal. 510 00:22:35,670 --> 00:22:36,660 See on funktsionaalselt samavÃĊÃĊrne. 511 00:22:36,660 --> 00:22:37,980 Tegelikult on see natuke rohkem iseloomulik. 512 00:22:37,980 --> 00:22:40,563 Aga ma tulen kooskÃṁlas sellega, mida eelmisel korral ja seda teha. 513 00:22:40,563 --> 00:22:42,350 Ja siis lÃṁpuks, ma lÃĊhen seda tegema. 514 00:22:42,350 --> 00:22:45,550 >> Nii pÃĊisefailist kusagil on list0.h 515 00:22:45,550 --> 00:22:49,200 tÃĊna on see struct mÃĊÃĊratlus, ja vÃṁibolla mÃṁned muud kraami. 516 00:22:49,200 --> 00:22:52,580 Vahepeal list0c seal kavatse olla mÃṁned asjad. 517 00:22:52,580 --> 00:22:54,740 Aga me lihtsalt alustada ja ei lÃṁpeta seda. 518 00:22:54,740 --> 00:22:59,690 List0.h on fail tahan lisada oma C-faili. 519 00:22:59,690 --> 00:23:03,910 Ja siis mingil hetkel ma olen lÃĊheb on int, peamine, tÃỳhine. 520 00:23:03,910 --> 00:23:06,530 Ja siis ma lÃĊhen mÃṁned to-do on siin. 521 00:23:06,530 --> 00:23:10,620 Ma olen ka kavatse olla prototÃỳÃỳp, nagu tÃỳhine, otsing, int, 522 00:23:10,620 --> 00:23:13,610 n, mille eesmÃĊrk elus on otsida element. 523 00:23:13,610 --> 00:23:18,310 Ja siis siin ma vÃĊita TÃĊnapÃĊeva kood, tÃỳhine, otsing, int n, 524 00:23:18,310 --> 00:23:21,020 no semikooloniga kuid avatud looksulg. 525 00:23:21,020 --> 00:23:25,049 Ja nÃỳÃỳd ma tahan kuidagi otsida element selles loetelus. 526 00:23:25,049 --> 00:23:27,340 Aga meil ei ole piisavalt informatsiooni ekraanil veel. 527 00:23:27,340 --> 00:23:29,800 Ma ei ole tegelikult esindatud nimekiri ise. 528 00:23:29,800 --> 00:23:33,070 Nii et Ãỳks viis, kuidas me vÃṁiks rakendada seotud nimekirja programmi 529 00:23:33,070 --> 00:23:37,520 on mul selline tahan teha midagi nagu kuulutab seotud nimekirja siin. 530 00:23:37,520 --> 00:23:40,520 Lihtsuse mÃṁttes ma lÃĊhen tegema Selle Ãỳlemaailmse, kuigi Ãỳldiselt me 531 00:23:40,520 --> 00:23:41,645 ei tohiks seda liiga palju. 532 00:23:41,645 --> 00:23:43,260 Aga see NÃĊite lihtsustamiseks. 533 00:23:43,260 --> 00:23:45,890 Nii et ma tahan kuulutada seotud nimekirja siin. 534 00:23:45,890 --> 00:23:47,010 NÃỳÃỳd, kuidas vÃṁiks seda teha? 535 00:23:47,010 --> 00:23:48,810 536 00:23:48,810 --> 00:23:50,750 >> Siin on pilt, mis on seotud nimekirja. 537 00:23:50,750 --> 00:23:53,030 Ja ma tÃṁesti ei hetkel teada, kuidas 538 00:23:53,030 --> 00:23:56,710 Ma lÃĊhen edasi minna esindavad nii palju asju vaid Ãỳhe 539 00:23:56,710 --> 00:23:58,040 muutuja mÃĊlu. 540 00:23:58,040 --> 00:23:59,160 Aga arvan, et tagasi hetkel. 541 00:23:59,160 --> 00:24:00,830 Kogu selle aja oleme olnud stringid, mis me siis 542 00:24:00,830 --> 00:24:02,913 selgus, et massiive mÃĊrki, mis me siis 543 00:24:02,913 --> 00:24:05,740 selgus, et lihtsalt olla pointer Lisa esimese mÃĊrgi 544 00:24:05,740 --> 00:24:08,890 array tÃĊhemÃĊrki et on null lÃṁpetada. 545 00:24:08,890 --> 00:24:13,530 Nii et selle loogika ja selle pilt liiki kÃỳlv oma mÃṁtteid, 546 00:24:13,530 --> 00:24:17,964 mida vaja me tegelikult kirjutada meie kood esindama seotud nimekirja? 547 00:24:17,964 --> 00:24:21,130 Kui palju seda teavet me vajame lÃỳÃỳa C kood, mis sa Ãỳtled? 548 00:24:21,130 --> 00:24:22,654 549 00:24:22,654 --> 00:24:23,154 Jah? 550 00:24:23,154 --> 00:24:24,738 >> SihtrÃỳhm: Meil ​​on vaja viit sÃṁlme. 551 00:24:24,738 --> 00:24:26,237 DAVID J. Humala: kursor sÃṁlme. 552 00:24:26,237 --> 00:24:29,320 Eriti mis sÃṁlme oleks oma instinktid on hoida kursorit? 553 00:24:29,320 --> 00:24:30,026 >> SihtrÃỳhm: esimene sÃṁlm. 554 00:24:30,026 --> 00:24:31,942 >> DAVID J. Humala: Jah, ilmselt esimene. 555 00:24:31,942 --> 00:24:34,030 Ja teate, esimene sÃṁlm on erineva kujuga. 556 00:24:34,030 --> 00:24:37,690 See on ainult poole vÃĊiksem struktuure, sest see on tÃṁesti ainult pointer. 557 00:24:37,690 --> 00:24:44,650 Nii et see, mida saab tÃṁesti teha, on tunnistada ahelloend olema tÃỳÃỳpi sÃṁlme *. 558 00:24:44,650 --> 00:24:47,780 Ja olgem lihtsalt nimetame seda esimest ja initsialiseerida see tÃỳhjaks. 559 00:24:47,780 --> 00:24:49,910 Nii null jÃĊllegi on tulemas sellele pildile siin. 560 00:24:49,910 --> 00:24:53,620 Mitte ainult null kasutada nagu erilist tagastatav vÃĊÃĊrtus asjad getString 561 00:24:53,620 --> 00:24:57,770 ja malloc, null on null pointer puudumine pointer, 562 00:24:57,770 --> 00:24:58,430 kui soovite. 563 00:24:58,430 --> 00:25:00,309 See tÃĊhendab lihtsalt, midagi on veel siin. 564 00:25:00,309 --> 00:25:02,100 NÃỳÃỳd esimene, ma oleks pidanud nimetatakse seda kÃṁike. 565 00:25:02,100 --> 00:25:04,200 Ma oleks vÃṁinud nimetas seda "nimekiri" vÃṁi mitmeid muid asju. 566 00:25:04,200 --> 00:25:06,960 Aga ma kutsun seda "esimene", nii et see ridade jÃĊrele see pilt. 567 00:25:06,960 --> 00:25:10,280 Nii nagu string vÃṁib olla esindatud koos aadressi esimese baidi, 568 00:25:10,280 --> 00:25:11,280 nii saab seotud nimekirja. 569 00:25:11,280 --> 00:25:13,480 Ja me nÃĊeme, muud andmed struktuurid on esindatud 570 00:25:13,480 --> 00:25:16,700 vaid Ãỳks pointer, 32-bit nool, mis osutab 571 00:25:16,700 --> 00:25:18,740 vÃĊga esimesel sÃṁlme struktuuri. 572 00:25:18,740 --> 00:25:20,340 >> Aga nÃỳÃỳd lÃĊhme ennetada probleemi. 573 00:25:20,340 --> 00:25:23,230 Kui ma vaid meeles pidada minu programm aadress 574 00:25:23,230 --> 00:25:27,220 ning esimene sÃṁlm, esimese ruut selles andmestruktuur, 575 00:25:27,220 --> 00:25:31,760 Mis oleks parem olla nii umbes rakendamise mu ÃỳlejÃĊÃĊnud nimekiri? 576 00:25:31,760 --> 00:25:35,820 Mis peamine detail, mis lÃĊheb tagada see tegelikult toimib? 577 00:25:35,820 --> 00:25:39,250 Ja "tegelikult töötab" I TÃĊhendab, palju nagu string, 578 00:25:39,250 --> 00:25:42,180 laseb meil minna esimene mÃĊrk aastal Davin nime teiseks 579 00:25:42,180 --> 00:25:44,755 Lisa kolmandaks Neljas, kuni lÃṁpuni, 580 00:25:44,755 --> 00:25:47,880 kuidas me teame, kui me aasta lÃṁpus on seotud nimekirja, mis nÃĊeb vÃĊlja nagu see on? 581 00:25:47,880 --> 00:25:50,035 582 00:25:50,035 --> 00:25:50,660 Kui see on null. 583 00:25:50,660 --> 00:25:53,640 Ja ma olen esindatud selline nagu nagu elektriinsener vÃĊest, 584 00:25:53,640 --> 00:25:56,420 koos vÃĊhe madalikule sÃỳmbol, kehvasti. 585 00:25:56,420 --> 00:25:58,246 Aga see tÃĊhendab lihtsalt null kÃĊesolevas asjas. 586 00:25:58,246 --> 00:26:00,370 VÃṁite teha seda iga number viisil, kuid selle autor 587 00:26:00,370 --> 00:26:02,800 juhtus, et kasutada seda sÃỳmbolit siin. 588 00:26:02,800 --> 00:26:06,260 >> Nii kaua, kui me nöörile kÃṁik need sÃṁlmed kokku 589 00:26:06,260 --> 00:26:08,600 ainult mÃĊleta, kuhu Esimene on, nii kaua 590 00:26:08,600 --> 00:26:11,760 kui me paneme erilist sÃỳmboli vÃĊga viimase sÃṁlme nimekirja 591 00:26:11,760 --> 00:26:15,130 ja me kasutame null, sest see on mis meil on meie kÃĊsutuses, 592 00:26:15,130 --> 00:26:16,480 see nimekiri on tÃĊielik. 593 00:26:16,480 --> 00:26:20,190 Ja isegi kui ma ainult teile kursor Esimene element, sa, programmeerija, 594 00:26:20,190 --> 00:26:22,486 saab kindlasti juurde edasi. 595 00:26:22,486 --> 00:26:24,360 Kuid olgem lase oma meeled tiir natuke, 596 00:26:24,360 --> 00:26:26,140 kui nad ei ole juba Ãỳsna wandered-- mis 597 00:26:26,140 --> 00:26:28,723 saab sÃṁiduaega leida midagi selles nimekirjas? 598 00:26:28,723 --> 00:26:30,450 599 00:26:30,450 --> 00:26:33,470 Kurat, see on suur O n, mis ei ole halb, Ãṁiglus. 600 00:26:33,470 --> 00:26:34,800 Aga see on lineaarne. 601 00:26:34,800 --> 00:26:37,980 Oleme loobunud mida funktsioon massiivid, liikudes rohkem 602 00:26:37,980 --> 00:26:43,130 suunas see pildi dÃỳnaamiliselt pÃṁimitud vÃṁi seotud sÃṁlmed? 603 00:26:43,130 --> 00:26:44,970 604 00:26:44,970 --> 00:26:46,687 Me oleme loobunud muutmÃĊlu. 605 00:26:46,687 --> 00:26:48,770 Massiiv on tore, sest matemaatiliselt kÃṁik 606 00:26:48,770 --> 00:26:50,340 on seljad et seljad. 607 00:26:50,340 --> 00:26:52,370 Kuigi seda pilti tundub pÃĊris, ja isegi 608 00:26:52,370 --> 00:26:55,830 kuigi tundub, et need sÃṁlmed on ilusti vahedega, tegelikkuses 609 00:26:55,830 --> 00:26:56,830 nad vÃṁivad olla kÃṁikjal. 610 00:26:56,830 --> 00:27:01,590 OX1, Ox50, Ox123, Ox99 need sÃṁlmed vÃṁivad olla kÃṁikjal. 611 00:27:01,590 --> 00:27:05,960 Kuna malloc ei eraldada mÃĊlu laduma, kuid kÃṁikjal hunnik. 612 00:27:05,960 --> 00:27:09,080 Sa ei pruugi teada, et see on lÃĊheb tagasi tagasi tagasi. 613 00:27:09,080 --> 00:27:12,460 Ja nii see pildi reaalsus ei kavatse olla pÃĊris see ilus. 614 00:27:12,460 --> 00:27:16,140 >> Nii see lÃĊheb vÃṁtab natuke tööle rakendada seda funktsiooni. 615 00:27:16,140 --> 00:27:17,880 Nii et olgem rakendada Otsi. 616 00:27:17,880 --> 00:27:20,250 Ja me nÃĊeme, millist nutikas viis seda teha. 617 00:27:20,250 --> 00:27:24,660 Nii et kui ma otsingu funktsiooni ja Ma antud muutuja tÃĊisarv n 618 00:27:24,660 --> 00:27:28,490 otsida, ma pean teadma, uus sÃỳntaks otsin sees 619 00:27:28,490 --> 00:27:32,400 struktuur, mis on osutas, et leida n. 620 00:27:32,400 --> 00:27:33,210 Nii et teeme seda. 621 00:27:33,210 --> 00:27:36,030 >> Nii et kÃṁigepealt ma lÃĊhen edasi ja kuulutada sÃṁlme *. 622 00:27:36,030 --> 00:27:39,400 Ja ma kutsun seda pointer, lihtsalt kokkuleppeliselt. 623 00:27:39,400 --> 00:27:41,710 Ja ma initsialiseerida see esimene. 624 00:27:41,710 --> 00:27:43,770 Ja nÃỳÃỳd ma saan seda aastal mitmel viisil. 625 00:27:43,770 --> 00:27:45,436 Aga ma lÃĊhen vÃṁtta Ãỳhine lÃĊhenemisviis. 626 00:27:45,436 --> 00:27:50,180 Kuigi osuti ei ole vÃṁrdne null, ja see on kehtiv sÃỳntaks. 627 00:27:50,180 --> 00:27:54,550 Ja see tÃĊhendab lihtsalt seda jÃĊrgmise, nii Niikaua kui sa ei osutavad midagi. 628 00:27:54,550 --> 00:27:55,800 Mida ma tahan teha? 629 00:27:55,800 --> 00:28:01,939 >> Kui osuti dot n, lubage mul tagasi tulla sellele vÃṁrdub-- vÃṁrdub mis? 630 00:28:01,939 --> 00:28:03,105 Mis vÃĊÃĊrtust ma otsin? 631 00:28:03,105 --> 00:28:04,920 632 00:28:04,920 --> 00:28:06,590 Tegelik n, mis oli möödunud aastal. 633 00:28:06,590 --> 00:28:09,020 Nii et siin on veel Ãỳks omadus, C ja paljudes keeltes. 634 00:28:09,020 --> 00:28:13,705 Kuigi struktuuri nimetatakse sÃṁlm on vÃĊÃĊrtus n, tÃĊiesti Ãṁigustatud 635 00:28:13,705 --> 00:28:17,530 et ka kohalikud argument vÃṁi muutuja nimega n. 636 00:28:17,530 --> 00:28:20,085 Sest isegi me koos inimese silmad, vÃṁib eristada 637 00:28:20,085 --> 00:28:22,087 et see n on eeldatavasti sellest erinevad n. 638 00:28:22,087 --> 00:28:23,420 Kuna sÃỳntaks on erinev. 639 00:28:23,420 --> 00:28:26,211 Sul on dot ja pointer, arvestades, et see Ãỳks ei ole sellist asja. 640 00:28:26,211 --> 00:28:27,290 Nii et see on OK. 641 00:28:27,290 --> 00:28:29,120 See on OK, et helistada neile samu asju. 642 00:28:29,120 --> 00:28:32,380 >> Kui ma sind leida, ma olen lÃĊhed tahan teha midagi 643 00:28:32,380 --> 00:28:35,000 nagu teatada, et oleme leidnud n. 644 00:28:35,000 --> 00:28:37,930 Ja me lahkume, et kui kommentaar vÃṁi pseudokoodi kood. 645 00:28:37,930 --> 00:28:40,190 Else, ja siin on Huvitav osa, mida 646 00:28:40,190 --> 00:28:47,320 ma tahan teha, kui aktiivse sÃṁlme ei ole seal n, et ma hoolin? 647 00:28:47,320 --> 00:28:50,700 Kuidas saavutada jÃĊrgmised? 648 00:28:50,700 --> 00:28:53,710 Kui mu sÃṁrme Praegu on PTR ja see on 649 00:28:53,710 --> 00:28:55,920 osutades mis tahes Esimene on osutavad, 650 00:28:55,920 --> 00:28:59,290 kuidas ma liikuda mu sÃṁrme Lisa jÃĊrgmisel sÃṁlme koodi? 651 00:28:59,290 --> 00:29:01,915 Noh, mis on riivsai oleme kavatse jÃĊrgida antud juhul? 652 00:29:01,915 --> 00:29:03,464 653 00:29:03,464 --> 00:29:04,380 SihtrÃỳhm: [kuuldamatu]. 654 00:29:04,380 --> 00:29:05,630 DAVID J. Humala: Jah, jÃĊrgmine. 655 00:29:05,630 --> 00:29:06,640 656 00:29:06,640 --> 00:29:09,824 Nii et kui ma lÃĊhen tagasi oma kood siia, tÃṁepoolest, ma olen 657 00:29:09,824 --> 00:29:12,990 lÃĊheb minna ja öelda, pointer, mis on vaid ajutine variable-- see 658 00:29:12,990 --> 00:29:15,320 imelik nimi, PTR, kuid see on nagu temp-- 659 00:29:15,320 --> 00:29:19,234 Ma lÃĊhen, et seada kursor vÃṁrdne iganes pointer on-- 660 00:29:19,234 --> 00:29:22,150 ja jÃĊlle, et see saab olema vÃĊike kÃĊru jaoks moment-- dot kÃṁrval. 661 00:29:22,150 --> 00:29:23,551 662 00:29:23,551 --> 00:29:26,550 TeisisÃṁnu, ma lÃĊhen vÃṁtan sÃṁrme, mis sihib seda sÃṁlme 663 00:29:26,550 --> 00:29:31,247 siin ja ma Ãỳtlen, sa tead, mida, kui heita pilk jÃĊrgmisele vÃĊljale 664 00:29:31,247 --> 00:29:33,330 ja liigutage oma sÃṁrme mis iganes see osutavad. 665 00:29:33,330 --> 00:29:35,163 Ja see lÃĊheb korrata, korrata, korrata. 666 00:29:35,163 --> 00:29:37,630 Aga kui ei oma sÃṁrme enam ei tee Ãỳldse midagi? 667 00:29:37,630 --> 00:29:40,095 Niipea, mida koodirida tunda? 668 00:29:40,095 --> 00:29:40,970 SihtrÃỳhm: [kuuldamatu] 669 00:29:40,970 --> 00:29:43,060 DAVID J. Humala: Kui punkt samas osuti ei ole vÃṁrdne null. 670 00:29:43,060 --> 00:29:44,900 Mingil hetkel mu sÃṁrm on kavatse olla vastakuti null 671 00:29:44,900 --> 00:29:47,070 ja ma realiseerida see on lÃṁpuks see nimekiri. 672 00:29:47,070 --> 00:29:48,910 NÃỳÃỳd on see vÃĊike hÃĊdavale lihtsuse. 673 00:29:48,910 --> 00:29:51,580 Selgub, et kuigi me lihtsalt Ãṁppinud seda dot mÃĊrke 674 00:29:51,580 --> 00:29:55,220 struktuuridele, osuti ei struct. 675 00:29:55,220 --> 00:29:56,580 PTR on mis? 676 00:29:56,580 --> 00:29:58,350 Lihtsalt olla nitpicky. 677 00:29:58,350 --> 00:29:59,720 678 00:29:59,720 --> 00:30:01,360 See on kursor sÃṁlme. 679 00:30:01,360 --> 00:30:03,120 See ei ole sÃṁlm ise. 680 00:30:03,120 --> 00:30:06,650 Kui mul ei olnud star siin, pointer absolutely-- see sÃṁlm. 681 00:30:06,650 --> 00:30:08,650 See on nagu nÃĊdal Ãỳks deklaratsiooni muutuja, 682 00:30:08,650 --> 00:30:10,120 kuigi sÃṁna "sÃṁlm" on uus. 683 00:30:10,120 --> 00:30:13,860 >> Aga niipea, kui me vÃṁtame kasutusele star, see on nÃỳÃỳd kursor sÃṁlme. 684 00:30:13,860 --> 00:30:17,960 Ja kahjuks ei saa kasutada dot mÃĊrke pointer. 685 00:30:17,960 --> 00:30:21,070 Sa pead kasutama noole mÃĊrke, mis silmatorkavalt, 686 00:30:21,070 --> 00:30:23,470 on esimene kord, iga tÃỳkk sÃỳntaks nÃĊeb intuitiivne. 687 00:30:23,470 --> 00:30:25,245 See paistab sÃṁna otseses mÃṁttes nool. 688 00:30:25,245 --> 00:30:26,370 Ja see on hea asi. 689 00:30:26,370 --> 00:30:28,995 Ja siin sÃṁna otseses mÃṁttes nÃĊeb vÃĊlja nagu nool. 690 00:30:28,995 --> 00:30:31,870 Nii et ma arvan, et see la-- ma ei arvad, et ma Ãỳle-toimepanemise siin-- I 691 00:30:31,870 --> 00:30:34,120 arvan, et on viimane uus teos sÃỳntaksi me nÃĊeme. 692 00:30:34,120 --> 00:30:36,500 Ja Ãṁnneks on see tÃṁepoolest natuke rohkem intuitiivne. 693 00:30:36,500 --> 00:30:40,090 >> NÃỳÃỳd neile, kes vÃṁiks eelistada vana viisi, 694 00:30:40,090 --> 00:30:42,550 saate endiselt kasutada dot mÃĊrke. 695 00:30:42,550 --> 00:30:45,380 Aga nagu iga esmaspÃĊeval vestlus, me esimest korda 696 00:30:45,380 --> 00:30:50,530 vaja sinna minna, minna, et kÃĊsitleda, ja seejÃĊrel juurdepÃĊÃĊsu valdkonnas. 697 00:30:50,530 --> 00:30:51,897 Nii et see on ka Ãṁige. 698 00:30:51,897 --> 00:30:53,730 Ja ausalt öeldes, see on natuke pedantne. 699 00:30:53,730 --> 00:30:56,530 Sa sÃṁna otseses mÃṁttes öelda, dereference osuti ja sinna minna. 700 00:30:56,530 --> 00:30:59,320 SeejÃĊrel haarata .n, valdkonnas nimetatakse n. 701 00:30:59,320 --> 00:31:01,370 Aga ausalt, keegi ei taha kirjutada vÃṁi lugeda. 702 00:31:01,370 --> 00:31:03,620 Ja nii maailmas leiutatud noole mÃĊrke, mis 703 00:31:03,620 --> 00:31:06,980 vÃṁrdub identsed, see on lihtsalt sÃỳntaktiline suhkur. 704 00:31:06,980 --> 00:31:10,570 Nii fancy viis öelda seda nÃĊeb parem vÃĊlja, vÃṁi tundub lihtsam. 705 00:31:10,570 --> 00:31:12,296 >> Nii et nÃỳÃỳd ma lÃĊhen tegema Ãỳks teine ​​asi. 706 00:31:12,296 --> 00:31:15,420 Ma Ãỳtlen "murda", kui olen leidis ta, et ma ei pea otsima seda. 707 00:31:15,420 --> 00:31:17,620 Kuid see on asja olemus otsingu funktsiooni. 708 00:31:17,620 --> 00:31:21,710 Aga see on palju lihtsam, et LÃṁpuks ei kÃṁndida lÃĊbi kood. 709 00:31:21,710 --> 00:31:25,570 See on tÃṁepoolest formaalne rakendamine otsingu tÃĊnapÃĊeva jaotus kood. 710 00:31:25,570 --> 00:31:30,530 Julgen öelda, et insert ei ole eriti tore jalutada lÃĊbi 711 00:31:30,530 --> 00:31:33,180 visuaalselt, ega kustutada, isegi kuigi lÃṁpuks pÃĊeval 712 00:31:33,180 --> 00:31:35,460 need taanduvad Ãỳsna lihtne heuristika. 713 00:31:35,460 --> 00:31:36,330 >> Nii et teeme seda. 714 00:31:36,330 --> 00:31:39,250 Kui sa mu tuju siin, ma tegin tuua hunnik stress pallid. 715 00:31:39,250 --> 00:31:40,620 Ma tÃṁin hunnik numbreid. 716 00:31:40,620 --> 00:31:46,562 Ja kas me saada paar vabatahtlikud esindada 9, 17, 20, 22, 29 ja 34? 717 00:31:46,562 --> 00:31:48,270 Nii et sisuliselt kÃṁik kes on tÃĊna siin. 718 00:31:48,270 --> 00:31:50,170 719 00:31:50,170 --> 00:31:52,760 See oli Ãỳks, kaks, kolm, neli, viis, kuus inimest. 720 00:31:52,760 --> 00:31:55,740 Ja ma olen palutud go-- nÃĊha, ei Ãỳks taga tÃṁstab oma kÃĊed. 721 00:31:55,740 --> 00:32:01,910 OK, Ãỳks, kaks, kolm, neli, five-- andke laadida balance-- kuus. 722 00:32:01,910 --> 00:32:03,051 OK, sa kuus tule Ãỳles. 723 00:32:03,051 --> 00:32:04,050 Meil on vaja teisi inimesi. 724 00:32:04,050 --> 00:32:05,460 TÃṁime extra stress pallid. 725 00:32:05,460 --> 00:32:08,200 Ja kui sa vÃṁiksid vÃṁtta hetk, joon 726 00:32:08,200 --> 00:32:10,490 endid lihtsalt nagu see pilt siin. 727 00:32:10,490 --> 00:32:15,200 728 00:32:15,200 --> 00:32:15,959 >> Olgu. 729 00:32:15,959 --> 00:32:17,125 Vaatame, mis su nimi on? 730 00:32:17,125 --> 00:32:17,550 >> SihtrÃỳhm: Andrew. 731 00:32:17,550 --> 00:32:18,800 >> DAVID J. Humala: Andrew, te arv 9. 732 00:32:18,800 --> 00:32:19,540 Meeldiv kohtuda. 733 00:32:19,540 --> 00:32:20,400 Palun. 734 00:32:20,400 --> 00:32:21,593 735 00:32:21,593 --> 00:32:22,176 SihtrÃỳhm: Jen. 736 00:32:22,176 --> 00:32:22,662 DAVID J. Humala: Jen. 737 00:32:22,662 --> 00:32:23,162 David. 738 00:32:23,162 --> 00:32:23,765 Number 17. 739 00:32:23,765 --> 00:32:24,950 740 00:32:24,950 --> 00:32:25,450 Jah? 741 00:32:25,450 --> 00:32:26,400 >> SihtrÃỳhm: ma olen Julia. 742 00:32:26,400 --> 00:32:26,980 >> DAVID J. Humala: Julia, David. 743 00:32:26,980 --> 00:32:27,545 Number 20. 744 00:32:27,545 --> 00:32:28,507 745 00:32:28,507 --> 00:32:29,340 SihtrÃỳhm: Christian. 746 00:32:29,340 --> 00:32:30,715 DAVID J. Humala: Christian, David. 747 00:32:30,715 --> 00:32:31,541 Number 22. 748 00:32:31,541 --> 00:32:32,040 Ja siis? 749 00:32:32,040 --> 00:32:32,649 >> SihtrÃỳhm: JP. 750 00:32:32,649 --> 00:32:33,440 DAVID J. Humala: JP. 751 00:32:33,440 --> 00:32:34,880 Number 29. 752 00:32:34,880 --> 00:32:37,080 Nii et laske kÃĊia ja saada sisse-- Uh oh. 753 00:32:37,080 --> 00:32:38,486 754 00:32:38,486 --> 00:32:38,985 Uh oh. 755 00:32:38,985 --> 00:32:39,650 756 00:32:39,650 --> 00:32:40,150 OotereÅẅiim. 757 00:32:40,150 --> 00:32:41,360 758 00:32:41,360 --> 00:32:42,390 20. 759 00:32:42,390 --> 00:32:43,682 Kas kellelgi on SM? 760 00:32:43,682 --> 00:32:44,890 SihtrÃỳhm: Mul Sharpie. 761 00:32:44,890 --> 00:32:45,660 DAVID J. Humala: Sul Sharpie? 762 00:32:45,660 --> 00:32:46,159 OK. 763 00:32:46,159 --> 00:32:47,577 764 00:32:47,577 --> 00:32:49,160 Ja kas keegi on tÃỳkk paberit? 765 00:32:49,160 --> 00:32:51,562 766 00:32:51,562 --> 00:32:52,270 SÃĊÃĊsta loeng. 767 00:32:52,270 --> 00:32:53,810 768 00:32:53,810 --> 00:32:55,362 Tule. 769 00:32:55,362 --> 00:32:56,320 SihtrÃỳhm: Meil ​​on see. 770 00:32:56,320 --> 00:32:57,600 DAVID J. Humala: Me saime? 771 00:32:57,600 --> 00:32:58,577 Olgu, tÃĊnan. 772 00:32:58,577 --> 00:33:01,380 773 00:33:01,380 --> 00:33:02,520 Siit me tuleme. 774 00:33:02,520 --> 00:33:03,582 Kas see on teie? 775 00:33:03,582 --> 00:33:04,540 Sa lihtsalt salvestada pÃĊev. 776 00:33:04,540 --> 00:33:05,670 777 00:33:05,670 --> 00:33:07,220 Nii 29. 778 00:33:07,220 --> 00:33:10,510 779 00:33:10,510 --> 00:33:11,110 Olgu. 780 00:33:11,110 --> 00:33:13,360 781 00:33:13,360 --> 00:33:14,890 Ma valesti 29, kuid OK. 782 00:33:14,890 --> 00:33:15,720 Lase kÃĊia. 783 00:33:15,720 --> 00:33:18,114 Olgu, ma annan sulle Teie pen tagasi jÃṁudma. 784 00:33:18,114 --> 00:33:19,280 Nii et meil on need inimesed siin. 785 00:33:19,280 --> 00:33:20,330 Teeme veel Ãỳhe. 786 00:33:20,330 --> 00:33:23,750 Gabe, sa tahad mÃĊngida Esimene element siin? 787 00:33:23,750 --> 00:33:25,705 Me vajame sind juhtida neid trahvi folks. 788 00:33:25,705 --> 00:33:26,930 789 00:33:26,930 --> 00:33:31,030 Nii et 9, 17, 20, 22, sort 29. ja seejÃĊrel 34. 790 00:33:31,030 --> 00:33:32,160 791 00:33:32,160 --> 00:33:33,325 Kas me kaotame keegi? 792 00:33:33,325 --> 00:33:33,950 Mul on 34. 793 00:33:33,950 --> 00:33:36,730 Kui tegin-- OK, kes tahab olla 34? 794 00:33:36,730 --> 00:33:37,605 OK, tule Ãỳles, 34. 795 00:33:37,605 --> 00:33:39,280 796 00:33:39,280 --> 00:33:41,220 Olgu, seda saab vÃĊÃĊrt haripunkti. 797 00:33:41,220 --> 00:33:41,550 Mis su nimi on? 798 00:33:41,550 --> 00:33:42,040 >> SihtrÃỳhm: Peter. 799 00:33:42,040 --> 00:33:43,456 >> DAVID J. Humala: Peter, tule Ãỳles. 800 00:33:43,456 --> 00:33:46,810 Olgu, siin on terve hunnik tippe. 801 00:33:46,810 --> 00:33:49,060 Iga kutid esindab Ãỳks neist ristkÃỳliku. 802 00:33:49,060 --> 00:33:51,930 Ja Gabe, veidi veider mees vÃĊlja, moodustab esimene. 803 00:33:51,930 --> 00:33:54,850 Nii tema osuti on veidi vÃĊiksem ekraanile kui kÃṁik teisedki. 804 00:33:54,850 --> 00:33:58,120 Ja sel juhul, iga oma vasakule kÃĊed lÃĊheb kas suunaga allapoole, 805 00:33:58,120 --> 00:34:01,085 mis esindavad null, nii lihtsalt puudumisel osuti 806 00:34:01,085 --> 00:34:03,210 vÃṁi see saab olema suunaga at sÃṁlme kÃṁrval. 807 00:34:03,210 --> 00:34:05,440 >> Nii et kohe kui te kaunistavad endid nagu pildil 808 00:34:05,440 --> 00:34:07,585 siin, edasi minna ja punkt Ãỳksteist, koos Gabe 809 00:34:07,585 --> 00:34:11,030 eriti osutavad number 9 esindama nimekirja. 810 00:34:11,030 --> 00:34:14,050 OK, ja number 34, vasaku kÃĊega tuleks lihtsalt osutades pÃṁrandale. 811 00:34:14,050 --> 00:34:15,750 >> OK, nii et see on seotud nimekirja. 812 00:34:15,750 --> 00:34:17,580 Nii et see on stsenaarium kÃỳsimus. 813 00:34:17,580 --> 00:34:20,210 Ja tÃṁepoolest, see on tÃỳÃỳpiline of klassiks 814 00:34:20,210 --> 00:34:21,929 et sa vÃṁiksid proovida lahendada koodiga. 815 00:34:21,929 --> 00:34:25,020 Tahad lÃṁpuks sisestada uus element nimekirja. 816 00:34:25,020 --> 00:34:27,494 Sel juhul me ei kavatse proovida sisestades number 55. 817 00:34:27,494 --> 00:34:28,500 818 00:34:28,500 --> 00:34:30,860 Aga seal saab olema mÃṁnevÃṁrra erinevat juhtumit. 819 00:34:30,860 --> 00:34:34,409 Ja tÃṁepoolest, see saab olema Ãỳks big-picture takeaways siin on, 820 00:34:34,409 --> 00:34:35,659 Millised on erinevad juhtumid. 821 00:34:35,659 --> 00:34:39,120 Millised on erinevad, kui tingimused vÃṁi oksad, et teie programm vÃṁib olla? 822 00:34:39,120 --> 00:34:42,024 >> Noh, number Ãỳritad insert, mida me teame nÃỳÃỳd, et 55, 823 00:34:42,024 --> 00:34:44,650 aga kui sa ei tea, ette, Julgen vÃĊita, 824 00:34:44,650 --> 00:34:47,840 kuulub vÃĊhemalt kolm vÃṁimalikke olukordi. 825 00:34:47,840 --> 00:34:49,717 Kus vÃṁiks uus element olla? 826 00:34:49,717 --> 00:34:51,050 SihtrÃỳhm: Ja otsas vÃṁi keskel. 827 00:34:51,050 --> 00:34:54,150 DAVID J. Humala: LÃṁpus sisse keskel vÃṁi alguses. 828 00:34:54,150 --> 00:34:56,650 Nii et ma vÃĊita, seal on vÃĊhemalt kolm probleemid peame lahendama. 829 00:34:56,650 --> 00:34:58,691 Olgem valida, mida on vÃṁib-olla vaieldamatult kÃṁige lihtsam 830 00:34:58,691 --> 00:35:01,090 Ãỳks, kus uus element kuulub alguses. 831 00:35:01,090 --> 00:35:04,040 Nii et ma lÃĊhen on kood Ãỳsna nagu otsing, mis ma kirjutasin. 832 00:35:04,040 --> 00:35:07,670 Ja ma lÃĊhen on PTR, mis Ma esindan oma sÃṁrme, 833 00:35:07,670 --> 00:35:08,370 nagu tavaliselt. 834 00:35:08,370 --> 00:35:12,430 >> Ja pidage meeles, millist vÃĊÃĊrtust Kas me initsialiseerida 'p'? 835 00:35:12,430 --> 00:35:15,300 Nii et meil tuleb kÃṁigepealt tÃỳhjaks esialgu. 836 00:35:15,300 --> 00:35:16,410 837 00:35:16,410 --> 00:35:19,770 Aga mida me teeme, kui me olid sees meie otsingu funktsiooni? 838 00:35:19,770 --> 00:35:20,940 839 00:35:20,940 --> 00:35:24,870 Seame see vÃṁrdub esimese, mis ei tÃĊhenda seda teed. 840 00:35:24,870 --> 00:35:25,890 841 00:35:25,890 --> 00:35:30,570 Kui ma panen PTR vÃṁrdub esimene, mida peaks minu poolt tÃṁesti juhtides? 842 00:35:30,570 --> 00:35:31,070 Õigus. 843 00:35:31,070 --> 00:35:33,290 Nii et kui Gabe ja ma ei kavatse vÃṁrdne vÃĊÃĊrtuste siin 844 00:35:33,290 --> 00:35:34,760 me peame nii punkti number 9. 845 00:35:34,760 --> 00:35:36,420 >> Nii et see oli alguses meie lugu. 846 00:35:36,420 --> 00:35:38,700 Ja nÃỳÃỳd see on lihtsalt arusaadav, kuigi sÃỳntaks on uus. 847 00:35:38,700 --> 00:35:40,580 Kontseptuaalselt on see lihtsalt lineaarset otsingut. 848 00:35:40,580 --> 00:35:42,750 Kas 55 on vÃṁrdne 9? 849 00:35:42,750 --> 00:35:45,559 VÃṁi pigem, Ãỳtleme, et alla 9. 850 00:35:45,559 --> 00:35:47,600 Kuna ma Ãỳritan nuputada, kuhu panna 55. 851 00:35:47,600 --> 00:35:51,270 VÃĊhem kui 9, vÃĊhem kui 17 ja vÃĊhem kui 20, vÃĊhemalt 22, vÃĊhemalt 29, 852 00:35:51,270 --> 00:35:52,510 alla 34, no. 853 00:35:52,510 --> 00:35:55,080 NÃỳÃỳd oleme puhul Ãỳks vÃĊhemalt kolm. 854 00:35:55,080 --> 00:35:59,910 >> Kui ma tahan, et lisada 55 siin, mida rida koodi on vaja saada tÃĊidetud? 855 00:35:59,910 --> 00:36:01,890 Kuidas see pilt Inimestel on vaja vahetada? 856 00:36:01,890 --> 00:36:03,181 Mida ma pean tegema minu vasak kÃĊsi? 857 00:36:03,181 --> 00:36:04,530 858 00:36:04,530 --> 00:36:07,360 See peaks olema null esialgu sest ma olen lÃṁpus nimekirja. 859 00:36:07,360 --> 00:36:09,318 Ja mis peaks juhtuma, siin Peter, see oli? 860 00:36:09,318 --> 00:36:10,520 861 00:36:10,520 --> 00:36:12,430 Ta on ilmselt lÃĊheb punkt mulle. 862 00:36:12,430 --> 00:36:15,580 Nii et ma vÃĊita, seal on vÃĊhemalt kaks rida koodi proovi kood tÃĊna 863 00:36:15,580 --> 00:36:18,570 mis toimub rakendada seda stsenaariumi lisades 55 juures saba. 864 00:36:18,570 --> 00:36:20,950 Ja kas ma saaksin kellegi hop up ja lihtsalt esindavad 55? 865 00:36:20,950 --> 00:36:22,200 Olgu, sa oled uus 55. 866 00:36:22,200 --> 00:36:23,580 867 00:36:23,580 --> 00:36:27,054 >> Mis nÃỳÃỳd, kui jÃĊrgmine stsenaarium tuleb mööda, 868 00:36:27,054 --> 00:36:29,720 ja me tahame, et sisestada juures algab vÃṁi juht nimekirjas? 869 00:36:29,720 --> 00:36:31,100 Ja mis sinu nimi, number 55? 870 00:36:31,100 --> 00:36:31,420 >> SihtrÃỳhm: Jack. 871 00:36:31,420 --> 00:36:32,295 >> DAVID J. Humala: Jack? 872 00:36:32,295 --> 00:36:33,585 OK, meeldiv kohtuda. 873 00:36:33,585 --> 00:36:34,210 Tere tulemast pardale. 874 00:36:34,210 --> 00:36:36,640 NÃỳÃỳd me ei kavatse sisestada, Ãỳtleme, number 5. 875 00:36:36,640 --> 00:36:39,840 Siin on teine ​​kui kolm tulime varem. 876 00:36:39,840 --> 00:36:43,050 Nii et kui 5 kuulub alguses, Vaatame, kuidas me seda teada. 877 00:36:43,050 --> 00:36:46,310 Ma initsialiseerida minu PTR kursor number 9 uuesti. 878 00:36:46,310 --> 00:36:49,140 Ja ma sain aru, oh, 5 on alla 9. 879 00:36:49,140 --> 00:36:50,880 Nii et mÃĊÃĊrata see pilt meile. 880 00:36:50,880 --> 00:36:54,820 Kelle kÃĊsi, Gabe vÃṁi Taaveti vÃṁi-- mis number 9 nime? 881 00:36:54,820 --> 00:36:55,740 >> SihtrÃỳhm: Jen. 882 00:36:55,740 --> 00:36:58,406 >> DAVID J. Humala: Jen hands-- mida meie kÃĊed on vaja vahetada? 883 00:36:58,406 --> 00:36:58,905 884 00:36:58,905 --> 00:37:00,970 OK, nii et Gabe punktid, mida nÃỳÃỳd? 885 00:37:00,970 --> 00:37:01,640 Mind. 886 00:37:01,640 --> 00:37:02,750 Olen uus sÃṁlm. 887 00:37:02,750 --> 00:37:04,870 Nii et ma lihtsalt selline kÃĊik siin see visuaalselt. 888 00:37:04,870 --> 00:37:06,435 Ja vahepeal, mida ma rÃṁhutada, et? 889 00:37:06,435 --> 00:37:07,910 890 00:37:07,910 --> 00:37:09,020 Ikka, kui ma juhtides. 891 00:37:09,020 --> 00:37:10,000 Nii ongi. 892 00:37:10,000 --> 00:37:13,717 Nii lihtsalt tÃṁesti Ãỳks rida koodi parandused selles konkreetses kÃỳsimuses, tundub. 893 00:37:13,717 --> 00:37:14,800 Olgu, see on hea. 894 00:37:14,800 --> 00:37:17,580 Ja kas keegi on kohatÃĊide 5? 895 00:37:17,580 --> 00:37:18,080 Tule. 896 00:37:18,080 --> 00:37:20,270 897 00:37:20,270 --> 00:37:21,320 Me saame teile jÃĊrgmine kord. 898 00:37:21,320 --> 00:37:24,280 >> Olgu, nÃỳÃỳd-- ja Nagu kÃṁrvale, nimed 899 00:37:24,280 --> 00:37:28,510 Ma ei tee selgesÃṁnalise Ãṁiguse nÃỳÃỳd Paku pointer, eelkÃĊija pointer 900 00:37:28,510 --> 00:37:31,260 ja uue pointer, mis on ainult eesnimedega 901 00:37:31,260 --> 00:37:35,280 Valimisse koodi viiteid vÃṁi mu kÃĊed, mis on omamoodi suunaga Ãỳmber. 902 00:37:35,280 --> 00:37:36,060 Mis su nimi on? 903 00:37:36,060 --> 00:37:36,700 >> SihtrÃỳhm: Christine. 904 00:37:36,700 --> 00:37:37,100 >> DAVID J. Humala: Christine. 905 00:37:37,100 --> 00:37:38,090 Tere tulemast pardale. 906 00:37:38,090 --> 00:37:42,180 Olgu, lÃĊhme kaaluma nÃỳÃỳd pisut tÃỳÃỳtu stsenaariumi 907 00:37:42,180 --> 00:37:46,350 mille ma tahan lisada midagi 26 sellesse. 908 00:37:46,350 --> 00:37:47,090 20? 909 00:37:47,090 --> 00:37:47,590 Mis? 910 00:37:47,590 --> 00:37:50,510 Need oled-- hea asi on see pen. 911 00:37:50,510 --> 00:37:51,955 Olgu, 20. 912 00:37:51,955 --> 00:37:53,640 913 00:37:53,640 --> 00:37:57,570 Kui keegi vÃṁiks saada veel Ãỳks paber valmis igaks juhul-- eks. 914 00:37:57,570 --> 00:37:58,370 Oh, huvitav. 915 00:37:58,370 --> 00:37:59,760 916 00:37:59,760 --> 00:38:02,390 Noh see on nÃĊide loeng viga. 917 00:38:02,390 --> 00:38:03,894 OK, siis millised on teie nimi oligi? 918 00:38:03,894 --> 00:38:04,560 SihtrÃỳhm: Julia. 919 00:38:04,560 --> 00:38:07,559 DAVID J. Humala: Julia, saate pop vÃĊlja ja teeskle, et sa olid kunagi olemas? 920 00:38:07,559 --> 00:38:09,040 OK, see ei juhtunud. 921 00:38:09,040 --> 00:38:09,680 AitÃĊh. 922 00:38:09,680 --> 00:38:12,180 Seega arvan, et me tahame lisada Julia sellesse seotud nimekirja. 923 00:38:12,180 --> 00:38:13,780 Ta on number 20. 924 00:38:13,780 --> 00:38:15,530 Ja muidugi on ta lÃĊheb kuuluvad juures 925 00:38:15,530 --> 00:38:17,521 begin-- ei viita juures veel midagi. 926 00:38:17,521 --> 00:38:20,020 Nii et teie kÃĊsi vÃṁib selline olla alla null vÃṁi mÃṁned prÃỳgi vÃĊÃĊrtus. 927 00:38:20,020 --> 00:38:21,210 Olgem öelda kiire lugu. 928 00:38:21,210 --> 00:38:22,980 Ma osutades number 5 seekord. 929 00:38:22,980 --> 00:38:23,880 Siis ma kontrollin 9. 930 00:38:23,880 --> 00:38:25,130 Siis ma saan vaadata 17. 931 00:38:25,130 --> 00:38:26,247 Siis ma saan vaadata 22. 932 00:38:26,247 --> 00:38:27,650 933 00:38:27,650 --> 00:38:32,485 Ja ma saan aru, ooh, Julia peab minema enne 22. 934 00:38:32,485 --> 00:38:33,580 935 00:38:33,580 --> 00:38:34,660 Mis siis peab juhtuma? 936 00:38:34,660 --> 00:38:35,786 937 00:38:35,786 --> 00:38:36,910 Kelle kÃĊes on vaja vahetada? 938 00:38:36,910 --> 00:38:38,360 Julia, minu vÃṁi-- mis su nimi oligi? 939 00:38:38,360 --> 00:38:39,230 >> SihtrÃỳhm: Christian. 940 00:38:39,230 --> 00:38:40,060 >> DAVID J. Humala: Christian vÃṁi? 941 00:38:40,060 --> 00:38:40,560 >> SihtrÃỳhm: Andy. 942 00:38:40,560 --> 00:38:40,905 >> DAVID J. Humala: Andy. 943 00:38:40,905 --> 00:38:41,654 Christian vÃṁi Andy? 944 00:38:41,654 --> 00:38:44,280 945 00:38:44,280 --> 00:38:45,690 Andy peab kÃĊsk juures? 946 00:38:45,690 --> 00:38:46,780 947 00:38:46,780 --> 00:38:47,341 Julia. 948 00:38:47,341 --> 00:38:47,840 Olgu. 949 00:38:47,840 --> 00:38:48,960 Nii Andy, sa tahad osutavad Julia? 950 00:38:48,960 --> 00:38:50,120 Kuid oodake minut. 951 00:38:50,120 --> 00:38:53,260 Loos seni Ma olen omamoodi Ãỳks 952 00:38:53,260 --> 00:38:56,800 eest, mis tÃĊhendab, et osuti on asi, mis on 953 00:38:56,800 --> 00:38:57,850 liigub lÃĊbi nimekirja. 954 00:38:57,850 --> 00:39:00,800 Me vÃṁib-olla nime Andy, aga pole muutuja nimega Andy. 955 00:39:00,800 --> 00:39:04,320 Ainuke muutuja meil on Esimene, kes esindab Gabe. 956 00:39:04,320 --> 00:39:07,690 >> Nii et see on tegelikult miks nii kaugele oleme ei vaja seda. 957 00:39:07,690 --> 00:39:10,846 Kuid nÃỳÃỳd ekraanil on rÃĊÃĊkimata taas progn pointer. 958 00:39:10,846 --> 00:39:11,970 Nii et lubage mul olla selgesÃṁnaline. 959 00:39:11,970 --> 00:39:14,820 Kui see on osuti, mul oli parem natuke arukam 960 00:39:14,820 --> 00:39:15,950 minu iteratsiooni. 961 00:39:15,950 --> 00:39:19,580 Kui sa ei pahanda, et ma lÃĊhen siit lÃĊbi uuesti, tuues siia, juhtides siin. 962 00:39:19,580 --> 00:39:22,500 Aga andke mulle progn pointer, eelkÃĊija pointer, mis on 963 00:39:22,500 --> 00:39:24,740 liiki osutades element olin just. 964 00:39:24,740 --> 00:39:27,330 Nii et kui ma lÃĊhen siit, nÃỳÃỳd mu vasak kÃĊsi uuendused. 965 00:39:27,330 --> 00:39:29,370 Kui ma lÃĊhen siin mu vasak kÃĊsi uuendused. 966 00:39:29,370 --> 00:39:33,090 Ja nÃỳÃỳd ma ei ole mitte ainult viit element, mis lÃĊheb pÃĊrast Julia, 967 00:39:33,090 --> 00:39:36,300 Mul on veel viit Andy, element enne. 968 00:39:36,300 --> 00:39:39,430 Nii et teil on juurdepÃĊÃĊs sisuliselt riivsai, kui soovite, 969 00:39:39,430 --> 00:39:41,500 kÃṁik nÃṁutavad osuti. 970 00:39:41,500 --> 00:39:43,710 >> Nii et kui ma osutades Andy ja ma ka osutades 971 00:39:43,710 --> 00:39:47,105 at Christian, kelle kÃĊed NÃỳÃỳd tuleks mÃĊrkida mujal? 972 00:39:47,105 --> 00:39:48,770 973 00:39:48,770 --> 00:39:51,960 Nii Andy saab nÃỳÃỳd osutavad Julia. 974 00:39:51,960 --> 00:39:54,460 Julia saab nÃỳÃỳd juhtida at Christian. 975 00:39:54,460 --> 00:39:56,950 Sest ta saab kopeerida oma parema kÃĊe pointer. 976 00:39:56,950 --> 00:40:00,044 Ja mis tegelikult paneb sind tagasi see koht siin. 977 00:40:00,044 --> 00:40:02,460 Nii lÃỳhike, kuigi see viib meid omamoodi igavesti 978 00:40:02,460 --> 00:40:04,510 tegelikult uuendada seotud nimekirja, mÃṁistma 979 00:40:04,510 --> 00:40:06,580 et toimingud on suhteliselt lihtne. 980 00:40:06,580 --> 00:40:10,030 See on Ãỳks, kaks, kolm rida koodi lÃṁpuks. 981 00:40:10,030 --> 00:40:12,780 Aga pakitud Ãỳmber nende rida koodi eeldatavasti 982 00:40:12,780 --> 00:40:16,350 on natuke loogikat, et tÃṁhusalt kÃỳsib kÃỳsimuse, et kus me oleme? 983 00:40:16,350 --> 00:40:18,970 Kas me oleme alguses, keskel vÃṁi lÃṁpus? 984 00:40:18,970 --> 00:40:21,890 >> NÃỳÃỳd on kindlasti mÃṁne teise operatsioonide vÃṁiksime rakendada. 985 00:40:21,890 --> 00:40:24,880 Ja need pildid siin lihtsalt kirjeldada mida tegime inimestega. 986 00:40:24,880 --> 00:40:26,080 Aga eemaldamist? 987 00:40:26,080 --> 00:40:30,650 Kui ma tahan nÃĊiteks eemaldage number 34 vÃṁi 55, 988 00:40:30,650 --> 00:40:34,680 Ma vÃṁin olla sama koodi, aga ma lÃĊhen vaja Ãỳks vÃṁi kaks sammu. 989 00:40:34,680 --> 00:40:36,110 Sest see, mis uudist? 990 00:40:36,110 --> 00:40:40,460 Kui ma eemaldan keegi lÃṁpus, nagu number 55 ja siis 34, 991 00:40:40,460 --> 00:40:42,995 Mis on ka muuta, kui ma seda teen? 992 00:40:42,995 --> 00:40:44,870 Pean ei evict-- mis su nimi oligi? 993 00:40:44,870 --> 00:40:45,380 >> SihtrÃỳhm: Jack. 994 00:40:45,380 --> 00:40:46,255 >> DAVID J. Humala: Jack. 995 00:40:46,255 --> 00:40:49,770 Mul on mitte ainult evict-- tasuta Jack, nii sÃṁna otseses mÃṁttes helistada tasuta Jack, vÃṁi vÃĊhemalt 996 00:40:49,770 --> 00:40:53,530 pointer seal liiga, kuid nÃỳÃỳd mida peaks muutma, Peter? 997 00:40:53,530 --> 00:40:55,510 Tema kÃĊsi parem alustada suunaga allapoole. 998 00:40:55,510 --> 00:40:59,300 Sest niipea, kui ma helistada tasuta Jack, kui Peter on ikka osutades Jack 999 00:40:59,300 --> 00:41:02,530 ja seetÃṁttu ma hoida liiklevad nimekirja ja juurdepÃĊÃĊs sellele pointer, 1000 00:41:02,530 --> 00:41:05,650 see on kui meie vana sÃṁber segmenteerimine viga vÃṁib tegelikult algama. 1001 00:41:05,650 --> 00:41:07,860 Kuna me oleme andnud mÃĊlu tagasi Jack. 1002 00:41:07,860 --> 00:41:10,760 >> VÃṁite viibida seal kohmakalt hetkeks. 1003 00:41:10,760 --> 00:41:13,410 Kuna meil on ainult paar lÃṁpptoimingute kaaluda. 1004 00:41:13,410 --> 00:41:15,600 Pea eemaldamine loetelu, vÃṁi alguse-- ja see on 1005 00:41:15,600 --> 00:41:16,349 natuke tÃỳÃỳtu. 1006 00:41:16,349 --> 00:41:19,640 Sest meil on teada, et Gabe on selline eriline selles programmis. 1007 00:41:19,640 --> 00:41:21,440 Sest tÃṁepoolest, ta on oma pointer. 1008 00:41:21,440 --> 00:41:24,860 Ta ei ole lihtsalt on osutanud, nagu peaaegu kÃṁik teisedki siin. 1009 00:41:24,860 --> 00:41:28,112 >> Nii et kui juht nimekiri on eemaldatud, kelle kÃĊtes on vaja vahetada nÃỳÃỳd? 1010 00:41:28,112 --> 00:41:29,070 Mis su nimi oligi? 1011 00:41:29,070 --> 00:41:29,450 >> SihtrÃỳhm: Christine. 1012 00:41:29,450 --> 00:41:31,408 >> DAVID J. Humala: Ma olen kohutav at nimesid, ilmselt. 1013 00:41:31,408 --> 00:41:34,011 Nii Christine ja Gabe, kelle kÃĊed on vaja muuta 1014 00:41:34,011 --> 00:41:36,510 kui me pÃỳÃỳame eemaldada Christine, number 5, pildilt? 1015 00:41:36,510 --> 00:41:37,550 1016 00:41:37,550 --> 00:41:38,820 OK, teeme siis Gabe. 1017 00:41:38,820 --> 00:41:40,950 Gabe lÃĊheb punkt, arvatavasti on number 9. 1018 00:41:40,950 --> 00:41:42,230 1019 00:41:42,230 --> 00:41:44,642 Aga mis edasi juhtub? 1020 00:41:44,642 --> 00:41:46,600 SihtrÃỳhm: Christine peaks olema null [kuuldamatu]. 1021 00:41:46,600 --> 00:41:50,244 DAVID J. Humala: OK, me peaks ilmselt make-- kuulsin "null" kusagil. 1022 00:41:50,244 --> 00:41:51,410 SihtrÃỳhm: Null ja vaba teda. 1023 00:41:51,410 --> 00:41:51,855 DAVID J. Humala: NULL mida? 1024 00:41:51,855 --> 00:41:53,074 SihtrÃỳhm: Null ja vaba teda. 1025 00:41:53,074 --> 00:41:54,490 DAVID J. Humala: Null ja vaba teda. 1026 00:41:54,490 --> 00:41:55,422 Nii et see on vÃĊga lihtne. 1027 00:41:55,422 --> 00:41:58,380 Ja see on suurepÃĊrane, et sa oled nÃỳÃỳd sorteeri Kasvava sinna ei kuulu. 1028 00:41:58,380 --> 00:42:00,430 Sest sa oled olnud lahtiseotud nimekirja. 1029 00:42:00,430 --> 00:42:02,820 Olete edukalt toimunud orvuks nimekirjast. 1030 00:42:02,820 --> 00:42:07,770 Ja nii oli meil parem helistada tasuta nÃỳÃỳd Christine andma, et mÃĊlu tagasi. 1031 00:42:07,770 --> 00:42:10,240 Muidu iga kord, kui me kustutada sÃṁlme nimekirjast 1032 00:42:10,240 --> 00:42:14,230 me vÃṁiks muuta nimekiri lÃỳhem, kuid tegelikult vÃĊheneb 1033 00:42:14,230 --> 00:42:15,096 suurus mÃĊlu. 1034 00:42:15,096 --> 00:42:17,720 Ja kui me hoida lisades ja Lisades, lisades asjad loendisse 1035 00:42:17,720 --> 00:42:19,280 minu arvuti vÃṁib saada aeglasem ja aeglasem ja aeglasem, 1036 00:42:19,280 --> 00:42:21,740 sest ma otsa mÃĊlu, isegi kui ma ei ole tegelikult 1037 00:42:21,740 --> 00:42:25,580 kasutades Christine baiti mÃĊlu enam. 1038 00:42:25,580 --> 00:42:28,500 >> Nii lÃṁpuks on teisi stsenaariume, muidugi-- eemaldamine 1039 00:42:28,500 --> 00:42:30,640 keskel, eemaldamine aasta lÃṁpus, kui me nÃĊgime. 1040 00:42:30,640 --> 00:42:32,348 Aga huvitav NÃỳÃỳd on kÃỳsimus 1041 00:42:32,348 --> 00:42:34,770 saab kaaluda tÃĊpselt Mis on kÃĊigu aeg. 1042 00:42:34,770 --> 00:42:36,640 Nii et mitte ainult sa saad hoida oma paberitÃỳkke, kui Gabe, 1043 00:42:36,640 --> 00:42:38,640 sa ei pahanda, andes kÃṁik stressi pall. 1044 00:42:38,640 --> 00:42:42,100 TÃĊnan sind nii palju, et meie seotud nimekirja Vabatahtlike siin, kui sa saaksid. 1045 00:42:42,100 --> 00:42:45,320 >> [APPLAUSE] 1046 00:42:45,320 --> 00:42:46,700 >> DAVID J. Humala: Olgu. 1047 00:42:46,700 --> 00:42:51,110 Nii paar analÃỳÃỳtiline kÃỳsimused siis, kui suutsin. 1048 00:42:51,110 --> 00:42:59,670 Me oleme nÃĊinud seda muutma enne, suur O ja omega, Ãỳlemised piirid 1049 00:42:59,670 --> 00:43:02,520 ja alumised piirid sÃṁiduaega mÃṁne algoritmi. 1050 00:43:02,520 --> 00:43:04,950 Nii et olgem kaaluma ainult paar kÃỳsimust. 1051 00:43:04,950 --> 00:43:07,090 >> Üks, ja me Ãỳtlesime seda enne, mis töötab 1052 00:43:07,090 --> 00:43:10,647 aeg otsida nimekirja nii suur O? 1053 00:43:10,647 --> 00:43:13,480 Mis on Ãỳlemine piir on pooleli aega otsides seotud nimekirja 1054 00:43:13,480 --> 00:43:16,340 mida rakendatakse meie vabatahtlikele siin? 1055 00:43:16,340 --> 00:43:17,820 See on suur O n lineaarne. 1056 00:43:17,820 --> 00:43:20,630 Sest halvimal juhul element, nagu 55, 1057 00:43:20,630 --> 00:43:23,830 me vÃṁiks otsin vÃṁiks olla, kui Jack oli kÃṁik kuidagi lÃṁpuni. 1058 00:43:23,830 --> 00:43:28,250 Ja kahjuks erinevalt array me ei saa fancy seekord. 1059 00:43:28,250 --> 00:43:31,820 Kuigi kÃṁik meie inimesed olid sorteeritud vÃĊike elemente, 5, 1060 00:43:31,820 --> 00:43:35,900 kÃṁik viis kuni suurem osa, 55, mis on tavaliselt hea. 1061 00:43:35,900 --> 00:43:38,815 Aga mida see eeldus enam ei vÃṁimalda meil teha? 1062 00:43:38,815 --> 00:43:39,775 1063 00:43:39,775 --> 00:43:40,650 SihtrÃỳhm: [kuuldamatu] 1064 00:43:40,650 --> 00:43:40,920 DAVID J. Humala: Ütle uuesti? 1065 00:43:40,920 --> 00:43:41,800 SihtrÃỳhm: MuutmÃĊlu. 1066 00:43:41,800 --> 00:43:43,049 DAVID J. Humala: MuutmÃĊlu. 1067 00:43:43,049 --> 00:43:46,330 Ja omakorda see tÃĊhendab, et me ei ole kasuta enam nÃṁrk nulle, intuitsiooni, 1068 00:43:46,330 --> 00:43:49,365 ja ilmselget kasutades binaarne Otsige ja jaga ja valitse. 1069 00:43:49,365 --> 00:43:51,240 Sest kuigi me inimestele vÃṁib ilmselt 1070 00:43:51,240 --> 00:43:54,610 nÃĊha, et Andy ja Christian olid umbes keskel nimekirja 1071 00:43:54,610 --> 00:43:57,670 Me teame ainult, et kui arvuti koorides nimekirja 1072 00:43:57,670 --> 00:43:59,029 algusest. 1073 00:43:59,029 --> 00:44:00,570 Nii et me oleme loobunud, et muutmÃĊlu. 1074 00:44:00,570 --> 00:44:04,380 >> Nii suur O n on praegu Ãỳleval seotud meie search aega. 1075 00:44:04,380 --> 00:44:07,920 Aga omega meie search? 1076 00:44:07,920 --> 00:44:11,535 Mis alampiiri otsimine mÃṁnda number selles loetelus? 1077 00:44:11,535 --> 00:44:12,410 SihtrÃỳhm: [kuuldamatu] 1078 00:44:12,410 --> 00:44:13,040 DAVID J. Humala: Ütle uuesti? 1079 00:44:13,040 --> 00:44:13,420 SihtrÃỳhm: One. 1080 00:44:13,420 --> 00:44:13,800 DAVID J. Humala: One. 1081 00:44:13,800 --> 00:44:14,760 Nii konstantse ajaga. 1082 00:44:14,760 --> 00:44:17,020 Parimal juhul, Christine on tÃṁepoolest alguses nimekirja. 1083 00:44:17,020 --> 00:44:19,020 Ja me otsime number 5, nii et me ta leidsime. 1084 00:44:19,020 --> 00:44:19,787 Nii et ei ole suur asi. 1085 00:44:19,787 --> 00:44:22,370 Aga ta ju olema loetelu alguses kÃĊesolevas asjas. 1086 00:44:22,370 --> 00:44:23,745 Aga midagi sellist Kustuta? 1087 00:44:23,745 --> 00:44:24,717 1088 00:44:24,717 --> 00:44:26,300 Mis siis, kui soovid kustutada element? 1089 00:44:26,300 --> 00:44:29,200 Milline on Ãỳlemise ja alumise tÃṁkke kustutamise kohta midagi, mis on seotud 1090 00:44:29,200 --> 00:44:29,699 List? 1091 00:44:29,699 --> 00:44:35,195 1092 00:44:35,195 --> 00:44:36,070 SihtrÃỳhm: [kuuldamatu] 1093 00:44:36,070 --> 00:44:36,420 DAVID J. Humala: Ütle uuesti? 1094 00:44:36,420 --> 00:44:37,067 SihtrÃỳhm: n. 1095 00:44:37,067 --> 00:44:38,900 DAVID J. Humala: n on tÃṁepoolest Ãỳlemise. 1096 00:44:38,900 --> 00:44:41,700 Sest halvimal juhul pÃỳÃỳame kustutada Jack, nagu me tegime. 1097 00:44:41,700 --> 00:44:43,050 Ta on kogu tee lÃṁpus. 1098 00:44:43,050 --> 00:44:45,419 Viib meid igavesti, vÃṁi n samme teda leida. 1099 00:44:45,419 --> 00:44:46,460 Nii et see on Ãỳlemine piir. 1100 00:44:46,460 --> 00:44:47,430 See on lineaarne, kindlasti. 1101 00:44:47,430 --> 00:44:50,970 Ja parimal juhul sÃṁiduaega vÃṁi alumised piirid on parimal juhul 1102 00:44:50,970 --> 00:44:51,975 oleks konstantne aeg. 1103 00:44:51,975 --> 00:44:54,600 Sest ÃĊkki proovite kustutada Christine ja me lihtsalt veab 1104 00:44:54,600 --> 00:44:55,558 ta alguses. 1105 00:44:55,558 --> 00:44:56,350 NÃỳÃỳd oota. 1106 00:44:56,350 --> 00:44:59,370 Gabe oli ka alguses, ja meil oli ka uuendada Gabe. 1107 00:44:59,370 --> 00:45:01,150 Nii et see ei olnud vaid Ãỳks samm. 1108 00:45:01,150 --> 00:45:04,210 Nii et see on tÃṁepoolest konstantne aega, parimal juhul 1109 00:45:04,210 --> 00:45:06,345 eemaldada vÃĊikseima elemendi? 1110 00:45:06,345 --> 00:45:07,360 1111 00:45:07,360 --> 00:45:10,960 See on, kuigi see vÃṁib olla kaks, kolm vÃṁi isegi 100 rida koodi, 1112 00:45:10,960 --> 00:45:14,000 kas see on sama palju read, mitte mÃṁnes tsÃỳklina 1113 00:45:14,000 --> 00:45:16,577 ja sÃṁltumatu suurus nimekirja, absoluutselt. 1114 00:45:16,577 --> 00:45:18,660 Kustutamine element alguses nimekirja 1115 00:45:18,660 --> 00:45:21,940 isegi kui me peame tegelema Gabe, on ikka konstantne aega. 1116 00:45:21,940 --> 00:45:24,220 >> Nii et see tundub suur samm tagasi. 1117 00:45:24,220 --> 00:45:27,000 Ja milline ajaraiskamine siis, kui nÃĊdalas Ãỳhe ja nÃĊdalas 1118 00:45:27,000 --> 00:45:30,250 null me ei ole mitte ainult pseudokoodi kood kuid tegelikku koodi 1119 00:45:30,250 --> 00:45:35,780 rakendada midagi, mis on samamoodi base n, vÃṁi logige pigem n, base 2 1120 00:45:35,780 --> 00:45:37,150 poolest sÃṁiduaega. 1121 00:45:37,150 --> 00:45:40,710 Nii et miks kuradit oleks tahame alustada kasutades midagi seotud nimekirja? 1122 00:45:40,710 --> 00:45:41,517 Jah. 1123 00:45:41,517 --> 00:45:44,022 >> SihtrÃỳhm: Nii saate lisada elemendid massiivi. 1124 00:45:44,022 --> 00:45:46,230 DAVID J. Humala: nii saate lisada elemente massiivi. 1125 00:45:46,230 --> 00:45:47,550 Ja ka see on temaatilised. 1126 00:45:47,550 --> 00:45:49,740 Ja me nÃĊeme jÃĊtkuvalt see on see kompromiss, palju 1127 00:45:49,740 --> 00:45:51,573 nagu me oleme nÃĊinud kompromissile merge sort. 1128 00:45:51,573 --> 00:45:54,606 Me vÃṁiks tÃṁesti kiirendada otsida vÃṁi sortimine, pigem 1129 00:45:54,606 --> 00:45:57,480 kui me kulutame veidi rohkem ruumi ning on tÃĊiendav patakas mÃĊlu 1130 00:45:57,480 --> 00:45:58,760 vÃṁi massiivi merge sort. 1131 00:45:58,760 --> 00:46:01,270 Aga me kulutame rohkem ruumi, kuid me aega sÃĊÃĊsta. 1132 00:46:01,270 --> 00:46:04,820 Sel juhul me oleme loobuvad aega, kuid me oleme 1133 00:46:04,820 --> 00:46:08,170 saada paindlikkust, dÃỳnaamilisust kui soovite, 1134 00:46:08,170 --> 00:46:10,280 mis on vaieldamatult positiivne omadus. 1135 00:46:10,280 --> 00:46:11,520 >> JÃĊlgime ka kulutada ruumi. 1136 00:46:11,520 --> 00:46:13,710 Mis mÃṁttes on seotud list kallim 1137 00:46:13,710 --> 00:46:15,700 nii ruumi kui massiivi? 1138 00:46:15,700 --> 00:46:18,379 1139 00:46:18,379 --> 00:46:19,920 Kus on lisaruumi tuleb? 1140 00:46:19,920 --> 00:46:20,460 Jah? 1141 00:46:20,460 --> 00:46:21,800 >> SihtrÃỳhm: [kuuldamatu] pointer. 1142 00:46:21,800 --> 00:46:23,310 >> DAVID J. Humala: Jah, me Samuti on osuti. 1143 00:46:23,310 --> 00:46:25,560 Nii et see on minorly tÃỳÃỳtu et enam olen 1144 00:46:25,560 --> 00:46:27,780 Ma ladustamiseks lihtsalt int esindama int. 1145 00:46:27,780 --> 00:46:30,990 Ma hoidmiseks int ja osutiga, mis on samuti 32 bitti. 1146 00:46:30,990 --> 00:46:33,470 Nii, et ma sÃṁna otseses mÃṁttes kahekordistunud palju ruumi vahel. 1147 00:46:33,470 --> 00:46:36,040 Nii et see on kompromiss, kuid see on juhul, int. 1148 00:46:36,040 --> 00:46:39,580 Oletame, et sa ei ole hoidmiseks int, kuid arvan, et kÃṁik need ristkÃỳlikud 1149 00:46:39,580 --> 00:46:43,290 vÃṁi iga nende inimeste esindas ÜhesÃṁnaga, ingliskeelne sÃṁna, mis 1150 00:46:43,290 --> 00:46:46,430 vÃṁib olla viis mÃĊrki, 10 mÃĊrki, vÃṁib-olla isegi rohkem. 1151 00:46:46,430 --> 00:46:49,940 Siis lisades vaid 32 rohkem bitte vÃṁib olla vÃĊhem tÃĊhtis. 1152 00:46:49,940 --> 00:46:52,160 >> Mida teha, kui iga ÃỳliÃṁpilastele tutvustamise 1153 00:46:52,160 --> 00:46:55,107 olid sÃṁna otseses mÃṁttes Ãṁpilane structs et on nimed ja majad ja vÃṁibolla 1154 00:46:55,107 --> 00:46:57,065 telefoninumbreid ja Twitter kÃĊepidemed ja sarnased. 1155 00:46:57,065 --> 00:46:59,564 Nii et kÃṁik vÃĊljad hakkasime rÃĊÃĊgime teisel pÃĊeval, 1156 00:46:59,564 --> 00:47:02,410 palju vÃĊhem suur asi, kui meie tippe saada rohkem huvitavaid 1157 00:47:02,410 --> 00:47:05,972 ja suur veeta, eh, tÃĊiendav osuti lihtsalt Ãỳhendada neid koos. 1158 00:47:05,972 --> 00:47:07,180 Aga tÃṁesti, see on kompromiss. 1159 00:47:07,180 --> 00:47:09,560 Ja tÃṁepoolest, kood on keerulisem, nagu te peate 1160 00:47:09,560 --> 00:47:11,770 vaata koorides kaudu et konkreetne nÃĊide. 1161 00:47:11,770 --> 00:47:14,302 Aga mis siis, kui oli mÃṁned PÃỳha Graal siin. 1162 00:47:14,302 --> 00:47:17,010 Mis siis, kui me ei vÃṁta samm tahapoole, kuid tohutu samm edasi 1163 00:47:17,010 --> 00:47:19,180 ja rakendada info struktuuri, mille kaudu me 1164 00:47:19,180 --> 00:47:22,870 vÃṁib leida elemente nagu Jack vÃṁi Christine vÃṁi mis tahes muud osad 1165 00:47:22,870 --> 00:47:25,870 Selles massiivi tÃṁsi konstantset aega? 1166 00:47:25,870 --> 00:47:26,920 Otsing on konstantne. 1167 00:47:26,920 --> 00:47:28,320 Kustuta konstantne. 1168 00:47:28,320 --> 00:47:29,570 Sisesta on konstantne. 1169 00:47:29,570 --> 00:47:32,260 KÃṁik need toimingud on konstantne. 1170 00:47:32,260 --> 00:47:33,750 See oleks meie PÃỳha Graal. 1171 00:47:33,750 --> 00:47:36,690 Ja see on koht, kus me kiirenemist jÃĊrgmine kord. 1172 00:47:36,690 --> 00:47:38,600 NÃĊeme siis. 1173 00:47:38,600 --> 00:47:39,371